Błąd w szablonie etykiety rzadko widać przy druku. Papier wychodzi z drukarki, kod wygląda poprawnie, a kłopot pojawia się kilka dni później, gdy odbiorca odrzuca dostawę. Szablon w języku ZPL jest zwykłym tekstem, więc da się go zbudować, a potem sprawdzić, zanim paleta wyjedzie z magazynu.

Dlaczego drukarka przyjmuje kod, a nie obraz

Drukarka biurowa dostaje gotowy obraz strony. Drukarka etykiet otrzymuje opis tekstowy i sama rysuje etykietę. ZPL opracowała firma Zebra Technologies, a obsługują go także urządzenia innych producentów. Opis etykiety zajmuje kilkaset bajtów, obraz tej samej etykiety setki kilobajtów, więc przy druku seryjnym różnica liczy się w czasie oczekiwania.

Ważniejszy jest drugi powód. Kod kreskowy rysowany przez drukarkę powstaje w rozdzielczości głowicy i ma ostre krawędzie. Obraz przeskalowany z innej rozdzielczości daje rozmyte kreski, które czytnik odczytuje gorzej, szczególnie pod kątem.

Podstawowe komendy języka ZPL

Komendy formatowania zaczynają się od daszka, a komendy sterujące drukarką od tyldy. Każda etykieta ma znacznik otwierający i zamykający, a wszystko pomiędzy nimi opisuje jeden wydruk.

KomendaRolaUwaga praktyczna
^XA i ^XZotwarcie i zamknięcie formatu etykietydrukarka ignoruje wszystko poza tą parą
^CI28kodowanie UTF-8bez niej polskie znaki wychodzą jako przypadkowe symbole
^FOx,ypunkt początkowy pola od lewego górnego rogujednostką jest punkt, nie milimetr
^A0N,h,wczcionka skalowalna, bez obrotulitera R obraca tekst o 90 stopni
^BYszerokość najcieńszej kreski koduwpływa na czytelność bardziej niż wysokość
^BCo,h,f,g,ekod liniowy Code 128parametr f włącza interpretację pod kodem
^BXo,h,skod dwuwymiarowy DataMatrixparametr h oznacza wielkość modułu matrycy
^FD i ^FStreść pola i jego zamknięciebrak zamknięcia skleja kolejne pola

Poniżej minimalna etykieta paletowa. Przykład jest ilustracyjny i nie przedstawia szablonu dostarczanego z produktem. Znaczniki w nawiasach klamrowych to tokeny, które system zastępuje wartościami w chwili wydruku.

^XA
^CI28
^FO30,30^A0N,40,40^FD{NAZWA}^FS
^FO30,90^A0N,30,30^FDPartia: {LOT}  Ważne do: {EXP}^FS
^FO30,170^BY4^BCN,200,Y,N,N^FD>;>800{SSCC}^FS
^XZ

Współrzędne liczy się w punktach. Przy głowicy 203 punktów na cal jeden milimetr to około ośmiu punktów, a przy 300 punktach na cal około dwunastu. Ta sama etykieta wysłana na drukarkę o innej rozdzielczości wyjdzie w innym rozmiarze.

Tokeny danych w szablonie

Etykieta o stałej treści przydaje się rzadko. W magazynie zmienia się nazwa towaru i partia, a razem z nimi numer nośnika. Szablon zawiera więc tokeny, które system podmienia wartościami z dokumentu.

W Studio WMS.net tokeny są wypisane nad polem kodu i wstawiają się w miejscu kursora po kliknięciu. Nikt ich nie przepisuje z pamięci, więc literówka w nazwie tokena nie psuje szablonu.

TokenCo podstawiaSkąd pochodzi wartość
{GTIN}numer jednostki handlowejkartoteka asortymentowa
{SSCC}numer jednostki logistycznejrejestr jednostek albo generator z prefiksu firmy
{LOT}numer partiipozycja dokumentu
{EXP}termin ważności w zapisie czytelnympozycja dokumentu
{EXPRRMMDD}ten sam termin w zapisie sześciocyfrowymprzeliczany z terminu ważności
{NAZWA} i {INDEKS}nazwa towaru i indeks kartotekowykartoteka asortymentowa

Dwa formaty daty oszczędzają kłopotu. Pod kodem potrzebny jest zapis sześciocyfrowy, a w tekście dla człowieka data z myślnikami. Oba pochodzą z jednego pola dokumentu, więc nie mogą się rozjechać. Skąd partia i termin ważności biorą się w systemie, opisuje strona o partiach produkcyjnych i datach ważności. Budowę numeru nośnika opisuje standard GS1 Polska.

Kodowanie danych GS1 w polu kodu

