03.03.2011, 17:21 | #1 |
Участник
|
ax2009 игнорирует изменения кода
Всем здравствуйте!
Возникла следующая проблема: есть Map в DataDictionary, для таблицы Table настроен Mapping. В последствии в Map добавили новое поле, обновили Mapping для таблицы, но при попытке в коде обратиться к новому полю через Map, вываливается трассировка стека с ошибкой "Поле с кодом '0' не найдено в таблице Table". Чтобы проверить, удалил полностью Mapping для данной таблице, но ситуация не изменилась, т.е.: X++: Table table; Map map; select table; Map = table; info(Map.Oldfield); //проходит (хотя mapping отсутствует) info(Map.NewField); //здесь вываливает трассировку стека Есть еще одна проблема, возможна причина у них одна: создали класс, потом поменяли название, после рестарта АОС, класс имеет старое имя, делаем восстановить, компилировать и вуаля, класс уже имеет новое имя. Если кто сталкивался с проблемой, подскажите пожалуйста куда смотреть. Версия Ax2009 SP1 RU5, kernel=application = 5.0.1500.2985 |
|
03.03.2011, 17:27 | #2 |
Модератор
|
Со слоями ничего не напутали? Версионность включена?
|
|
03.03.2011, 17:32 | #3 |
Участник
|
Со слоями вроде все нормально, все происходит в одном слое. Версионность не включена.
|
|
03.03.2011, 18:03 | #4 |
Модератор
|
Цитата:
Сообщение от patron
Всем здравствуйте!
Возникла следующая проблема: есть Map в DataDictionary, для таблицы Table настроен Mapping. В последствии в Map добавили новое поле, обновили Mapping для таблицы, но при попытке в коде обратиться к новому полю через Map, вываливается трассировка стека с ошибкой "Поле с кодом '0' не найдено в таблице Table". Чтобы проверить, удалил полностью Mapping для данной таблице, но ситуация не изменилась, т.е.: Как то я такое тоже делал http://axforum.info/forums/blog.php?b=225 с Maps\AddressMap и Maps\AddressMap_RU. Надо в моем случае добавить в метод\Classes\FormRunListener_Address_RU\addressInfo код X++: case formstr(NewMyForm) : return [[#AddressGroup, tablenum(AddressMap)]]; Может натолкнет на мысль. Там к мапам надо еще классы проверить. При открытии формы вызывается класс, который накидывает доп. поля или отключает лишние. (В твоем случае класс ищи сам) Стек трассировки проверь.
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. Последний раз редактировалось Poleax; 03.03.2011 в 18:07. |
|
04.03.2011, 09:41 | #5 |
Участник
|
Map как раз-таки AddressMap_RU как и в Вашем случае Poleax. Но классы все настроены, проблема именно при обращении к полю через Map, на форме поля отображаются верно. Проблемы происходит при смене, например, города, при котором очищаются нижестоящие поля через метод modifiedTown на Map и вот как раз в этом методе происходит обращения к новому полю для его очистки и трассировка стека.
X++: public server void modifiedTown() { ... this.NewField = ''; //здесь трассировка стека ... } Последний раз редактировалось patron; 04.03.2011 в 09:45. |
|
04.03.2011, 10:25 | #6 |
Участник
|
Цитата:
Однако бывает, что Аксапта "не ловит" изменения, которые произошли в косвенных объектах. типичные случаи: класс -> таблица -> мап форма -> таблица -> поле -> тип в этом случае надо (упорядочено по возрастанию надежности и возрастанию геморройности для программиста) = восстановить объект (правай кнопка мыши восстановить) = обновить объекты AOD (сервис \ средства разработки \ Объекты приложения \ Обновить AOD) = или выйти и зайти в аксапту = удалить индексные файлы приложения = выполнить глобальную перекомпиляцию. |
|
04.03.2011, 10:33 | #7 |
Участник
|
Спасибо за совет. Но, к сожалению, все эти операции были проделаны и к результату не привели. Помог следующий способ: экспорт объекта, затем удаление его полностью из слоя, а затем обратный экспорт. Всем спасибо за советы!
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |