Привет, Хабр! Мы — Владимир, Дмитрий и Константин — команда из логистики в торговой сети «Монетка» («Группа Лента»). Мы управляем процессами в одной из крупнейших розничных сетей в России, и у нас — 4+ тысячи магазинов, 40+ тысяч сотрудников и миллионы коробок товара, которые каждый день нужно отгружать со складов 24/7. А выходной – только один день в году, 1 января.

Звучит как обычная логистика, правда? Но есть одна деталь, которая долгие годы не давала нам спать спокойно: как сделать так, чтобы комплектовщики на складе не ждали друг друга, а сборка шла непрерывно, даже если товара временно не хватает?

Мы перепробовали несколько подходов, набивали шишки, спорили, возвращались назад. И в итоге нашли решение, которое позволило нам поднять производительность на сухих складах с 1600–1800 до 2200+ коробок в смену — плюс 600 коробок на человека.

Спойлер: иногда, чтобы ускорить работу, нужно перестать контролировать каждый шаг.

Контекст: как устроен склад (для тех, кто не в теме)

Если вы не работали с WMS (Warehouse Management System), объясню на пальцах.

На складе есть:

  • Ячейки хранения — туда привозят товар от поставщика.

  • Ячейки отбора — туда товар перекладывают, чтобы комплектовщикам было удобно его забирать.

  • Комплектовщики — люди (пока не роботы…), которые собирают заказы для магазинов.

Задача: взять из ячеек отбора нужные коробки, сложить на паллет, отправить на отгрузку.

Казалось бы, что тут сложного? Но проблема в том, что комплектовщиков много (десятки), ячеек много (тысячи), а товар заканчивается в самый неподходящий момент. И если система не умеет управлять этим процессом, люди начинают ждать.

Этап 1. Классическое резервирование: когда умный алгоритм убивает скорость

Когда мы начинали, у нас работала классическая схема: товар резервировался за конкретным заказом и конкретным комплектовщиком.

Как это выглядело:

  1. Приходит заказ.

  2. Система говорит: «Вот эти 100 коробок колы — только для Ивана. Петр, даже если ты рядом, не бери».

  3. Иван идет собирать.

  4. Вдруг в ячейке отбора заканчивается кола.

  5. Петр останавливается и ждет, пока с верхнего яруса спустят новый паллет.

Результат: комплектовщик стоит, его производительность падает, а заказы накапливаются.

Мы смотрели на это и думали: «Но ведь Петр рядом, у него в маршруте тоже есть 2 коробки колы. Почему он не может взять их? А Иван заберет следующие коробки и приедет пополнение ячейки».

Но система была жесткой. Резерв — это ведь святое.

Этап 2. Динамический отбор без резервирования: первый эксперимент

Мы решили попробовать другой подход, который в народе называют «кто первый отобрал, тому и хватило».

Принцип простой:

  • Товар на складе резервируется в целом по остатку, но не за конкретным комплектовщиком.

  • Кто первый подошел к ячейке — тот и забрал коробку.

  • Списание происходит в момент подтверждения отбора, а не до него.

Звучит как свобода, правда? И первое время так и было. Комплектовщики перестали ждать, начали бегать быстрее, сборка ускорилась. Но быстро всплыла другая проблема.

Проблема №1: перегруженная экспедиция

Логист не мог начать формировать маршруты отгрузки, не будут собраны заказы по всему направлению отгрузки. Почему? Потому что без предварительного резервирования система не знала точный вес и объем каждой паллеты.

В результате:

  • Зона экспедиции забивалась под завязку.

  • Отгрузка тормозила.

  • Логисты работали в авральном режиме, качество падало.

Проблема №2: «второй круг» убрал ожидание, но это еще не все

Мы внедрили новую механику — «второй круг». Что это значит?

"Второй круг"
"Второй круг"

Это было уже хорошо — люди не стояли. Но оставалась проблема с отгрузкой. И мы поняли, что нужно двигаться дальше.

Этап 3. Предварительное резервирование (целевой процесс)

Суть в том, что мы перенесли резервирование на этап до начала планирования и маршрутизации транспорта.

Как это работает сейчас:

  1. Заказы заходят в WMS (у нас это «INFOR SCE»).

  2. Информация передается логистам.

  3. Система смотрит весь доступный на складе товар:

    • то, что лежит в ячейках хранения;

    • то, что уже в отборе;

    • то, что сейчас находится на стадии приемки (в WMS уже есть созданные паллеты с товаром, но приемка еще не завершена).

  4. На основе этих данных резервируется точное количество по каждому заказу: вес, объем, количество товароносителей (паллет, роллов, коробов).

  5. Логист получает точную картину: «Для направления X нужно столько-то паллет с таким-то весом».

  6. Логист создает маршруты до того, как склад начал комплектацию.

  7. Каждый маршрут комплектуется на конкретный док, выбранный системой для отгрузки.

  8. Склад комплектует маршрут за маршрутом, и отгрузка идет постепенно, не перегружая экспедицию.

Что мы получили:

  • Экспедиция перестала забиваться (отгружаем постепенно, а не всем скопом).

  • Логисты работают с предсказуемыми объемами, а не в режиме пожара.

  • Комплектовщики собирают заказы под конкретные маршруты.

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

