Показать сообщение отдельно
Старый 30.11.2005, 10:43   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Все дело в том, что вы изменяете поле, входящее в состав кластерного индекса.

Axapta открывает динамический курсор при использовании forupdate. SQL сервер воспринимает запись с измененным кластерным индексом как новую и добавляет ее в открытый курсор. По-этому при фетче у вас постоянно подтягивается новая запись до тех пор, пока Axapta может изменить значение поля.

Что бы обойти этот эффект надо сделать так
X++:
RCashTrans    RCashTrans;
RCashTrans    RCashTransUpd;
ttsbegin;
while select RcashTrans
where
RcashTrans.DocType==1 &&
( ...)
{
    RCashTransUpd = RCashTrans::findRecId(RCahsTrans.RecId, True);
    RcashTransUpd.DocId+="/1";
    RcashTransUpd.doUpdate();
}
ttscommit;
И еще в LedgerJournalTrans.RCashDocId также заносится номер кассового ордера

PS 2 Vadik извиняюсь, ссылку на статью заметил уже после написания ответа.
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 30.11.2005 в 10:53.
За это сообщение автора поблагодарили: raz (5), Logger (5), FrolovAndy (1).