Цитата:
Сообщение от
DreamCreator
Вопрос такой -- можно ли из InventSum удалять записи с Closed == NoYes::Yes и ClosedQty == NoYes::Yes
Мы немножко не о том говорили.
Обрати внимание, что у InventSum есть методы
isAllFieldsZero
isAllQtyFieldsZero
isAllValueFieldsZero
Надо проверить записи для которых InventSum.isAllFieldsZero() == true
Такие записи могут появляться в двух случаях:
1. выполнен приход и расход. Итог обнулился, но его удалять нельзя
2. человек создал строчку в журнале/заказе/закупке с неправильной складской аналитикой. Но потом обнаружил свою ошибку и исправился до разноски. В этом случае в InventDim появится запись с комбинацией, которая нигде больше не используется. А в inventSum - запись с итогами на такой InventDim. Такие inventSum могут быть и закрытыми, и незакрытыми.
Поэтому правильный алгоритм такой:
1. Найти записи в InventSum для которых InventSum.isAllFieldsZero() == true
2. Найти количество InventTrans для таких записей
3. Если количество в InventTrans == 0, то InventSum удалять можно.
Дополнительное расширение алгоритма:
= сначала можно проверить "забытые" inventTrans - остались ли неразнесенные InventTrans, которые относятся к несуществующим (или аннулированным) журналам/заказам/закупкам/производству
= в конкретном вашем случае можно смягчить проверку и проверять InventSum.isAllQtyFieldsZero() == true (но будь предельно внимательным если у тебя появились записи в InventSum c нулевым количеством И ненулевой суммой И с отсутствующими проводками в InventTrans - это признак того, что в базу вмешивались грубой силой.)