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

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

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

Разберем типичные ошибки при реализации этого механизма, архитектурные особенности конфигураций 1С и эффективные способы распределения сборочных задач.

Анализ архитектурных ограничений и ошибок проектирования

Рассмотрим две ключевые ошибки, с которыми часто сталкиваются разработчики при попытке быстро реализовать распределение:

  1. Модификация данных при печати: Запись движений в регистры или изменение реквизитов документов непосредственно из процедур формирования печатных форм является критическим антипаттерном. Предварительный просмотр бланка, сбой принтера или повторное открытие формы приводят к ложным записям в базе, рассинхронизации очереди и искажению статистики.
  2. Использование документа СчетНаОплатуПокупателю для склада: В типовых конфигурациях (например, УПП 1.3) счет является исключительно расчетным документом. Он не формирует движений по регистрам накопления, не резервирует остатки на складах и может быть в любой момент изменен или отменен менеджером. Сборка по документу без проверки резерва ведет к попыткам отобрать отсутствующий товар.

Способ 1. Организация динамической выдачи по сканированию бейджа (Pull-система)

Вместо предварительного жесткого назначения сотрудника на заказ на этапе проведения документа гораздо эффективнее использовать модель динамической выдачи («вытягивающее» производство). Кладовщик получает следующее задание только тогда, когда фактически освободился.

Разберем по шагам, как работает этот процесс на бумажном складе без использования дорогостоящих терминалов сбора данных (ТСД):

  1. В информационной базе заказы, готовые к отбору, помещаются в очередь со статусом «К сборке».
  2. На складе устанавливается рабочее место: стационарный сканер штрихкодов и принтер этикеток/листов А4.
  3. Освободившийся кладовщик подходит к сканеру и считывает штрихкод со своего персонального бейджа.
  4. Система в транзакции выбирает из очереди наиболее приоритетный заказ, блокирует его, назначает сотрудника ответственным и отправляет задание на печать.
  5. Кладовщик забирает распечатанный сборочный лист со своей фамилией и идет на отбор.

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


Функция НазначитьЗаказКладовщику(СотрудникСсылка) Экспорт
    
    УстановитьПривилегированныйРежим(Истина);
    
    НачатьТранзакцию();
    Попытка
        // Блокируем регистр очереди для исключения параллельного назначения
        Блокировка = Новый БлокировкаДанных;
        ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОчередьСборкиЗаказов");
        ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
        Блокировка.Заблокировать();
        
        Запрос = Новый Запрос;
        Запрос.Текст = 
            "ВЫБРАТЬ ПЕРВЫЕ 1
            |	Очередь.ДокументЗаказа КАК ДокументЗаказа,
            |	Очередь.Приоритет КАК Приоритет
            |ИЗ
            |	РегистрСведений.ОчередьСборкиЗаказов КАК Очередь
            |ГДЕ
            |	Очередь.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыСборки.КОтбору)
            |УПОРЯДОЧИТЬ ПО
            |	Очередь.Приоритет УБЫВ,
            |	Очередь.ДатаПоступления ВОЗР";
            
        Результат = Запрос.Выполнить();
        Если Результат.Пустой() Тогда
            ОтменитьТранзакцию();
            Возврат Неопределено;
        КонецЕсли;
        
        Выборка = Результат.Выбрать();
        Выборка.Следующий();
        
        // Фиксируем назначение исполнителя
        МенеджерЗаписи = РегистрыСведений.ОчередьСборкиЗаказов.СоздатьМенеджерЗаписи();
        МенеджерЗаписи.ДокументЗаказа = Выборка.ДокументЗаказа;
        МенеджерЗаписи.Прочитать();
        
        МенеджерЗаписи.Статус = Перечисление.СтатусыСборки.ВРаботе;
        МенеджерЗаписи.Исполнитель = СотрудникСсылка;
        МенеджерЗаписи.ДатаВыдачи = ТекущаяДата();
        МенеджерЗаписи.Записать();
        
        ЗафиксироватьТранзакцию();
        Возврат Выборка.ДокументЗаказа;
        
    Исключение
        ОтменитьТранзакцию();
        ВызватьИсключение;
    КонецПопытки;
    
КонецФункции

Способ 2. Квантование и распараллеливание сборки крупного заказа

Если поступил один объемный заказ (например, на 1000 позиций), отправка одного кладовщика парализует его работу на полдня, пока второй сотрудник будет простаивать. Для решения этой проблемы заказ делится на кванты (сборочные задания).

Проанализируем параметры, по которым необходимо разбивать заказ:

  1. Лимит строк (позиций): Оптимальный квант для одного человека при ручном отборе составляет от 30 до 50 строк (в среднем 20–30 минут работы).
  2. Лимит объема и веса: Ограничение по грузоподъемности тележки или объему паллеты.
  3. Сектора склада (топология): Заказ делится по рядам или группам номенклатуры. Каждый кладовщик перемещается строго в рамках своей закрепленной зоны, собирая свой лист отбора, после чего все части заказа консолидируются в зоне упаковки и проверки.

Способ 3. Комплексный расчет трудоемкости (балансировка нагрузки)

Распределение заказов по простому количеству штук или документов создает перекос в нагрузке. Отобрать 100 штук одного товара с одной полки значительно быстрее, чем отобрать 100 разных позиций по 1 штуке из разных концов склада.

Для справедливого учета трудоемкости при расчете загрузки сотрудников применяем весовые коэффициенты:

Трудоемкость = (КоличествоСтрок * K1) + (ОбщийВес * K2) + (КоличествоШтук * K3)

Где коэффициенты отражают реальные затраты времени:

  1. K1 — наибольший вес, так как переход между ячейками и поиск позиции занимают основную часть времени отбора.
  2. K2 — вес фактора перемещения тяжестей.
  3. K3 — минимальный вес, отражающий время на пересчет единиц внутри одной ячейки.

Способ 4. Внедрение специализированных объектов учета в 1С

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

  1. Ордерная схема: Использование типового документа РасходныйОрдерНаТовары. Документ содержит реквизит ответственного, фиксирует складские движения и имеет стандартные печатные формы отбора.
  2. Документ «Сборочный лист» (Лист отбора): Создание собственного документа, подчиненного ЗаказПокупателя. Документ хранит статус сборки, назначенного кладовщика, фактическое время начала и окончания работы.
  3. Контроль и двухпроходная система: Разделение функций отбора и проверки. Кладовщик осуществляет только сборку, а упаковщик на отдельном столе производит контрольное сканирование собранного листа, что исключает пересорт и фиксирует виновного в случае ошибки.
← На главную