WMS — аббревиатура от английского «Warehouse Management System», или «система управления складом». Часто можно встретить русскоязычную аббревиатуру СУС, а некоторые производители относят свои системы даже не к WMS, а к IMS (inventory management system), WCMS (warehouse complex management system), и так далее. Те, кто чуть больше остальных погружен в складскую тематику, при упоминании об управлении складом сразу вспоминают радиотерминалы, этикетки, штрихкоды и прочие обязательные атрибуты внедрения. Те, кто погружен меньше, ассоциирует выражение «управление складом» со «складским учетом», что порой приводит к некоторым терминологическим разногласиям: если штрихкоды — это отсылка на технологии автоматической идентификации, то «складской учет» чаще ассоциируется с оформлением товаросопроводительной документации и ведением информации о складских остатках.
Перед тем, как мы перейдем к первому разделу, хотелось бы сказать, что статья не ставит перед собой цель рассмотреть весь возможный функционал. Она является, скорее, ознакомительной – как раз для тех, кто слышал или знает общие слова о WMS, но хочет узнать больше.
Автоматическая идентификация
Если говорить простым языком, то суть АИ можно определить прямо из названия. На склад приходят разнообразные грузы, и одна из важнейших задач — это идентифицировать параметры каждого груза на входе и выходе. В качестве параметра чаще всего выступает наименование и логистическая упаковка, чуть реже — сроки годности и даты производства, завод-изготовитель, номер производственного лота, и прочее. Естественно, для передачи этих данных между участниками логистической цепи невозможно использовать централизованное хранилище данных, ввиду чего информацию приходится размещать прямо на единичной, групповой и/или транспортной упаковке в виде этикетки или радиометки. Чаще всего используются этикетки со штрихкодом, хотя порой удается встретить товары, маркированные радиометками (например, пошитая в Европе одежда). Так как радиометки используются крайне редко, на продукции можно найти еще и штрихкод. Таким образом, если у нас нет оборудования для чтения радиометок, мы можем использовать штрихкод.
Штрихкоды бывают разных форматов, но чаще всего используется EAN-13 и EAN-128. Первый обычно включает в себя информацию о продукте и логистической единице, а второй является так называемым «блочным» кодом, и может быть представлен даже не одной, а несколькими этикетками, где каждая последующая будет дополнять предыдущую. Блочный код делится на сегменты, отделяемые друг от друга специальными символами-сепараторами, и каждый сегмент содержит идентификатор типа данных, а также сами данные. Идентификатором типа данных может быть «товар», «срок годности», «дата производства», и многое другое. Так как содержание кода EAN-128 является стандартизированным, этот код часто используется у производителей.
Контроль исполнения
Есть такой класс информационных систем управления, как «системы контроля исполнения». Их задача заключается в том, чтобы при помощи разнообразных инструментов (сканеры штрихкода, контрольные числа и так далее) убедиться в том, что поставленная задача была выполнена исполнителем. Как раз с целью контроля исполнения, на складе штрихкодом маркируются все объекты, с которыми сотрудники могут выполнять какие-либо операции. Например, свой штрихкод получает каждая ячейка склада (складское место), где могут быть размещены грузы. Давайте теперь подумаем, как же мы проконтролируем исполнение задачи на размещение груза в ячейку? Раскладывая эту задачу на простые составляющие, имеем:
1) Сотрудник подошел к заданному грузу, находящемуся в заданном месте
2) Сотрудник переместился с грузом к заданной ячейке
3) Сотрудник разместил груз в ячейке
Таким образом, для обеспечения контроля исполнения нам потребуется штрихкод не только у ячейки, но еще и у груза. Если мы дадим сотруднику возможность на каждом этапе осуществлять сканирование штрихкода специальным сканером, то сможем определить, что он:
1) Подошел к той ячейке, откуда необходимо извлечь груз (сканирование ШК исходной ячейки)
2) Взял правильный груз (сканирование ШК груза)
3) Доставил груз к целевой ячейке (сканирование ШК целевой ячейки)
В зависимости от предприятия и типа склада, который мы автоматизируем, может использоваться самое разнообразное оборудование: радиотерминалы, информационные киоски, системы pick-by-light, put-to-light, а также банальные компьютеры с подключенным USB-сканером, расположенные близко к исходным и целевым ячейкам. Чаще всего, однако, можно встретить именно радиотерминалы — специальные промышленные КПК с встроенным сканером штрихкода (и не только — в зависимости от комплектации). Все радиотерминалы подключены к общей радиосети, так что сотрудник получает на экран терминала указания в пошаговом режиме: «Подойдите к месту… и сканируйте его ШК», «Возьмите груз… и сканируйте его ШК», «Разместите в ячейке… и сканируйте ее ШК». Помимо контроля исполнения, мы получаем еще и полезную статистику о времени перемещения сотрудника между ячейками, а также затратах времени на каждом этапе выполнения задачи. Главное — не увлечься слишком сильно, так как сканирование штрихкода тоже занимает некоторое время, и на тех складах, где выполняется большое количество операций — например, 20 000 операций в смену, — задержка даже в 2 секунды даст 40 000 секунд издержек, что превышает 11 ресурсо/часов.
Сквозная диспетчеризация
Принимая во внимание, что каждый сотрудник оснащен радиотерминалом, и выполняет задания в пошаговом режиме, пора бы задуматься о том, откуда эти задания поступают. Функционал диспетчеризации является одной из фундаментальных возможностей WMS, и именно корректно настроенный и эффективный алгоритм распределения текущего объема задач между исполнителями позволяет складу работать быстро и качественно. Представим себе сотрудника на, скажем, погрузчике. Погрузчик ездит по складу и имеет возможность ставить и снимать со стеллажей грузы, а также перемещать их между напольными ячейками. Далеко не все актуальные на текущий момент задания имеют одинаковый приоритет: есть более приоритетные (если подъехала машина и ждет, пока мы отгрузим товар), и менее приоритетные (у соседних с этой машиной ворот недавно закончили принимать товар, и там стоят грузы для размещения). Алгоритм диспетчеризации может пойти несколькими путями:
1) Выполнять все задачи по FIFO (задачи выполняются в той последовательности, в которой создавались)
2) Сначала расставить пришедший на склад товар, а потом отправить исполнителя на отгрузку (можно и в обратной последовательности)
3) Выполнить весь перечень задач в «попутном» режиме
Теперь подробнее про «попутный» режим: грузы для размещения в машине, которая ждет отгрузки, находятся на складе, в так называемой «зоне экспедиции отгрузки». Представим, что это места на фронтальных стеллажах, находящиеся близко к воротам. Мы берем груз, завозим его в транспорт (или подвозим грузчикам на ворота), затем берем с соседних ворот другой груз для размещения, ставим его недалеко от следующего груза из зоны экспедиции отгрузки, и продолжаем процедуру отгрузки, перемежая ее — таким образом — с процедурой расстановки с приемки. Часто этот функционал называется «чередованием задач» (task interleaving), и именно возможность его гибкой настройки и наличие готовых алгоритмов характеризует действительно хорошую WMS.
Помимо перемещения грузов погрузчиком, существует множество и других операций, которые могут выполняться сотней сотрудников в параллельном режиме. В этом случае, важно так распределить задачи, чтобы не только обеспечить требуемую приоритезацию, но еще и не допустить таких элементарных глупостей, как отправка нескольких исполнителей в одну и ту же аллею (проход между стеллажами), где они будут толкаться и мешать друг другу. На этом месте, грамотный читатель наверняка прокомментирует, что важно не только избавиться от столкновений, но еще и распределять грузы по складу так, чтобы обеспечить равномерную нагрузку на имеющуюся площадь, но одно другое не исключает, а дополняет, что мы и увидим, когда будем говорить о стратегиях размещения.
Стратегии размещения
Здесь придется немного отвлечься, и рассмотреть нынешнюю классификацию WMS. Как правило, в большинстве случаев выделяют 3 класса: «коробочные» системы, адаптируемые и заказные. «Коробочные» продукты имеют фиксированную логику, которая меняется только при помощи настройки параметров. Адаптируемые системы предлагают широкие возможности конфигурирования алгоритмов при помощи правил и конструкторов, а заказные пишутся под конкретного заказчика, и — помимо фиксированной логики, — часто не имеют даже базового инструментария для оперативного внесения изменений.
Почему я обратился к классификации систем, когда глава посвящена стратегиям размещения? Потому что большинство пользователей WMS под «стратегией размещения» привыкли видеть именно то, что предлагается самыми дешевыми системами «коробочного» уровня, вроде такого: «Первый – в зону набора, остальные – в хранение», «Ставить рядом с таким же товаром», «Тяжелые – вниз, легкие – вверх», и так далее. Самое существенное ограничение такого представления – это смешение «теплого» с «мягким». Например, мы вполне можем захотеть все одновременно: размещать тяжелые – вниз, легкие – вверх, ставить вновь поступившие грузы рядом с такими же товарами, и первые пришедший груз поставить в зону набора, чтобы потом не тратить время на пополнение. Именно поэтому, в адаптируемых системах понятие «стратегии» очень условно: можно сконструировать десятки и даже сотни правил, которые будут выстраивать логику именно так, как это сейчас необходимо. В этом – огромное преимущество адаптируемых систем перед коробочными, когда речь идет о складе коммерческой грузопереработки, который оказывает услуги по хранению и обработке грузов (так называемые 3PL-склады). Ведь когда на склад приходит новый поклажедатель (клиент склада), у него может быть самая разная продукция: от гаек и консервов до охлажденного мяса. Бывают ситуации, когда размещать грузы приходится с учетом таких невообразимых атрибутов, как первые несколько символов наименования товара.
Тем не менее, какой бы система не была, одним из ее важных преимуществ будет наличие уже готовых правил (вариантов), которые можно использовать – это сильно сэкономит время при подготовке системы к эксплуатации.
Стратегии резервирования
Процедура резервирования позволяет зафиксировать определенное количество (объем, вес) товара в пользу некоего документа, операции или иного объекта учета. Так как в системе управления складом учет остатков имеет довольно серьезную степень детализации, включая информацию о местоположении груза, резервировать товар сразу с учетом всего объема деталей является не совсем корректным. Начнем с того, что в систему управления складом поступает некий документ, на основании которого мы должны выполнить резервирование. Допустим, это будет заказ клиента на отгрузку определенного количества товара. Сначала мы должны убедиться, что указанное количество есть на складе, иначе нет никакого смысла отправлять этот документ в работу. Именно этот вариант резервирования, который устанавливает резерв на уровне товара и неких основных параметров учета, часто называется «резерв верхнего уровня». Он обычно выполняется по следующим параметрам:
1) Товар (материал)
2) Склад (если система обслуживает несколько физических складов)
3) Владелец запаса (поклажедатель)
4) Вид / категория запаса (свободно используемый, подозрение на брак, карантин, уцененный и т.п.)
5) Номер или код партии (возможно, составной атрибут)
Перечислять список можно сколь угодно долго, ведь развитые системы управления могут учитывать множество параметров учета запаса, и даже расширять этот перечень без необходимости программирования.
Как видно, резерв верхнего уровня создается под документ, так как документ – это самый верхний (укрупненный) уровень детализации в системе управления, которой приходится работать на уровне атомарных операций. Но именно для выполнения атомарных операций требуется создание резервов и на «нижнем» уровне, который включает в себя идентификатор ячейки и груза. Дело в том, что на один и тот же груз могут существовать несколько заданий, и нельзя допустить, чтобы в одно место были направлены два сотрудника, один из которых вдруг на подходе к ячейке выяснит, что для исполнения задания товара там явно недостаточно. Причем, некоторые системы накладывают резерв на уровне зоны склада, выстраивая задания в реальном времени, и именно у таких систем возможны вышеуказанные конфликты.
Естественно, резерв верхнего уровня должен учитывать резерв нижнего уровня, поэтому два резерва редко сосуществуют – чаще происходит их преобразование с одного уровня в другой. Именно в рамках этого преобразования, система должна определить, в каких зонах склада какие именно операции потребуется выполнить. Например, требуется отгрузить 1000 штук, а на одной палете размещается 600 штук. В коробке вмещается 40 штук. Таким образом, система управления должна найти одну целую палету на 600 штук, а еще 400 штук набрать десятью коробками. Так как набрать товар с большой высоты крайне затруднительно (можно использовать специальную технику или – банально – лестницу, но техника имеет высокую стоимость, а лестница подразумевает очень низкую производительность), для набора коробок и / или штук используют нижние ярусы, позволяющие сотруднику среднего роста дотянуться до требуемых грузов.
Опять же, в зависимости от класса системы, стратегия может быть представлена фиксированным алгоритмом с вариантами настроек, либо гибкой логикой правил. Стратегия резервирования чаще всего привязывается к конкретной зоне склада, поэтому получается список «обзора» системой зон склада с указанием на то, как именно в данной зоне будет резервироваться товар, например:
1) Резервирование целыми палетами в зоне хранения (более высокий приоритет)
2) Резервирование по FEFO (first expired – first out) в зоне набора (менее высокий приоритет)
В адаптируемых системах с большой степенью вероятности будет присутствовать возможность создать правила в привязке к произвольным атрибутам, а не только к типу заказа или товару, как это реализуется в дешевых «коробочных» вариантах. Таким образом, опять возвращаемся к 3PL-складам, где гибкость играет большую роль в конкурентоспособности, и лишний раз констатируем, что для подобных объектов адаптируемые системы являются наиболее подходящими.
Формирование заданий
После того, как было выполнено преобразование из резерва верхнего уровня в резерв нижнего уровня, мы получим два типа заданий: задания на перемещение целых палет (которые можно выполнить при помощи подъемно-транспортного оборудования, далее – ПТО), и задания на набор (отбор, пикинг, комплектацию заказов – терминов много). Теперь возникает следующая задача: задания требуется объединить в группы по ряду признаков, чтобы обеспечить их эффективное исполнение.
Про задания на перемещение мы уже упоминали, и они очень сильно упрощают любую дальнейшую оптимизацию тем, что за одно перемещение оператор ПТО может взять только одну палету, так что улучшить что-то можно, только выстраивая задания в определенной последовательности. Конечно, есть вариант техники с длинными вилами (можно взять две палеты за раз), а также низких палет (несколько палет ставятся друг на друга, и техника их перевозит), но обзор подобных алгоритмов я бы отнес на следующий раз.
Задания на набор поистине открывают простор для творчества. Дело в том, что зоны набора для транспортных, групповых и единичных упаковок могут быть как раздельными, так и совмещенными. Какие-то зоны находятся на одном уровне склада, и один сотрудник может осуществлять набор одновременно во всех этих зонах, а какие-то разделены по уровням (например, многоуровневый мезонин для штучного набора), и один исполнитель никак не сможет попасть в другую зону склада. Помимо этого, единицы разных габаритов набираются в принципиально разную тару. Если транспортные и групповые упаковки обычно набираются на крупные товароносители (например, деревянные поддоны), то штучные и мелкоштучные единицы могут набираться в коробки или лотки.
Итак, системе необходимо объединить задания по зонам исполнения, затем – сгруппировать по общему признаку (на одних складах используется позаказный отбор, а на других – набирается сразу весь рейс). Далее, в зависимости от зоны и – как мы уже говорили – упаковки, необходимо подобрать оптимальную тару для набора, и распределить задания по единицам тары. После этого, система формирует комплект тары под исполнителя, и только после всех обозначенных шагов мы получаем готовое задание для исполнителя. Обратите внимание, что исполнитель не будет листать на своем радиотерминале список заказов, и не будет принимать решение о том, в какой последовательности ему необходимо выполнять задачи. Алгоритм его работы будет выглядеть примерно так:
1) «Возьмите: 1 поддон, 2 лотка»
Исполнитель берет поддон и 2 пластиковых лотка, сканируя их штрихкоды и подтверждая системе корректность типоразмеров.
2) «Идите к месту X»
Исполнитель сканирует штрихкод места
3) «Возьмите товар Y в количестве Z, и подтвердите количество»
На этом этапе, исполнитель может изменить количество набранного товара. Может возникнуть ситуация, когда в ячейке он не найдет требуемое количество, и система должна предложить ему альтернативу, если таковая есть.
4) «Положите указанное количество на поддон / в лоток N, и сканируйте его штрихкод»
Исполнитель сканирует штрихкод поддона или лотка – в зависимости от того, что указывает система, и подтверждает, что отбор произведен в корректную тару
5) …
Опять же: разные системы – разный уровень детализации и вариантов, но именно система «решает», какие задания, в какой последовательности и в какую тару будет собирать конкретный сотрудник.
Управление зоной консолидации
Как мы уже говорили, задания могут быть сгруппированы абсолютно по-разному. Один исполнитель может набирать одновременно 4 лотка, принадлежащие разным заказам, и – более того – разным рейсам. Другой исполнитель будет собирать транспортные упаковки по нескольким разным заказам на один поддон, чтобы оптимизировать пробеги по складу. На выходе же все грузы должны быть рассортированы так, чтобы их удобно было загружать в транспорт и – соответственно – выгружать из транспорта.
Тот, кто занимается набором, не должен о всем этом задумываться. Система должна выдать ему четкое задание: подойти к конкретному месту в зоне консолидации, выгрузить туда 1 лоток, в другое место – еще 2 лотка, и в третье – последний. Следующий сотрудник получит информацию о том, как распределить собранные на поддон транспортные упаковки по ячейкам той же зоны. Результат – мы получаем оптимально рассортированные грузы, которые можно подвозить к транспорту и загружать, будучи уверенными в том, что система выдержала правильную сортировку (первыми загружаются грузы по тем заказам, которые будут выгружены из транспорта последними).
Резюме
Это фундамент, самая базовая часть практически любой промышленной WMS. Сейчас на рынке представлены много систем, про которые говорят, что «все они на 90% похожи», но схожи в них лишь те процессы, которые они автоматизируют. Реализация – естественно – сильно различается, и именно это дает возможность сосуществовать на одном рынке более, чем сотне разных продуктов. Надеюсь, последующие статьи смогут дать читателю еще больше полезной информации о различиях систем и принципах, по которым они работают.
Автор: LOGX