AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.06.2013, 15:17   #1  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
Ax 2012 R2. Поле "не извлечено"
Коллеги,
Столкнулся с такой проблемой, создаю новое поле на стандартной таблице, добавляю его на форму, открываю форму и вижу на месте где должно находиться новое поля надпись "не извлечено". если открыть таблицу через браузер таблиц, то поле есть и редактируется. проделывал разные танцы с бубном, помогают через раз, точного алгоритма не выявил. Есть ли способ решения?
Изображения
 
Старый 14.06.2013, 15:30   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А если включить эту галочку (см тут http://kashperuk.blogspot.com/2011/1...ld-access.html), может увидите ошибку какую?
За это сообщение автора поблагодарили: Logger (2).
Старый 14.06.2013, 16:30   #3  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
включил. никаких ошибок нет. поле все в том же состоянии(
Старый 14.06.2013, 17:51   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ну, я такое видел только если синхронизация на таблице не была сделана после добавления поля.
А так - ничего другого в голову не приходит. Очистка пользовательского кэша формы? и т.п.
Старый 14.06.2013, 17:59   #5  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
в данном случае как оказалось, нужно было синхронизировать родительскую таблицу, хотя поле добавил в дочернюю
Старый 15.06.2013, 00:37   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ааа, ну что ж сразу не сказали, что иерархия. Но да, получается лечение такое же, как и обычно - просто синхронизация таблицы.
Старый 15.06.2013, 18:22   #7  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Иван, может создашь запрос, что б починили.
Мое видение - если не про синхронизирована хоть одна таблица потомок или родитель, всю эту подлую семейку подсвечивать красной вертикальной линией, как это было в предыдущих версиях.
__________________
Axapta book for developer
Старый 17.06.2013, 08:56   #8  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от MikeR Посмотреть сообщение
Иван, может создашь запрос, что б починили.
Мое видение - если не про синхронизирована хоть одна таблица потомок или родитель, всю эту подлую семейку подсвечивать красной вертикальной линией, как это было в предыдущих версиях.
лучше бы автоматом синхронизировались все таблицы в иерархии, по типу инкрементной компиляции
Старый 18.06.2013, 09:58   #9  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
Все таки проблема не в синхронизации. Только что добавил поле в дочернюю таблицу, синхронизировал обе таблицы, добавил поле на форму. открываю форму через рабочую область, поле отображается как "не извлечено", открываю таблицу браузером таблиц, редактирую поле в нескольких записях, все сохранилось. открываю форму, картина все та же. открываю форму через АОТ, поле отобразилось правильно

ПС мне вот интересно, у меня у одного такая проблема или еще никто не пробовал добавлять поля в Ax2012?
За это сообщение автора поблагодарили: Logger (3).
Старый 18.06.2013, 10:14   #10  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
а у вас чистая R2 или CU1 ?
Старый 18.06.2013, 10:24   #11  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
скорее всего чистая R2
версия приложения 6.2.1000.156
Старый 22.08.2013, 12:33   #12  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
У меня работает изменением свойства источника данных OnlyFetchActive
X++:
       ,     , ,  ,    .  ,       ,           ,      ,      .
__________________
Axapta book for developer
За это сообщение автора поблагодарили: leva (1), aitep (0).
Старый 17.02.2014, 12:08   #13  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Angry Включение конф.ключа добавляет поля со значением null в существующие записи
AX 2012 R2 CU7 (6.2.1000.4501), в настройках (Администрирование системы/Настройка/Лицензирование/Конфигурация лицензии) выключен конф. ключ Главная книга - дополнительно/Консолидация (LedgerAdvConsolidations), потому что на проекте не предполагалось использовать консолидацию. После этого были созданы компании (записи в CompanyInfo), затем на тестовой разноске журнала ГК получается ошибка:
Код:
Поле "IsConsolidationCompany" в таблице "CompanyInfo" не было явным образом выбрано.
(S)\Data Dictionary\Tables\CompanyInfo\Methods\isConsolidationCompany - line 17
(S)\Classes\LedgerJournalTransUpdate\checkConsolidation - line 35
(S)\Classes\LedgerJournalTransUpdate\check - line 17
(S)\Classes\LedgerJournalTransUpdateCust\check - line 84
(S)\Classes\LedgerJournalTransUpdate\ledgerVoucherCheck - line 77
(S)\Classes\LedgerJournalCheckPost\checkJournal - line 405
(S)\Classes\LedgerJournalCheckPost\run - line 144
(C)\Classes\LedgerJournalCheck\main - line 49
(C)\Classes\FormFunctionButtonControl\Clicked
Круто, стандартный код не был переделан под то, чтобы проверять включенность конфигурационного ключа или хотя бы то, что значение поля было-таки выбрано из базы. Включаю конфигурационный ключ, синхронизируюсь, проверяю - ошибка сохраняется, в обозревателе продолжаю видеть в значении поля "Не извлечено". Это оказалось вполне логично с учетом того, что поля, привязанные к включенному конфигурационному ключу, были добавлены со значением по умолчанию null
Название: DirParty-IsConsolidationCompany.png
Просмотров: 6606

Размер: 2.7 Кб
Лечится это явным прописыванием значений в новые поля, но в целом ситуация неприятна: получается, даже если бы стандартный код работал корректно и все заранее проверял, то после включения конфигурационного ключа (скажем, решили-таки использовать консолидацию на уже работающей системе) можно огрести проблем из-за того, что значение по умолчанию у новых полей - не "пустое" значение для соответствующего базового типа, а null. Интересно, кто-нить еще с таким сталкивался, или это только мне так повезло?
Старый 17.02.2014, 12:27   #14  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Мне казалось, что в 2012 при отключении ключей не "отключаются" поля в SQL, нет? Может быть, что у вас АОС просто не увидел изменения? Например, снимая какой-то ключ у поля обычно приходится кроме синхронизации / компиляции (в т.ч. CIL) еще и перезайти парочку раз, а в запущенных случаях еще и AOS перегрузить.
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: gl00mie (1).
Старый 17.02.2014, 12:56   #15  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Точно, я неверно сформулировал исходную проблему: поля создались изначально при синхронизации в рамках контрольного списка установки со значением по умолчанию null, но когда создавались записи компаний, конфигурационный ключ LedgerAdvConsolidations уже был выключен, поэтому поля, связанные с консолидацией, не были заполнены значением по умолчанию для соответствующего базового типа (enum) и так и остались null. Проблем обнаружилось три:
  • включение конфигурационного ключа не привело к заполнению связанных с ним полей в существующих записях значением по умолчанию для их базового типа в приложении
  • ядро ожидает, что всегда получит значение поля, отличное от null, если оно явно указало поле в списке выборки select
  • стандартный код, без проверки состояния конфигурационного ключа обращающийся к полям, привязанным к этому ключу, до включения ключа закономерно валился с ошибкой, потому что ядро даже не пыталось выбрать значения полей из базы, а после включения ключа валился с ошибкой, потому что ядро явно пыталось выбрать значения, но получало null и считало, что значения полей явно не были выбраны.
По сути, ошибка «Поле "%1" в таблице "%2" не было явным образом выбрано» в данном случае вводит в заблуждение, потому что путает понятия явного указания поля в select и получения null в качестве значения этого поля. Последнее может быть как следствием того, что поле не выбиралось, так и следствием того, что оно выбиралось, но в БД оно имеет значение null.

Последний раз редактировалось gl00mie; 17.02.2014 в 13:05. Причина: дополнение
За это сообщение автора поблагодарили: sukhanchik (4).
Старый 17.06.2015, 09:48   #16  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
296 / 854 (29) +++++++
Регистрация: 23.10.2012
Добрый день!
Мой вопрос про DAX 2012 R2 и определенные поля в таблице:
Есть таблица с рядом полей, через обозреватель, все поля замечательно редактируются (соответственно в свойствах полей выставлен allowedit == true).
Однако, в гриде на форме доступна для редактирования только часть полей (форму всю облазил, везде allowedit && enabled == true).
Создал новую форму, создал грид ссылающийся на эту же таблицу и вижу ту же самую картину - редактировать поля возможно только на момент создания записи(в свойствах датасорса, как неудивительно, allowedit == true).
Что это такое?

Последний раз редактировалось Товарищ ♂uatr; 17.06.2015 в 10:01.
Старый 17.06.2015, 10:23   #17  
axm2013
Гость
 
n/a
Таблица не Valid Time State Table случайно?
Ну и с правами не игрались?
За это сообщение автора поблагодарили: Товарищ ♂uatr (1).
Старый 17.06.2015, 16:42   #18  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
296 / 854 (29) +++++++
Регистрация: 23.10.2012
Цитата:
Сообщение от axm2013 Посмотреть сообщение
Таблица не Valid Time State Table случайно?
Ну и с правами не игрались?
Да, именно в этом дело.
Правда, с правами доступа обыгрался (в дополнение к роли системного администратора, создал роль содержащую привилегию на данную таблицу и в саму роль добавил доступ к форме "PastDataAccess" по умолчанию Delete) результата на форме не вижу.
Неверно роль настроил?
Старый 18.06.2015, 09:35   #19  
axm2013
Гость
 
n/a
Имхо сложно сказать смотреть надо. Было бы замечательно если бы пример проблемы в виде xpo-шника выгрузили.
Старый 16.01.2017, 18:18   #20  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,929 / 3227 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от ice Посмотреть сообщение
Все таки проблема не в синхронизации. Только что добавил поле в дочернюю таблицу, синхронизировал обе таблицы, добавил поле на форму. открываю форму через рабочую область, поле отображается как "не извлечено", открываю таблицу браузером таблиц, редактирую поле в нескольких записях, все сохранилось. открываю форму, картина все та же. открываю форму через АОТ, поле отобразилось правильно

ПС мне вот интересно, у меня у одного такая проблема или еще никто не пробовал добавлять поля в Ax2012?
Привет. Мы поймали багу на обычной табличке (без наследования).
Наследование ни при чем.

Как воспроизводить :
1. Берем, создаем табличку (для определенности AAA).
2. Cоздаем в ней строковое поле TEST.
(Если кому-то лень, то можно импортировать прилагаемый XPO. Только тогда надо удалить в импортированной табличке поле TEST2 и перестартовать аос)
3. Синхронизируем табличку.
4. (опциональный пункт и на воспроизводимость бага не влияет) - настраиваем логирование SysDataBaseLog по табличке AAA
5. Включаем логирование всех SQL запросов (этот пункт опять же не влияет на воспроизводимость бага, но позволяет увидеть проблему со всей очевидностью)
6. Открываем обозреватель таблички. Создаем запись. На SQL уйдет запрос примерно такого вида :
Цитата:
Оператор SQL: (AAA) INSERT INTO AAA (TEST,MODIFIEDDATETIME,MODIFIEDBY,CREATEDDATETIME,CREATEDBY,RECVERSION,PARTITION,RECID) VALUES (?,?,?,?,?,?,?,?) [Идентификатор=105315, Использовано повторно=Нет]
7. Открываем еще примерно 5 штук обозревателей таблицы и в каждом создаем запись (достаточно и одного, но для надежности лучше 5. У меня получалось воспроизвести баг с одним дополнительно открытым обозревателем. Так что всего было 2 обозревателя открыто)
8. Создаем в табличке новое строковое поле TEST2.
9. Синхронизируемся.
10. Открываем обозреватель табличек. Создаем запись, заполняя какое-то значение для поля TEST2.
С большой вероятностью уйдет запрос такого вида
Цитата:
Оператор SQL: (AAA) INSERT INTO AAA (TEST,MODIFIEDDATETIME,MODIFIEDBY,CREATEDDATETIME,CREATEDBY,RECVERSION,PARTITION,RECID) VALUES (?,?,?,?,?,?,?,?) [Идентификатор=33086, Использовано повторно=Да]
т.е. в нем совсем не будет упомянуто поле TEST2 !!!

Если все же ушел корректный перечень полей на вставке, то можно открыть еще 1-2 обозревателя и повторить в нем действия п.10
Должен уйти кривой запрос на вставку в котором поле TEST2 не упомянуто.
Соответственно, в базе будет создана запись с пустым (дефолтным) значением.

Пробуем перехитрить аксапту.
Закрываем клиента.
Заходим снова.
Открываем обозреватель таблички AAA.
Все ок.
Создаем запись - тоже все ок. На вставку уходит оба поля (TEST и TEST2)

Все хорошо ?
Как бы не так!

Открываем еще один обозреватель таблицы.
Теперь внимательнее. С вероятностью примерно 10 % - в БД уйдет кривой запрос на выборку, без поля TEST2. Например такой :
Цитата:
Оператор SQL: (AAA) SELECT T1.TEST,T1.MODIFIEDDATETIME,T1.MODIFIEDBY,T1.CREATEDDATETIME,T1.CREATEDBY,T1.RECVERSION,T1.PARTITION,T1.RECID FROM AAA T1 WHERE (PARTITION=?) ORDER BY T1.RECID OPTION(FAST 19) [Идентификатор=33638, Использовано повторно=Да]
(в запросе нет поля TEST2)

При этом в обозревателе в столбце для TEST2 будет написано "Не извлечено" - как раз тот случай который ICE описал. Если попробовать наложить какой нибудь фильтр или отсортировать записи то с вероятностью 99 % уйдет запрос с полей TEST2 в перечне полей и все будет ок.

Далее. Создаем в новом обозревателе таблиц новую запись. Заполняем поля непустыми значениями и видим в логе запросов что с вероятностью 99 % в перечне полей на вставку нет поля TEST2.
Открываем еще один обозреватель таблиц - повторяем наши действия - то же самое.
С очень высокой вероятностью идет запрос
Цитата:
Оператор SQL: (AAA) INSERT INTO AAA (TEST,MODIFIEDDATETIME,MODIFIEDBY,CREATEDDATETIME,CREATEDBY,RECVERSION,PARTITION,RECID) VALUES (?,?,?,?,?,?,?,?) [Идентификатор=33086, Использовано повторно=Да]
вместо запроса
Цитата:
Оператор SQL: (AAA) INSERT INTO AAA (TEST,TEST2,MODIFIEDDATETIME,MODIFIEDBY,CREATEDDATETIME,CREATEDBY,RECVERSION,PARTITION,RECID) VALUES (?,?,?,?,?,?,?,?) [Идентификатор=XXXX, Использовано повторно=Да]
При этом после вставки обозреватель таблички отображает введенное нами значение в поле TEST2 как будто оно вставлено в табличку. Но реально в SQL оно имеет пустое, дефолтное значение. В этом легко убедиться если посмотреть в базу средствами SQL или в том же обозревателе перечитать запись. Если посмотреть историю изменения таблички (для этого мы и включали логирование SysDataBaseLog), то видно что там на вставке ядро думало что поле TEST2 существует в базе и мы его заполняем, т.е. в метод Application.logInsert() ядро прислало корректный перечень значений, а поломка идет где-то дальше - уже на этапе формирования SQL запроса.

В общем, складывается ощущение что в Аосе для каждой таблички есть пул объектов содержащий перечень ее полей (перечень курсоров ?) И при выполнении запроса ядро хватает первую попавшийся элемент из этого пула и использует для формирования запроса. Поэтому с некоторой вероятностью как для чтения так и для вставки запрос может получиться нормальным, а может содержать неверный набор полей. Почему то, когда я тестировал, то у меня вероятность воспроизведения глюка при вставке записи была на порядок выше чем при чтении. При этом во всех случаях когда в запроса было написано "Использовано повторно=Нет" - то глюка не было. А когда был глюк то для него было "Использовано повторно=Да"
Мое предположение про пул объектов это только догадка, основанная на наблюдениях за системой.
(Когда игрался с воспроизведениям бага и создавал еще и поле TEST3, удалось достичь смешной ситуации когда из под одной сессии было открыто 3 обозревателя таблички. У всех в гриде были видны и доступны все поля, а на вставку у первого обозревателя уходили поля TEST, TEST2, TEST3
у второго TEST, TEST2,
а у третьего только TEST. В общем полный расколбас был)
Отдельно обращаю внимание на то, что не только обозреватели таблиц переоткрывались, но сам клиент аксапты перестартовывался после добавления полей ! Причем пакость еще в том что первый обозреватель может нормально открыться и ты уже думаешь что все ок и все кеши прочистились. А открываешь второй, третий и там лезет баг.
------------------------------------------------


В чем основной вопрос поста:
1. Как лечить указанный баг ?

Мне пока удалось только перестартом АОСа. Но это очень неудобно в случае когда еще кто-то сидит и кодирует на аосе.
Да даже если никого нет на аосе - неудобно все закрывать ради перестарта аоса. (Ведь как обычно пишем - покодировали, сразу потестили немного - проверили все ли ок - и не хочется все закрывать и рестартовать аос - это неудобно)
Пробовал также (ничего не помогло):
а. делать синхронизацию.
б. сбрасывать кеши на клиенте и аосе
в. Стандартный финт compile node, refresh node, compile node, который успешно помогал прочищать кеш аоса в 2009-й - здесь не помогает.

Есть ли какой то способ прочистить пул объектов с перечнем полей, не перезагружая аос ?


2. Может быть баг уже исправлен в каком то очередном релизе и нужно просто поставить свежий билд ? Кто-нибудь в курсе, с какой версии исправлено ?
У нас версия ax 2009 R3 ( билд 6.3.2000.4755 Axapta 2012 R3 Cumulative Update 9+)


3. Как дальше жить ?
Вложения
Тип файла: xpo Table_AAA_2017_01_16_18_10_DEV_SAPPWMS01_2712.xpo (1.4 Кб, 748 просмотров)

Последний раз редактировалось Logger; 16.01.2017 в 18:39. Причина: опечатки
Теги
ax2012, command line parameters, internal, nocursorreuse, баг, не извлечено, параметры командной строки, поле не извлечено

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX Sustained Engineering: Announcing Compatibility Certification of App-V 5.0 and TFS 2012 with Dynamics AX 2012 CU5 and Dynamics AX 2012 R2 CU1 Blog bot DAX Blogs 0 01.06.2013 04:38
AX 2012 R2 инсталляция polygris DAX: Администрирование 4 29.04.2013 15:38
dynamics-community.at: Neue Product Release Training Web Seminars für Dynamics AX 2012 R2 Blog bot DAX auf Deutsch 0 17.01.2013 12:11
DAX: Official Dynamics AX 2012 R2 Content (update) - Where is it, and how can you find out about updates? Blog bot DAX Blogs 0 03.12.2012 11:11
emeadaxsupport: New Content for Microsoft Dynamics AX 2012 : October 2011 Blog bot DAX Blogs 0 27.10.2011 17:11

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:33.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.