|
16.06.2009, 19:09 | #1 |
Участник
|
Цитата:
Сообщение от miklenew
Нашёл.
Была форма о которой я даже и не знал. Она делила строки журнала, в текущем уменьшала количество и выносила их в другой журнал. Ошибка была когда количество из текущего журнала полностью выносилось в другой журнал. В ней был такой код X++: if (!inventTrans.Qty)
inventTrans.delete();
else
inventTrans.update(); Только при qty = 0 inventTrans удалялся, а InventSum не пересчитывался. Понятно почему, количество то ноль. Сделал так X++: if (!inventTrans.Qty)
{
inventTrans.update();
inventTrans.delete();
}
else
inventTrans.update(); Получается что в InventTrans.delete() есть ошибка. Вместо вызова X++: if (InventSum::mustInventTransBeUpdated(this))
{
inventSum = appl.inventUpdateTTSControl().inventSumSelectLocked(this);
inventSum.updateInventTrans(this,NoYes::No);
} X++: if (InventSum::mustInventTransBeUpdated(this.orig()))
{
inventSum = appl.inventUpdateTTSControl().inventSumSelectLocked(this.orig());
inventSum.updateInventTrans(this.orig(),NoYes::No);
} Delete() должен работать на основе значений которые лежат в базе, а не в текущем буфере. В принципе нечто подобное сделано в методе inventTrans.update() - сперва из InventSum вычитаются значения this.orig() а затем прибавляются значения this. Нужно было код перенести убрав прибавку this но оставив вычитание this.orig() Т.е. автор InventTrans.delete() неявно заложился на то что удаляемый InventTrans перед удалением не редактировался. Последний раз редактировалось Logger; 16.06.2009 в 19:16. Причина: уточнение |
|
|
За это сообщение автора поблагодарили: Maximin (1), miklenew (2). |
Теги |
internal, блокировка, лог, поиск ошибок, полезное |
|
|