![]() |
#1 |
Модератор
|
![]() Цитата:
Невозможно отредактировать запись в Платежи по данным клиент-банка (BankClientPayment_RU).
Возник конфликт обновления из-за того, что другой пользовательский процесс выполняет удаление записи или изменение одного или нескольких полей в записи.
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
![]() |
#2 |
Участник
|
Вполне возможно что вы ее и держите. Был такой прикол что в выбранной записи менялся RecVersion, и тогда при вызове update возникала такая ошибка. Посмотрите дебагером.
|
|
![]() |
#3 |
Участник
|
Нужно использовать "оптимистическую транзакцию" (см. код), а также проверить, что в транзакции на добавление/изменение записи действительно нет ничего лишнего
X++: public void run() { #OCCRetryCount ; try { ttsbegin; ... ttscommit; } catch (Exception::Deadlock) { retry; } catch (Exception::UpdateConflict) { if (appl.ttsLevel() == 0) { if (xSession::currentRetryCount() >= #RetryNum) { throw Exception::UpdateConflictNotRecovered; } else { retry; } } else { throw Exception::UpdateConflict; } } }
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: Poleax (1), Deepoint (1). |
![]() |
#4 |
Участник
|
Не факт, что этот кто-то ее еще "держит".
Вообще, перечитать запись из б/д и посмотреть ModifiedUserId, если он включен
__________________
Axapta v.3.0 sp5 kr2 |
|
![]() |
#5 |
Участник
|
Подниму тему: возникает такая же ошибка при попытке обновить записи в таблице.Запрос на обновление:
X++: ttsbegin; while select forupdate localItems where localItems.Mark join sum(PlanQty), sum(PlanAddQty), sum(TechPlanQty), sum(TechPlanAddQty), Itemid, Routeid, Recid from prodPlanByProdNum group by Itemid,Routeid, PlanQty, PlanAddQty, TechPlanQty, TechPlanAddQty,Recid where prodPlanByProdNum.ProdNum == localItems.ProdNum // && prodPlanByProdNum.IsClosed == NoYes::Yes join forupdate Recid,Itemid,RouteId,PlanQty,PlanAddQty,TechPlanQty,TechPlanAddCurQty from prodPlanByWrkCtrGroup group by Recid,Itemid,RouteId,PlanQty,PlanAddQty,TechPlanQty,TechPlanAddCurQty where prodPlanByWrkCtrGroup.ItemId == prodPlanByProdNum.ItemId && prodPlanByWrkCtrGroup.RouteId == prodPlanByProdNum.RouteId { planqty = prodPlanByWrkCtrGroup.PlanQty - prodPlanByProdNum.PlanQty; planaddqty = prodPlanByWrkCtrGroup.PlanAddQty - prodPlanByProdNum.PlanAddQty; techplanqty = prodPlanByWrkCtrGroup.TechPlanQty - prodPlanByProdNum.TechPlanQty; techplanaddcurqty = prodPlanByWrkCtrGroup.TechPlanAddCurQty - prodPlanByProdNum.TechPlanAddQty; prodPlanByWrkCtrGroup.PlanQty = planqty; prodPlanByWrkCtrGroup.PlanAddQty = planaddqty; prodPlanByWrkCtrGroup.TechPlanQty = techplanqty; prodPlanByWrkCtrGroup.TechPlanAddCurQty = techplanaddcurqty; prodPlanByWrkCtrGroup.update(); } ttscommit; } Выпадает X++: (ProdPlanByWrkCtrGroup). - , . В какую сторону копать, подскажите, пожалуйста? ![]() |
|
![]() |
#6 |
Программатор
|
1. почитайте про оформление кода в Аксапте. Ваш код ужасен.
2. prodPlanByWrkCtrGroup вы выбираете с группировкой, так низя выбирать для апдейта |
|
![]() |
#7 |
Участник
|
|
|
![]() |
#8 |
Программатор
|
в отдельном цикле выбирайте. представьте, что аксапта выбрала несколько записей и сгруппировала их, ей чего апдейтить то? какую?
|
|
![]() |
#9 |
Участник
|
|
|
![]() |
#10 |
Участник
|
|
|
![]() |
#11 |
Программатор
|
цикл в цикле наверно. вариантов не много)))
|
|
![]() |
#12 |
Участник
|
|
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|