![]() |
#4 |
Участник
|
Цитата:
Обрати внимание, что у 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 - это признак того, что в базу вмешивались грубой силой.) |
|
Теги |
inventsum, производительность |
|
|