Pole tekstowe przyjmuje treść wprost. Pole kodu wymaga dodatkowo wskazania trybu kodowania i miejsca symbolu funkcyjnego GS1. W kodzie liniowym służą do tego sekwencje sterujące w danych pola. Sekwencja >; przełącza kodowanie na tryb cyfrowy, a >8 wstawia symbol FNC1.

W kodzie dwuwymiarowym funkcję symbolu pełni znak ucieczki zdefiniowany w parametrach pola, zwykle podkreślenie z cyfrą jeden. Zasada jest wspólna. Identyfikatory i ich wartości zapisuje się w danych pola w kolejności, w jakiej mają zostać odczytane. Budowę identyfikatorów opisuje strona o kodach GS1-128 i GS1 DataMatrix.

Najczęstszy błąd w szablonie: pomyłka o jeden znak między identyfikatorem a tokenem przesuwa cały ciąg. Etykieta wygląda normalnie i kod się drukuje, ale parser dostaje pola o złych granicach. Tej usterki nie widać ani w edytorze, ani na wydruku.

Podgląd wydruku i plik gotowy do wysłania

Pierwsza wersja szablonu prawie nigdy nie jest ostateczna. Pola trzeba przesunąć, czcionkę zmniejszyć, a długą nazwę towaru zawinąć. Dlatego edytor pozwala zmieniać szablon i od razu oglądać wynik na danych próbnych.

Zakładka podglądu podstawia dane przykładowe pod tokeny i pokazuje kod z wartościami, jego postać do pobrania oraz poglądowy wygląd etykiety.

Studio WMS.net - zakładka podglądu wydruku z danymi przykładowymi podstawianymi pod tokeny szablonu
Dane przykładowe podstawiane pod tokeny - można sprawdzić szablon bez pobierania danych z dokumentu

Podgląd jest orientacyjny, bo rzeczywisty wygląd zależy od rozdzielczości głowicy i ustawień urządzenia. Wystarcza jednak, aby wychwycić nachodzące na siebie pola albo tekst wychodzący poza etykietę.

Studio WMS.net - wygenerowany kod ZPL z podstawionymi wartościami oraz poglądowy wygląd etykiety paletowej
Wynikowy kod ZPL z podstawionymi wartościami i poglądowy wygląd etykiety paletowej z numerem nośnika

Gotowy kod można pobrać jako plik albo skopiować do schowka. W produkcji ten sam strumień wysyła się na adres sieciowy drukarki, standardowo na port 9100. Między systemem a urządzeniem nie ma wtedy sterownika, który mógłby coś zmienić po drodze.

Sprawdzenie szablonu parserem przed drukiem

Podgląd odpowiada na pytanie, czy etykieta dobrze wygląda. Nie mówi, czy dane zapisane w kodzie dadzą się poprawnie odczytać. Te dwie rzeczy są różne i na ich pomyleniu powstaje najwięcej kosztownych pomyłek.

Wystarczy skopiować z wygenerowanego kodu część trafiającą do symbolu, poprzedzić ją identyfikatorem symboliki i wkleić do transakcji weryfikacji etykiety. Parser rozbierze ciąg tak, jak zrobi to czytnik u odbiorcy.

Studio WMS.net - wynik sprawdzenia wygenerowanego kodu z szablonu, etykieta nie przechodzi weryfikacji
Kod wygenerowany z szablonu wklejony do parsera - protokół kontroli wskazuje nieznany identyfikator

Zrzut pochodzi z testu na szablonie demonstracyjnym. Protokół zgłosił nieznany identyfikator na konkretnej pozycji oraz niezgodną cyfrę kontrolną numeru towaru. Pola terminu i partii w ogóle nie powstały. Przyczyną był jeden nadmiarowy znak między identyfikatorem a tokenem numeru towaru. Po jego usunięciu ten sam kod przechodził wszystkie kontrole.

Element protokołuCzego szukaćTypowa przyczyna niepowodzenia
Rozpoznanie standarduczy parser skierował kod do właściwego standardubrak symbolu funkcyjnego na początku danych
Struktura pólczy liczba pól zgadza się z oczekiwanąprzesunięcie ciągu o jeden znak
Separatorczy wystąpił tam, gdzie powinienpole zmienne bez zamknięcia w środku ciągu
Cyfry kontrolneczy numery przechodzą kontrolę sumyzła długość wartości podstawionej pod token
Pola datczy daty zostały rozpoznanetoken w zapisie czytelnym zamiast sześciocyfrowego

Procedura zajmuje mniej niż minutę na szablon. Wyłapuje błędy, które inaczej wyszłyby przy przyjęciu towaru u odbiorcy. Mechanizm kontroli opisuje strona o weryfikacji etykiet w czasie rzeczywistym.

