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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.05.2012, 08:18   #1  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
отладка AX2012
отлаживаю проект в AX2012, не я писал.

новая форма, какие-то временные таблицы. по идее пользователь должен выбрать несколько записей на форме и они вставятся как misc charges к определённой строке PurchLine.

делаю, нажимаю ОК, получаю ошибку типа "Cannot edit a record in Purchase order lines (PurchLine).
An update conflict occurred due to another user process deleting the record or changing one or more fields in the record."

хорошо, делаю как сделал бы в 2009, ставлю брейкпойнт в классе Info в методе add чтобы узнать, откуда ноги растут. дебаггер ловит брейкпойнт, но в стеке самый нижний метод это PurchLine.Update()! не вызывается же update() на таблице сам по себе? ясно что я пойду длинным путём и посмотрю, что же в коде происходит на этой форме, которая не работает. но почему в дебаггере не видно, откуда вызывается update() на PurchLine???

исполнение бизнес-логики в CIL отключено.
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 03.05.2012, 08:51   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,175 / 1559 (58) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от offenmeier Посмотреть сообщение
дебаггер ловит брейкпойнт, но в стеке самый нижний метод это PurchLine.Update()! не вызывается же update() на таблице сам по себе?
Возможно обновление запускается в отдельном потоке?
Старый 03.05.2012, 09:05   #3  
Dark Light is offline
Dark Light
Участник
Аватар для Dark Light
 
64 / 49 (2) +++
Регистрация: 17.02.2009
Адрес: Омск
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Возможно обновление запускается в отдельном потоке?
или из внешней системы?
Старый 03.05.2012, 09:33   #4  
driller is offline
driller
Сам.AX
Аватар для driller
Самостоятельные клиенты AX
SAP
 
78 / 54 (2) ++++
Регистрация: 11.04.2007
Адрес: Красноярск
Может там update_recordset/RecordSortedList используется, или что то подобное?
Вот этот способ должен помочь.
__________________
"Считать метафору доказательством, поток праздных слов источником истины, а себя оракулом - это заблуждение, свойственное всем нам."
Поль Валери

Последний раз редактировалось driller; 03.05.2012 в 10:28.
Старый 03.05.2012, 18:42   #5  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 502 (18) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Я такую картину видел при рекурсии. Т.е. если методы вызываются повторно, то они не дублируются в стеке, а перемещаются наверх списка.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 04.05.2012, 06:33   #6  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
посмотрел, что там делается на самом деле, а вызов там очень простой: update_recordset.
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 01.03.2019, 22:36   #7  
ax_mct is offline
ax_mct
Участник
Аватар для ax_mct
 
2,392 / 915 (35) +++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от offenmeier Посмотреть сообщение
посмотрел, что там делается на самом деле, а вызов там очень простой: update_recordset.
Я бы избавился от update_recordset и вызывал reread.
Старый 02.03.2019, 05:28   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,218 / 2121 (77) +++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Link Посмотреть сообщение
Я такую картину видел при рекурсии. Т.е. если методы вызываются повторно, то они не дублируются в стеке, а перемещаются наверх списка.
Но реальный стек все равно можно увидеть
Рекурсия. Глюк отладчика.
Старый 02.03.2019, 21:58   #9  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
277 / 191 (7) ++++++
Регистрация: 07.05.2009
Адрес: Москва
Буквально на днях делал Job для обновления PurchLine, и тоже заметил эту ошибку Пытался решить через:
X++:
while select forUpdate purchLine
{
    ....
    purchLine.update();
}
Не взлетело (

Помог вот такой код:
X++:
while select pessimisticLock purchLine
{
    ....
    purchLine.update();
}
Может и вам поможет
Старый 13.03.2019, 16:31   #10  
Dodle is offline
Dodle
Участник
Аватар для Dodle
 
3 / 10 (1) +
Регистрация: 13.03.2019
I would use reread if I were you.
Старый 13.03.2019, 18:45   #11  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
277 / 191 (7) ++++++
Регистрация: 07.05.2009
Адрес: Москва
But, I was me and you were you
Старый 15.03.2019, 15:28   #12  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,435 / 945 (34) +++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Конкретно для строк закупок проблема связана с модулем хранения версий закупок. Всякие PurchTableVersion, PurchTableHistory, PurchLineHistory...

Там может получиться так, что при обновлении первой строки закупки будет установлен признак IsModified для всех остальных строк этой же закупки. В результате и получаем конфликт обновления

Т.е., во-первых, ошибка "плавающая". Может быть, а может не быть. Во-вторых, первая строка всегда обновляется корректно. Проблема возникает при обновлении второй строки. Точнее, той порции строк, которые Axapta считывает "за раз" в свой кеш. И тут только reread() помогает

PS: Посмотрел, где же я на это натыкался. Ситуация обратная. Признак IsModifed снимается у всех строк вот в этом методе

\Classes\VersioningPurchaseOrder\archivePurchLine

Соответственно, можно во все циклы по PurchLine добавлять условие

X++:
        if (purchLine.IsModified)
        {
            purchLine.reread();
        }
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...

Последний раз редактировалось Владимир Максимов; 15.03.2019 в 15:55.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: AX2012 and AX2009 or AX4 side by side - AOS performance counters overwritten Blog bot DAX Blogs 0 13.03.2012 18:11
axblog4u: Dynamics AX2012: Create Custom Service using X++ Blog bot DAX Blogs 0 24.01.2012 21:11
ukax: Microsoft Dynamics AX2012 - Partner Update Briefing Blog bot DAX Blogs 0 23.07.2011 20:15
sumitax: AX2012 Training material download Blog bot DAX Blogs 0 11.04.2011 13:11
mfp: Seeing is believing - AX2012 Type Hierarchies Blog bot DAX Blogs 0 02.02.2011 14:11
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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