11.10.2012, 13:08 | #1 |
Модератор
|
Невозможно отредактировать запись
Цитата:
Невозможно отредактировать запись в Платежи по данным клиент-банка (BankClientPayment_RU).
Возник конфликт обновления из-за того, что другой пользовательский процесс выполняет удаление записи или изменение одного или нескольких полей в записи.
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
11.10.2012, 13:28 | #2 |
Участник
|
Вполне возможно что вы ее и держите. Был такой прикол что в выбранной записи менялся RecVersion, и тогда при вызове update возникала такая ошибка. Посмотрите дебагером.
|
|
11.10.2012, 13:55 | #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). |
11.10.2012, 15:14 | #4 |
Участник
|
Не факт, что этот кто-то ее еще "держит".
Вообще, перечитать запись из б/д и посмотреть ModifiedUserId, если он включен
__________________
Axapta v.3.0 sp5 kr2 |
|
07.05.2013, 14:30 | #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). - , . В какую сторону копать, подскажите, пожалуйста? |
|
07.05.2013, 14:44 | #6 |
Программатор
|
1. почитайте про оформление кода в Аксапте. Ваш код ужасен.
2. prodPlanByWrkCtrGroup вы выбираете с группировкой, так низя выбирать для апдейта |
|
07.05.2013, 15:04 | #7 |
Участник
|
|
|
07.05.2013, 15:09 | #8 |
Программатор
|
в отдельном цикле выбирайте. представьте, что аксапта выбрала несколько записей и сгруппировала их, ей чего апдейтить то? какую?
|
|
07.05.2013, 15:11 | #9 |
Участник
|
|
|
07.05.2013, 15:13 | #10 |
Участник
|
|
|
07.05.2013, 15:50 | #11 |
Программатор
|
цикл в цикле наверно. вариантов не много)))
|
|
07.05.2013, 15:57 | #12 |
Участник
|
|
|
|
|