|
![]() |
#1 |
Участник
|
Цитата:
Цитата:
![]() Здесь степень модификаций (по формуле mazzy) даже чуть по меньше, чем у нас было на общем месте работы. Так что не привыкать. Отвлёкся. Цитата:
Резервирование сильно переделано. Блокировки я уже откинул. Вчера сделал пересчёт InventSum. Сегодня появилось две позиции. Причём по этим номенклатурам блокировок не было. Буду дальше искать. Эта проблема замечена была несколько месяцев назад. Пересчёт InventSum-а раз в неделю помогал. Просто текучки хватало. Щас посвободнее стало вот и решил пора искать. Найду.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. Последний раз редактировалось miklenew; 13.02.2009 в 20:20. |
|
![]() |
#2 |
NavAx
|
Если проблема так быстро проявляется, то рискну предложить вариант поиска.
Используем этот проект, включаем лог базы данных по всем операциям на InventTrans, через день отключаем лог, находим ошибочные позиции, смотрим по логу как это призошло. |
|
|
За это сообщение автора поблагодарили: Dron AKA andy (4), miklenew (5). |
![]() |
#3 |
Участник
|
Цитата:
Сообщение от raz
![]() Используем этот проект, включаем лог базы данных по всем операциям на InventTrans, через день отключаем лог, находим ошибочные позиции, смотрим по логу как это призошло.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
![]() |
#4 |
Участник
|
Нашёл.
Была форма о которой я даже и не знал. Она делила строки журнала, в текущем уменьшала количество и выносила их в другой журнал. Ошибка была когда количество из текущего журнала полностью выносилось в другой журнал. В ней был такой код X++: if (!inventTrans.Qty) inventTrans.delete(); else inventTrans.update(); Только при qty = 0 inventTrans удалялся, а InventSum не пересчитывался. Понятно почему, количество то ноль. Сделал так X++: if (!inventTrans.Qty) { inventTrans.update(); inventTrans.delete(); } else inventTrans.update();
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
|
За это сообщение автора поблагодарили: Logger (2). |
![]() |
#5 |
Участник
|
Цитата:
Сообщение от 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). |
![]() |
#6 |
Участник
|
Спасибо ещё раз raz за проект.
Модераторам: Почему тема с проектом raz-a не в Базе знаний? Перенесите пожалуйста.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
Теги |
internal, блокировка, лог, поиск ошибок, полезное |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|