Пара предложений. Не уверен, что правильно понял логику ...
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);
Ведь если не удалось сопоставить какое-то количество, значит, это количество где-то, как-то "заблокировано" к сопоставлению. Ну, и зачем "ломать об колено"?
Здесь даже проверка уже смысла не имеет, ведь сторно-документ только что создан, так что вторая маркировка в сторно-документе всегда будет на все указанное количество