Как реализовать распределение отсканированного товара и брака по строкам табличной части документа в 1С?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе с автоматизацией склада часто возникает задача распределения фактически отсканированного товара по строкам документа ПоступлениеТоваров. Основная сложность заключается в том, что один товар может быть представлен несколькими строками с разными характеристиками, а фактическое количество может не совпадать с учетным (наличие брака или излишков).

Алгоритмический подход к распределению товара

Разберем, как построить логику, которая позволит корректно «раскидать» отсканированное количество по строкам табличной части. Суть метода заключается в циклическом обходе строк и последовательном заполнении свободных слотов.

  1. Выборка данных: При сканировании товара сначала находим все строки в документе, которые соответствуют отсканированному Товару и Характеристике.
  2. Определение свободных ресурсов: Для каждой найденной строки вычисляем доступный объем. Если мы распределяем «хороший» товар, доступный остаток в строке равен Количество - КоличествоОтсканированного - КоличествоОтсканированногоБрака.
  3. Циклический обход: Создаем переменную ОстатокКРаспределению, равную количеству, введенному кладовщиком. В цикле проходим по найденным строкам и заполняем их до тех пор, пока ОстатокКРаспределению не станет равен нулю.

Унификация алгоритма для брака и качественного товара

Важно понимать, что логика распределения брака ничем не отличается от логики распределения обычного товара. Единственное различие заключается в том, в какую колонку табличной части мы записываем итоговое значение. Разберем пример реализации логики распределения:


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

Обработка излишков при приемке

Часто на складе фактическое количество превышает количество по документу. В этом случае алгоритм, описанный выше, оставит Остаток > 0 после завершения цикла. Чтобы корректно обработать излишки:

Рекомендации по реализации архитектуры

Для реализации данной задачи мы рекомендуем придерживаться следующих правил:

Применяя этот унифицированный подход, вы сможете значительно упростить код и сделать его легко поддерживаемым при добавлении новых типов учета или изменений в структуре документа ПоступлениеТоваров.

← На главную