Детали реализации: как работает механизм «второго круга» сейчас

Важный нюанс. Даже с предварительным резервированием товар в ячейке может закончиться — 10 комплектовщиков быстрее опустошат ячейку, чем будет привезен новый паллет.

Но теперь система управляет этим иначе:

  1. Резерв с товара не снимается, даже если его временно нет в ячейке. Ведь на складе (в ячейке хранения) товар есть — он просто еще не спущен вниз.

  2. Система в реальном времени видит, что ячейка пуста, и формирует требование на пополнение.

  3. Задача на отбор из этой ячейки не выдается, пока она не пополнится.

  4. Если комплектовщик все же подошел (например, по старому маршруту), он фиксирует отсутствие и идет дальше (автоматическая инвентаризация;)).

  5. Когда товар появился, система сама отправляет комплектовщика на «второй круг» — но не вслепую, а на ближайшую точку отбора, где есть этот товар. Для каждой ячейки указана координата для порядка обхода, что обеспечивает точный расчет ближайшей пополненной ячейки отбора.

Таким образом, комплектовщик никогда не ждет. Он либо собирает то, что есть, либо возвращается за пропущенным позже, когда это уже не создает простоев.

Исключения: что делать с медленным товаром?

Не весь товар одинаково важен. Есть группа А и В — ходовые позиции, которые мы готовы ждать вечно. А есть группа С — слабооборачиваемый товар, который может подождать или даже уехать следующим рейсом.

Для товаров из разных групп оборачиваемости мы настроили время ожидания пополнения перед выдачей задания:

  • 0 минут — не ждем вообще.

  • 10 или 20 минут — ждем, но не бесконечно.

Если за отведенное время пополнение не пришло — система вычеркивает позицию, и заказ уезжает без этого товара.

Это решение — компромисс между идеальной полнотой отгрузки и скоростью процесса. И мы сознательно на него пошли, потому что гнаться за 100% комплектности ценой простоя — неоправданно.

Метрики: что мы измеряем и какие цифры получили

Ключевая метрика для нас — скорость отбора.

Единица измерения: коробок на человека в смену (или коробок в час).

Почему именно она? Потому что скорость отбора напрямую влияет на то, сколько заказов мы успеем отгрузить за день. А это — деньги.

Важное примечание: рост на 600 коробок — это не только заслуга предварительного резервирования. Внедрялся комплекс мер, усиливающих эффект. Но именно предрезерв стал тем фундаментом, без которого все остальное не работало бы.

Особенность наших складов: товар здесь — и весовой, и штучный, и маркированный (например, «Честный знак»). Комплектовщику приходится не просто взять коробку, но и назвать вес, отсканировать штрих-код. Это дополнительные операции, которые отнимают время. И даже с учетом этого мы получили такой рост.

Комплектовщики работают с голосовыми устройствами («свободные руки») — это помогает, но не решает проблему саму по себе.

Почему не стандартное резервирование из коробки?

Когда мы начинали, в WMS INFOR SCE работало классическое резервирование под заказ. Мы от него отказались, потому что:

  1. Проблема с очередями. При классическом резервировании возникает естественный вопрос: «В каком порядке выдавать заказы в комплектацию?» Низкоприоритетный заказ может заблокировать остаток, нужный более приоритетному.

  2. Простои. Комплектовщики ждут, штабелеры ждут. Все ждут, пока система соизволит раздать задачи.

  3. Несовместимость с другими процессами. Без резервирования (как у нас было на этапе 2) некорректно работает планирование по весогабаритным характеристикам, слетают приоритеты задач пополнения. Это мы прочувствовали на собственной шкуре.

Предварительное резервирование оказалось золотой серединой: мы резервируем товар, но не за конкретным комплектовщиком, а за маршрутом. Этого достаточно для планирования и подходит для того, чтобы люди не простаивали (кстати, это подойдет и для роботов, когда они появятся у нас на складах).

Что дальше? Планы по развитию

Мы не останавливаемся. В планах — три направления:

  1. Адаптация процессов для людей с ограниченными возможностями здоровья. Сейчас наши процессы заточены под «стандартного» комплектовщика. Мы хотим сделать так, чтобы система могла выдавать задачи с учетом физических возможностей сотрудника.

  2. Усовершенствование ABC-анализа. Хотим более гибко управлять правилами пополнения и ожидания для разных групп товаров, возможно, с привязкой к сезонности.

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

Подводим итоги

Мы прошли путь от жесткого резервирования к полной его отмене, а потом к «золотой середине» — предварительному резервированию под маршрут. Это дало нам +600 коробок в смену на холодных складах и решило проблему с перегруженной экспедицией.

А как у вас?

  • Как вы решаете проблему «шумных соседей» на складе — когда один заказ блокирует остатки для других?

  • Используете классическое резервирование или экспериментируете с динамическими схемами?

  • Сталкивались с проблемой, когда «второй круг» превращается в «вечный круг» из-за медленного пополнения?

Будем рады обсудить в комментариях. Честно — мы не считаем свое решение идеальным. Но оно работает для нас. А как работаете вы?

Комментарии (0)