AcDbRegAppTable(9) Invalid Entry

Автор Тема: AcDbRegAppTable(9) Invalid Entry  (Прочитано 7144 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #15 : 09-04-2021, 00:51:26 »
Для начала попробуй при помощи Editor.GetSelection выбрать примитивы в чертеже и передать их в эту функцию. Затем посмотри будет ли чертеж испорчен. Если нет - значит ищи ошибки у себя в другой части программы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #16 : 11-04-2021, 00:54:16 »
Затем посмотри будет ли чертеж испорчен
Проверил двумя способами, как при помощи Editor.GetSelection так и просто исключением вызова моего проблемного метода в коде. Результат такой: при помощи Editor.GetSelection раз через раз приводит к появлению ошибки AcDbRegAppTable(9) Invalid Entry, во втором случае все нормально - вызов метода исключен из кода, ошибок не возникает. Значит мой код вызывает ошибку при присвоении xdata, но как понять где?
Где еще можно покопаться?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #17 : 11-04-2021, 01:10:53 »
Результат такой: при помощи Editor.GetSelection раз через раз приводит к появлению ошибки AcDbRegAppTable(9) Invalid Entry
Что такое "раз через раз"? Точнее пожалуйста.
И что делает acCurDb.GetBuildingAreaNumber(); ???
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #18 : 11-04-2021, 10:46:13 »
Раз через раз - делаю серию запусков своего кода из 10 запусков после 2-3 при проверке через Audit получаю ошибку AcDbRegAppTable(9) Invalid Entry.

И что делает acCurDb.GetBuildingAreaNumber();
Запрашивает номер строительного района из свойств чертежа.
Код - C# [Выбрать]
  1. public static string GetBuildingAreaNumber(this Database db)
  2.         {
  3.             DatabaseSummaryInfoBuilder sumInfo = new DatabaseSummaryInfoBuilder(db.SummaryInfo);
  4.             var areaNumber = sumInfo.Subject;
  5.             if (areaNumber.Length > 0)
  6.             {
  7.                 return areaNumber;
  8.             }
  9.             else
  10.             {
  11.                 throw new NullReferenceException("Set construction area number in source drawing by Drawing properties => subject");
  12.             }
  13.         }

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #19 : 11-04-2021, 17:12:35 »
Я проверял такой код:
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.AutoCAD.Runtime;
  5.  
  6. // This line is not mandatory, but improves loading performances
  7. [assembly: CommandClass(typeof(TestXdata.MyCommands))]
  8.  
  9. namespace TestXdata
  10. {
  11.   public class MyCommands
  12.   {
  13.     [CommandMethod("TestXdata")]
  14.     public void TestXdataHandler()
  15.     {
  16.       Document doc = Application.DocumentManager.MdiActiveDocument;
  17.       if (doc == null) return;
  18.       Editor ed = doc.Editor;
  19.       PromptSelectionResult rs = ed.GetSelection();
  20.       while (rs.Status == PromptStatus.OK && rs.Value.Count > 0)
  21.       {
  22.         ObjectIdCollection ids = new ObjectIdCollection(rs.Value.GetObjectIds());
  23.         AttachXDataToSelectionSetObjects(ref ids, doc.Database);
  24.         rs = ed.GetSelection();
  25.       }
  26.     }
  27.     public static void AttachXDataToSelectionSetObjects(ref ObjectIdCollection ids, Database db)
  28.     {
  29.       string appName = "GreenSnake";
  30.       string xdataStr = db.SummaryInfo.Subject;
  31.       if (ids.Count > 0)
  32.       {
  33.         using (Transaction tr = db.TransactionManager.StartTransaction())
  34.         {
  35.           RegAppTable regTab = tr.GetObject(db.RegAppTableId, OpenMode.ForWrite) as RegAppTable;
  36.           if (!regTab.Has(appName))
  37.           {
  38.             RegAppTableRecord regTabRec = new RegAppTableRecord();
  39.             regTabRec.Name = appName;
  40.             regTab.Add(regTabRec);
  41.             tr.AddNewlyCreatedDBObject(regTabRec, true);
  42.           }
  43.           tr.Commit();
  44.         }
  45.         using (Transaction tr = db.TransactionManager.StartTransaction())
  46.         {
  47.           using (ResultBuffer rb = new ResultBuffer())
  48.           {
  49.             rb.Add(new TypedValue((int)DxfCode.ExtendedDataRegAppName, appName));
  50.             rb.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, xdataStr));
  51.  
  52.             foreach (ObjectId id in ids)
  53.             {
  54.               Entity ent = tr.GetObject(id, OpenMode.ForWrite) as Entity;
  55.               if (ent != null) ent.XData = rb;
  56.             }
  57.           }
  58.           tr.Commit();
  59.         }
  60.       }
  61.     }
  62.   }
  63. }
