Цитата:
Сообщение от
mazzy
Более правильный код:
X++:
SysProgressOperation progress;
;
select count(recid) from custCollectionLetterTrans
where custCollectionLetterTrans.CollectionLetterNum == this.CollectionLetterNum
&& custCollectionLetterTrans.AccountNum == this.AccountNum
&& custCollectionLetterTrans.CollectionLetterIssued;
progress = SysProgressOperation::newGeneral('','',custCollectionLetterTrans.recid);
while select * from custCollectionLetterTrans
where custCollectionLetterTrans.CollectionLetterNum == this.CollectionLetterNum
&& custCollectionLetterTrans.AccountNum == this.AccountNum
&& custCollectionLetterTrans.CollectionLetterIssued
{
ttsbegin;
custTrans = CustTrans::find(custCollectionLetterTrans.CustTransId, true);
custTrans.CollectionLetterCode = custCollectionLetterTrans.CollectionLetterCode;
custTrans.update();
ttscommit;
progress.inccount();
}
Еще более правильным было бы создание запроса для таблицы и код:
...
Это
НЕ правильный код.
Представьте простую ситуацию, Вы разносите накладную из 100 строк. каждая строка обрабатывается в
отдельной транзакции. На строке 87 возникает исключительная ситуация , товара недостаточно на складе, а предыдущие 86 строк уже списали товар....
Помедитируйте на тему зачем вообще нужны транзакции, как они работают и что такое целостность данных
Буквально пару дней назад
думал убью долго и подробно объяснял 3 одинэсникам почему, например, импорт документа из аксапты надо облачать в транзакзию, а не обрабатывать построчно как они привыкли.
То ли это
1с разрушает моск, то ли просто так совпало