При работе с автоматизацией склада часто возникает задача распределения фактически отсканированного товара по строкам документа ПоступлениеТоваров. Основная сложность заключается в том, что один товар может быть представлен несколькими строками с разными характеристиками, а фактическое количество может не совпадать с учетным (наличие брака или излишков).
Разберем, как построить логику, которая позволит корректно «раскидать» отсканированное количество по строкам табличной части. Суть метода заключается в циклическом обходе строк и последовательном заполнении свободных слотов.
Товару и Характеристике.Количество - КоличествоОтсканированного - КоличествоОтсканированногоБрака.ОстатокКРаспределению, равную количеству, введенному кладовщиком. В цикле проходим по найденным строкам и заполняем их до тех пор, пока ОстатокКРаспределению не станет равен нулю.Важно понимать, что логика распределения брака ничем не отличается от логики распределения обычного товара. Единственное различие заключается в том, в какую колонку табличной части мы записываем итоговое значение. Разберем пример реализации логики распределения:
// Предположим, мы распределяем брак
Остаток = ВведенноеКоличествоБрака;
Для Каждого СтрокаТЧ Из МассивНайденныхСтрок Цикл
Если Остаток <= 0 Тогда Прервать; КонецЕсли;
// Вычисляем, сколько еще можно добавить в эту строку
СвободноВСтроке = СтрокаТЧ.Количество - (СтрокаТЧ.КоличествоХорошего + СтрокаТЧ.КоличествоБрака);
Если СвободноВСтроке > 0 Тогда
Добавляем = Мин(Остаток, СвободноВСтроке);
СтрокаТЧ.КоличествоБрака = СтрокаТЧ.КоличествоБрака + Добавляем;
Остаток = Остаток - Добавляем;
КонецЕсли;
КонецЦикла;
Часто на складе фактическое количество превышает количество по документу. В этом случае алгоритм, описанный выше, оставит Остаток > 0 после завершения цикла. Чтобы корректно обработать излишки:
Остаток > 0, выбираем одну из строк (например, первую или последнюю найденную) и добавляем весь оставшийся избыток в нее.Для реализации данной задачи мы рекомендуем придерживаться следующих правил:
Обработку, которая выступает в качестве АРМ кладовщика. В ней вы сможете удобно управлять сканированием, выводить статус распределения и кнопки выбора режима «Брак/Не брак».Применяя этот унифицированный подход, вы сможете значительно упростить код и сделать его легко поддерживаемым при добавлении новых типов учета или изменений в структуре документа ПоступлениеТоваров.