Печать этикеток в системе WMS
Какие этикетки печатает WMS
Практика внедрения WMS на российских складах показывает, что самым распространенным способом идентификации объектов на складе является штрих-кодирование. В связи с этим, из системы WMS печатаются разные виды этикеток:
- Этикетки стационарных объектов (стеллажей, мест, порталов)
- Этикетки единиц хранения (контейнеров, коробов)
- Этикетки-идентификаторы сборных единиц хранения
- Справочные этикетки на товары для соответствия требованиям перевозки грузов
Ситуация осложняется тем, что на складе в эксплуатации могут быть одновременно принтеры разных моделей и/или производителей.
Способы печати этикеток WMS
В некоторых случаях, принтеры штрих-кодов подключаются через стандартную очередь печати операционной системы, и печать ведется штатными средствами. Такое подключение выполнить просто, но оно обладает целым рядом недостатков:
- Нужно оснащать рабочие места кладовщиков промышленными компьютерами, чтобы подключить принтер
- Не используются внутренние средства принтера для создания штрих-кодов
- Этикетка сначала преобразуется в графический образ (bitmap), а потом печатается принтером как картинка
- Для принтеров, подключенных через последовательный порт, скорость печати недостаточна
- Нельзя использовать специальные возможности принтера (например, изменить направление печати)
Однако, большинство промышленных принтеров этикеток имеют специальный внутренний язык программирования (наиболее известны EPL2/ZPL2), который позволяет преодолеть ограничения стандартного драйвера.
Решение OpenWMS
Дизайн этикетки в OpenWMS начинается с создания шаблона. Шаблон строится на координатной сетке X=(0...1) Y=(0...1) и записывается в XML-файле:
<template name="box-seti.conf"> <element type="multiline" break_chars=",.-/ " comment="Название товара"> <content>${#root['articleName']}</content> <line x="0.0" y="0.2" hints="font=4" maxlength="45"/> <line x="0.0" y="0.3" hints="font=4" maxlength="45"/> <line x="0.0" y="0.4" hints="font=4" maxlength="45"/> </element> <element type="SPELtext" x="0.8" y="0.4" hints="font=5" comment="Торг.сеть">${#root['fedseti_symbol']}</element> <element type="SPELtext" x="0.1" y="0.5" hints="font=4">Изг:${#root['dateizg']} Годен до:${#root['datereal']}</element> <element type="SPELtext" x="0.1" y="0.6" hints="font=4">Партия:${#root['part_number']} Кол-во:${#root['qty']}</element> <element type="SPELtext" x="0.1" y="0.7" hints="font=4">Нетто:${#root['netto_w']} Брутто:${#root['brutto_w']} Тара:${#root['tare_w']}</element> </template>
OpenWMS поддерживает следующие типы полей этикетки:
- text
- статичный текст
- barcode
- статичный баркод
- SPELtext
- динамический текст, формируемый spring expression language
- SPELbarcode
- динамический баркод
- multiline
- многострочный текст с автоматическим переносом слов на новую строку
Для элементов этикетки можно указать координаты X и Y, а так же угол поворота в градусах по часовой стрелке (большинство принтеров поддерживают поворот только кратно 90 градусам). В аттрибуте hint
задаются расширенные аттрибуты поля:
Имя | Применимость | Значение |
---|---|---|
narrow_width | Баркоды | Ширина узкой полосы баркода |
wide_width | Баркоды | Ширина широкой полосы баркода |
humanreadable | Баркоды | Печатать расшифровку баркода для человека |
humanreadable_above | Баркоды | Печатать расшифровку баркода сверху (если поддерживает принтер) |
font | Текст | Имя логического шрифта |
inverse | Текст | Печатать текст инверсией (если поддерживает принтер) |
Далее в конфигурационном файле описывается принтер:
<printer name="ZEBRA"> <port classinstance="com.bitIntegro.wms.core.service.barprint.FilePort" fname="COM4"/> <driver classinstance="com.bitIntegro.wms.core.service.barprint.PrinterDriverZPL2" transfer="direct" width="1000" charset="cp866" XScale="600" YScale="480"> <zebrafonts> <font name="0" symbol="0" xsize="5" ysize="9"/> <font name="1" symbol="0" xsize="5" ysize="9"/> <font name="2" symbol="0" xsize="10" ysize="18"/> <font name="3" symbol="0" xsize="10" ysize="18"/> <font name="4" symbol="0" xsize="20" ysize="36"/> <font name="5" symbol="0" xsize="20" ysize="36"/> </zebrafonts> </driver> </printer>
В описании принтера задаются коэффициенты преобразования логических координат в физические: XScale, XOffset и YScale, YOffset. Там же настраивается таблица соответствия физических и логических шрифтов и указываются специфичные настройки драйвера принтера. Поддерживаются семейства принтеров: EPL/EPL2, ZPL2, Fingerprint.
Обратите внимание, что принтер и шаблон этикетки никак не связаны между собой. Это придает системе дополнительную гибкость:
- Правильно задав масштабные коэффициенты и таблицу шрифтов, можно печатать этикетку одинаково на любом типе принтера
- Можно быстро заменять один тип принтера на другой, не трогая шаблоны этикеток
- При небольшом изменении вырубных размеров этикетки, можно не переделывать шаблоны, а только лишь увеличить или уменьшить масштабные коэффициенты в описании принтеров