Dobór parametrów do rozdzielczości głowicy

Współrzędne i wymiary są w punktach, więc szablon przygotowany dla 203 punktów na cal wydrukuje się na urządzeniu 300 punktów na cal w około dwóch trzecich zamierzonego rozmiaru. Rozdzielczość dobiera się do najmniejszego elementu na etykiecie, a nie do jej wielkości.

RozdzielczośćPunktów na milimetrTypowe zastosowanie
203 dpiokoło 8etykiety paletowe i kartonowe, kody liniowe
300 dpiokoło 12małe etykiety jednostkowe i kody dwuwymiarowe
600 dpiokoło 24oznaczenia miniaturowe i drobny druk

Drugim parametrem jest szerokość najcieńszej kreski. Zwiększenie jej z dwóch do czterech punktów podwaja szerokość kodu, ale poprawia odczyt z dystansu i pod kątem. Kod, który ma wystarczającą wysokość, ale zbyt wąskie kreski, czyta się dobrze tylko z bliska. Przy etykiecie paletowej skanowanej z wózka ta zamiana miejsca na niezawodność zwykle się opłaca. Dobór urządzenia opisuje strona o drukarce kodów kreskowych, a wpływ jakości druku strona o znakowaniu towarów w magazynie.

Zwykle utrzymuje się kilka szablonów. Etykieta nośnika i oznaczenie opakowania jednostkowego różnią się formatem, ale korzystają z tych samych tokenów. Powiązanie nośnika z zawartością opisuje strona o etykietach logistycznych GS1, a jakość odczytów w całym magazynie strona o wskaźnikach skanowania.

Pytania i odpowiedzi o projektowanie etykiet ZPL

Opis ZPL to kilkaset bajtów, obraz etykiety to setki kilobajtów, a przy druku seryjnym różnica wydłuża czas oczekiwania. Kod kreskowy rysowany przez drukarkę ma też ostre krawędzie, bo powstaje w rozdzielczości głowicy. Obraz przeskalowany daje rozmyte kreski.

Odpowiada za polskie znaki diakrytyczne. Bez kodowania UTF-8 drukarka wydrukuje w miejscu liter z ogonkami znaki przypadkowe albo puste pola. Komenda stoi zaraz po znaczniku otwierającym etykietę, przed pierwszym polem tekstowym.

Wysokość to długość kresek i wpływa na zasięg odczytu. Szerokość modułu określa grubość najcieńszej kreski i decyduje, czy kod jest w ogóle czytelny. Zbyt mała wartość przy niskiej rozdzielczości daje kod, który rozpada się przy odczycie pod kątem.

W kodzie liniowym używa się sekwencji sterującej w danych pola, która przełącza kodowanie i wstawia symbol funkcyjny. W kodzie dwuwymiarowym tę rolę pełni znak ucieczki z parametrów pola. W obu przypadkach separator jest częścią danych, a nie osobną komendą.

Wygenerować podgląd z danymi przykładowymi, skopiować ciąg danych z pola kodu i wkleić go do transakcji weryfikacji etykiety. Parser poda liczbę pól i wynik kontroli cyfr kontrolnych. Jeśli oczekiwano trzech pól, a system zgłasza dwa, szablon ma błąd.

Zwykle nie. Etykieta paletowa, karton zbiorczy i oznaczenie opakowania jednostkowego różnią się formatem, zestawem danych i rozdzielczością. Utrzymuje się kilka szablonów przypisanych do typów jednostek, a wspólny pozostaje zestaw tokenów.

Glosariusz pojęć związanych z etykietami ZPL

ZPL
Język opisu etykiety opracowany przez Zebra Technologies, przesyłany do drukarki jako zwykły tekst.
Token danych
Znacznik w szablonie zastępowany wartością z bazy w chwili generowania wydruku.
Punkt (dot)
Najmniejszy element obrazu drukowany przez głowicę. Liczba punktów na cal wynika z rozdzielczości urządzenia.
Szerokość modułu
Grubość najcieńszej kreski kodu, wyrażona w punktach, decydująca o czytelności symbolu.
Interpretacja czytelna
Ciąg znaków drukowany pod kodem, który pozwala odczytać dane ręcznie, gdy skaner zawiedzie.
Zestaw znaków
Ustawienie kodowania liter, wymagane do poprawnego druku polskich znaków diakrytycznych.
Port 9100
Standardowy port sieciowy, na który wysyła się strumień danych do drukarki etykiet.
Podzbiór kodu
Tryb kodowania znaków w kodzie liniowym, osobny dla ciągów cyfrowych i alfanumerycznych.

Warto przeczytać