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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.01.2026, 22:08   #1  
Lankey is offline
Lankey
Участник
 
195 / 30 (2) +++
Регистрация: 19.05.2020
Простой код, но UpdateConflict, почему?
Мне попался код, который очень простой и не кажется ошибочным на первый взгляд, но он выдавал updateConflict. Я хочу лучше понять механику процесса, буду благодарна объяснению
X++:
ttsbegin
while select forupdate purchline
where purchid = 'MyCurrentPONumber'
{
   ...
    if (some condition)
    {    
        ttsbegin;
        purchline.FieldA = 'aa';
        purchline.update();
        ttscommit;
    }
}
ttscommit
Здесь проблема была в том, что purchline.update(); давал updateConflict, тк purchline.update() вызывает стандартную фцнкциональность versioning которая делает update на purchline , c тем же PurchID в VersioningPurchaseOrder.archivePurchLine()
Я также понимаю, что этот update(в versioning) меняет recversion и ,соответственно, он уже не тот на линиях, что был выбран в "while select forupdate purchline"

Но я тогда не понимаю,
1) как можно в одной транйакции(то есть, либо все проапдейчены линии, либо нет) сделать апдейт в всех линий какого-нибудь одного заказа за закупку? Это же типичный сценарий, но versioning может его сломать...
2) есть ли в коде выше какие-то очевидные ошибки (если бы вы не знали, что там проблема есть). вроде, классика делать
ttsbegin
while select forupdate purchline
where purchid = 'MyCurrentPONumber'
{
purchline.update();
}
ttscommit
3)Ну, и вообще, это же одна транзакция тут (внешняя, что до while select), то есть lock должен защищать от одновременного апдейста разными транцакциями. В рамках одной все должно быть ок, разве нет?

Последний раз редактировалось Lankey; 07.01.2026 в 22:19.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DAX2009 почему setprefix не работает в циклах oleggy DAX: Программирование 1 03.05.2020 19:37
FormSegmentedEntryControl и FormSegment control. Почему нет mandatory свойства ? Logger DAX: Программирование 1 06.11.2018 19:29
А как в ax7 код метода получить? mazzy DAX: Программирование 13 17.10.2017 23:44
Принадлежит ли код определенной номерной серии? Poleax DAX: Программирование 7 23.09.2010 13:06
Channel9: Peter Villadsen and Gustavo Plancarte: X++ to MSIL Blog bot DAX Blogs 30 24.08.2010 17:11

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:43.