Наверное раз 50 запустил. Потом _AUDIT - никаких ошибок нет. Так что ищи у себя дальше ошибки.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #20 : 11-04-2021, 17:20:27 »
Я внес правки, но это не сработало, по-прежнему

AcDbRegAppTable(9)                Invalid Entry
AcDbRegAppTable(9)                was not repaired.
Я думаю что там еще должны были быть ошибки. Давай полный лог.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #21 : 11-04-2021, 18:06:33 »
Давай полный лог.

Command: _netload
Command: SYNCDRAWINGS
Regenerating model.

Dimension disassociated.
Dimension disassociated.
Command: '_zoom
Specify corner of window, enter a scale factor (nX or nXP), or
[All/Center/Dynamic/Extents/Previous/Scale/Window/Object] <real time>: _e Regenerating model.

Command: AUDIT

Fix any errors detected? [Yes/No] <N>:



Auditing Header


Auditing Tables


Auditing Entities Pass 1

Pass 1 26600   objects audited
Auditing Entities Pass 2

AcDbRegAppTable(9)                Invalid Entry
AcDbRegAppTable(9)                was not repaired.
Pass 2 26600   objects audited
Auditing Blocks


 161     Blocks audited



Auditing AcDsRecords


Total errors found 1 fixed 0

Erased 0 objects


Automatic save to C:\Users\Paragon\appdata\local\temp\Drawing1_1_1_1179.sv$ ...

Command:
« Последнее редактирование: 11-04-2021, 18:10:45 от Александр Ривилис »

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #22 : 11-04-2021, 18:14:41 »
Так что ищи у себя дальше ошибки.
В каком направлении искать? Объекты я больше не передаю-пользуюсь ObjectIdCollection, транзакции разделил на две раздельные. Что еще можно исключить?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #23 : 11-04-2021, 18:24:10 »
Atomohod,
Мой код у тебя тоже вызывает ошибки в файле?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #24 : 11-04-2021, 18:27:20 »
Что еще можно исключить?
Ну например мне не нравится throw у тебя в GetBuildingAreaNumber. В данном случае вроде бы ничего, но если бы ты вызывал этот код внутри транзакции и throw вызвалось, то транзакция была бы незавершенной.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #25 : 11-04-2021, 18:57:09 »
Мой код у тебя тоже вызывает ошибки в файле?

В моем случае он не отрабатывает
Command: TESTXDATA

Select objects: Specify opposite corner: 56895 found

Select objects:
; error: bad argument type: lentityp nil

Select objects:

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #26 : 11-04-2021, 19:14:54 »
Atomohod,
Такое впечатление, что у тебя работает не мой код.
Такая ошибка возникает в VisualLisp:
; error: bad argument type: lentityp nil
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #27 : 11-04-2021, 19:58:19 »
у тебя работает не мой код
Код Ваш на C#, мой тоже полностью на нем. VisualLisp точно у меня нигде не применяется я его не знаю. Откуда он вызывается я теряюсь в догадках - никакие аргументы я никуда не передаю.

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #28 : 11-04-2021, 19:59:04 »
Вот видео работы кода у меня

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbRegAppTable(9) Invalid Entry
« Ответ #29 : 11-04-2021, 20:10:24 »
Atomohod,
1. Измени имя команды.
2. Как записывать видео для нашего форума у меня в подписи. На твоём видео кроме того, что ты показал в конце сообщение об ошибке я ничего разглядеть не смог.
3. Похоже у тебя в AutoCAD загружены еще какие-то приложения, возможно на VisualLisp, использующие реакторы.
Дальше я пас. Я проверил работоспособность кода и убедился, что он не портит чертеж. Идей, что именно у тебя может портить  чертеж, у меня не осталось. Надеюсь, что у тебя в проекте CopyLocal установлено в False и ссылки идут на библиотеки именно той версии и разрядности, что и у AutoCAD, который ты используешь, что на этот AutoCAD установлены все обновления, что он совместим с той Windows, которая у тебя установлена, и т.д. и т.п.
« Последнее редактирование: 11-04-2021, 20:43:53 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение