Показать сообщение отдельно
Старый 02.07.2008, 12:31   #1  
Oz is offline
Oz
Участник
Аватар для Oz
 
293 / 51 (2) ++++
Регистрация: 22.08.2002
Адрес: Москва
Проблемы с обновлением записи, выбранной для обновления внутри транзакции
Уважаемые господа и товарищи!

Имеем: DAX 4.0 SP2 на MS SQL Server 2000 Dev
А также примерно такой код (упрощённо) в классе ReqTransPoMarkFirm:

X++:
void run();
...
  ttsbegin;
  ...
  this.create();
  ...
  ttscommit;
...
В свою очередь в create:

X++:
select firstonly forupdate reqTrans
  index hint refIdx
  where ...
Далее в недрах класса, после многих преобразований, однако всё в рамках этого же вызова create в какой то момент происходит обновление выбранной здесь записи:

X++:
void updateFirmedReqTrans(...
...
  _reqTrans.InventTransId = _InventTransId;
  _reqTrans.RefType = _refType;
  _reqTrans.RefId  = _refId;
  _reqTrans.IsForecastPurch = NoYes::No;
  _reqTrans.update();
...
И вот тут возникает стандартная ошибка "Операция не может быть завершена, так как запись не выбиралась для обновления. Используйте TTSBEGIN/TTSCOMMIT наряду с выражением FORUPDATE."
Мало того, попытка тупо в этом месте заменить вызов _reqTrans.update() на:

X++:
ttsbegin;
reqTransBuf = ReqTrans::findRecId(_reqTrans.RecId, true);
reqTransBuf.data(_reqTrans);
reqTransBuf.update();
ttscommit;
ситуацию нисколько не изменяет.
Не подскажете ли, что может вызвать такое странное поведение и какой криминал стоит поискать в преобразованиях, производимых в этом классе между выбором записи и её обновлением?

Заранее благодарен всем ответившим.
__________________
Здесь могла быть Ваша реклама!