Автоматизация крупного склада или супермаркета требует решения целого комплекса алгоритмических задач: от оптимизации пути обхода ячеек до распределения товаров по контейнерам с учетом их веса и габаритов. В данной статье мы подробно разберем, как выстроить архитектуру такой системы, какие алгоритмы использовать и как реализовать это на платформе 1С.
Типичная задача комплектации подразумевает наличие очереди заказов, которые необходимо распределить между «стаей» кладовщиков. Для повышения эффективности используется метод мультипикинга (Cluster Picking), когда один сборщик за один рейс по складу собирает сразу несколько заказов (например, 4 заказа в 4 разные корзины).
Рассмотрим основные требования к системе:
Важно понимать, что такие тяжелые расчеты не должны выполняться на стороне мобильного клиента. Проанализируем техническую сторону: мобильное приложение должно получать уже готовый массив данных (задание на сборку) в формате JSON или через специализированный сервис.
Для того чтобы минимизировать пробег сборщика, недостаточно просто сортировать ячейки по адресу. Разберем основные стратегии маршрутизации:
Простейшая реализация в 1С может базироваться на введении дополнительного реквизита у ячейки — ПорядокОбхода. Рассмотрим пример структуры запроса для формирования очереди:
ВЫБРАТЬ
СкладскиеЯчейки.Ссылка КАК Ячейка,
СкладскиеЯчейки.ПорядокОбхода КАК ИндексМаршрута,
ТоварыВЗаказе.Номенклатура,
ТоварыВЗаказе.Количество
ИЗ
Справочник.СкладскиеЯчейки КАК СкладскиеЯчейки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ОстаткиТоваровПоЯчейкам КАК Остатки
ПО СкладскиеЯчейки.Ссылка = Остатки.Ячейка
ГДЕ
Остатки.Заказ В (&МассивЗаказов)
УПОРЯДОЧИТЬ ПО
СкладскиеЯчейки.ПорядокОбхода ВОЗРАСТАНИЕ
Прежде чем отправить сборщика в рейс, система должна выполнить картонизацию. Это процесс виртуальной упаковки товаров в имеющуюся тару. Мы должны убедиться, что товары N заказов физически поместятся в N корзин на тележке.
Рассмотрим алгоритм действий:
При планировании рейса МаршрутСборщика должен выстраиваться так, чтобы тяжелые товары (напитки, консервы) собирались в первую очередь и оказывались на дне корзины, а хрупкие — в конце маршрута.
Для минимизации ошибок при мультипикинге используется визуальное разделение. Каждому заказу в рамках одного рейса присваивается цвет (красная корзина, синяя и т.д.). В интерфейсе ТСД при сканировании товара система должна четко подсвечивать цвет целевой корзины.
С точки зрения кода 1С, это реализуется через перечисление или сопоставление индекса заказа в рейсе с массивом цветов:
Функция ПолучитьЦветКорзины(ИндексЗаказа)
Цвета = Новый Массив;
Цвета.Добавить("Красный");
Цвета.Добавить("Синий");
Цвета.Добавить("Зеленый");
Цвета.Добавить("Желтый");
Возврат Цвета[ИндексЗаказа % Цвета.Количество()];
КонецФункции
Важным пунктом является порядок сборки в контексте будущей доставки. Чтобы грузчикам не приходилось перерывать весь кузов автомобиля, товары должны загружаться в порядке, обратном маршруту следования (LIFO). Выясним причину такой сложности: система должна знать индекс точки разгрузки еще на этапе планирования складской сборки.
Проанализируем цепочку данных: Маршрут доставки (TMS) -> Очередность выгрузки -> Очередность загрузки в авто -> Группировка заданий на сборку (WMS).
На реальном складе часто возникают ситуации, когда товара в ячейке не оказалось. Программа не должна «вставать». Разберем по шагам правильную логику обработки таких событий:
Для реализации этого механизма на мобильном клиенте важно использовать фоновые задания на сервере 1С, которые будут пересчитывать остатки и резервы в реальном времени, предотвращая коллизии между разными сборщиками.
Хотя основная логика расчетов лежит на сервере, система компоновки данных (СКД) может эффективно использоваться для формирования отчетов о производительности сборщиков прямо на экране ТСД. Однако стоит помнить, что КомпоновщикНастроек и тяжелые запросы в мобильном клиенте могут работать медленно. Рекомендуется подготавливать данные на сервере в виде таблицы значений (ТЗ) и передавать её в отчет как внешний набор данных.
Внедрение такой системы — это не просто написание кода, а создание живого механизма, который учитывает физику склада, математику графов и человеческий фактор.