Показать сообщение отдельно
Старый 09.08.2018, 16:36   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,656 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Пара предложений. Не уверен, что правильно понял логику ...


1. InventTrans::updateMarking()

Проверка на код накладной, предположительно, это "защита" от изменения документа. В том смысле, что раз накладную создали, то количество по складским проводкам уже не может быть изменено.

Вероятно, по этой причине и в delete() не было очистки маркировок. Просто маркированные проводки не могли быть удалены. Точнее, наоборот. Маркировка только в тех проводках, которые не удаляются

Для складских журналов аналогичным признаком будет факт разноски журнала. Вот через ИЛИ и добавить соответствующее условие

if ("Указана накладная" ИЛИ "складской журнал разнесен")
- (Маркируем)



2. InventJourCopyStorno.run()

Сделать сопоставление не вообще "всего" количества, а именно того, которое удалось сопоставить. Т.е. примерно так

X++:
markQty = InventTrans::updateMarking(transOrig.InventTransId, transNew.InventTransId ,  transOrig.Qty);

if (markQty)
      InventTrans::updateMarking(transNew.InventTransId , transOrig.InventTransId,  -markQty);

Ведь если не удалось сопоставить какое-то количество, значит, это количество где-то, как-то "заблокировано" к сопоставлению. Ну, и зачем "ломать об колено"?

Здесь даже проверка уже смысла не имеет, ведь сторно-документ только что создан, так что вторая маркировка в сторно-документе всегда будет на все указанное количество
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: jeky (3).