klient
Rafał Błaszczyk
6 pkt
1 pytań
1 odpowiedzi
0 pomysłów
0 komentarzy
6 100%
6 pkt

[rozwiązanie] Etykiety Zebra przez ZPL natywnie z Optimy

Rafał Błaszczyk zapytał/a o
Logistyka
Logistyka pytań: 86 | odpowiedzi: 406

Mariusz FrączekAdam NowakRafał BłaszczykDariusz KnopikMirosław SmendaPiotr RybińskiMaciej LachowiczRomuald Ulcyfer
Techniczne
Techniczne pytań: 1568 | odpowiedzi: 5958

k3sil4Paweł NagórkaAdam NowakŁukasz PulchnyGrażyna ŻelichowskaMarek KwiatkowskiMagdalena GrygaAneta Walendzik
Handel
Handel pytań: 905 | odpowiedzi: 3476

Handel

Grzegorz BąbaPiotr BartosiakTomasz SzkudlarekMichał SkowrońskiPrzemysław ParusGrzegorz DurakRoman MozolaRafał Łopuszyński-ucz.RSO!-IIedycja

Cześć!

Zaglądałem tu parę razy i skorzystałem z Waszych rad, być może mój wkład też okaże się przydatny.

Wiele razy poruszany był temat małych etykiet produktowych z EANami drukowanymi z Optimy. Problem jest taki, że Genrap nie potrafi wygenerować małych kodów EAN, a poza tym bardzo ciężko jest zaprojektować taką małą etykietę nawet bez kodu kreskowego, żeby drukowała się poprawnie przez GenRap. Najlepszym rozwiązaniem jest wykorzystanie języka ZPL, który obsługują drukarki zebra i tak właśnie zrobiłem.

Poniżej moje rozwiązanie, które nie wykorzystuje żadnych dodatkowych programów, ani funkcji.

Przykład jest dla etykiet 50x30 mm drukowanych na drukarkach 230 dpi. Drukarka MUSI posiadać wsparcie dla ZPL (jeśli ma EPL to trzeba zmienić w konfiguracji albo zmienić firmware albo drukarkę albo kod szablonu :-) Własny kod ZPL możecie uzyskać np. z pomocą programu Zebra Designer lub pisać ręcznie i pomagać sobie Labelary viewer (online). Do pisania ręcznego dokumentacja - ZPL II guide na google). Elementy zmienne (np. kody kreskowe, opisy) muszą wykorzystywać czcionki standardowe drukarek lub odpowiednie czcionki muszą być załadowane wcześniej do drukarki, w moim przykładzie są tylko czcionki standardowe.

Ten sposób wykorzystuje wydruk tekstowy XML z Optimy. Dodałem parametr z pytaniem o ilość etykiet, który pojawia się przed wydrukiem. Za pomocą transformacji XSLT ten XML zamieniany jest na kod ZPL, a następnie uruchamiany jest prosty skrypt powłoki Windows, który wysyła ten plik ZPL na wybraną drukarkę. Mechanizm jest bardzo podobny jak wydruki na drukarki tekstowe. W moim odczuciu całość działa bardzo sprawnie.

Jak to zrobić:

  1. Zainstalować drukarkę zebra w systemie i udostępnić ją jako zasób np. \\server1/zebra1
    Nazwę serwera oczywiście musicie dostosować do nazwy komputera, który ma zainstalowaną drukarkę i optimę.
  2. Utworzyć skrypt powłoki na hoście z Optimą drukujący na drukarce np. c:\tools\print_zebra1.cmd z o zawartości
    copy /B %1 \\server1/zebra1
    (nazwa drukarki to nazwa udostępnionego wcześniej zasobu)
  3. Czynności 1 i 2 powtórzyć dla wszystkich drukarek używając innych nazw drukarek (1 drukarka = 1 plik skryptu)
  4. Otworzyć dowolną kartotekę towarową (pozycja cennika) i przejść do konfiguracji wydruków (Ctrl+F2)
  5. Dodać nowy wydruk np. "Etykieta towarowa ZPL 230dpi (50 x 30 mm)"
    1. Jako typ wybrać XML, tekstowy
    2. W definicji podać:

      [SQL]
      Select Twr_Kod, Twr_EAN, Twr_Nazwa from CDN.Towary
      Where ?@Hs200_NQ|Filtr:''@?

      [XSL]
      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
      <xsl:output method = "xml" omit-xml-declaration="yes" encoding="utf-8" />
      <xsl:preserve-space elements="*"/>
      <xsl:template match="/">
      <xsl:for-each select="ROOT/RECORDSET1/RECORD">
      CT~~CD,~CC^~CT~
      ^XA~TA000~JSN^LT0^MNW^MTD^PON^PMN^LH0,0^JMA^PR2,2~SD15^JUS^LRN^CI0^XZ
      ^XA
      ^MMT
      ^PW400
      ^LL0240
      ^LS0
      ^CI28
      ^BY3,2,87^FT72,207^BEN,,Y,N
      ^FD<xsl:value-of select="@Twr_EAN"/>^FS
      ^FT0,44^A0N,28,28^FB400,1,0,C^FH
      ^FD<xsl:value-of select="@Twr_Kod"/>^FS
      ^CWT,E:TT0003M_.FNT
      ^CFT,20,20
      ^CI28
      ^FT0,95^FB400,2,0,C^FH
      ^FD<xsl:value-of select="@Twr_Nazwa"/>^FS
      ^PQ?@n6|IlEtykiet|&Ilość etykiet dla każdego towaru:1@?,0,1,Y^XZ

      </xsl:for-each>
      </xsl:template>
      </xsl:stylesheet>

      [FILE]

      [RUN]
      c:\tools\print_zebra1.cmd

    3. Zapisać definicję wydruku i drukować :-)

Co wymaga poprawy:

  1. Polskie znaki w opisach. Mam starą testową drukarkę ZP2844, która nie obsługuje UTF-8. Próbowałem z transformacją XML na ASCII za pomocą character-maps jak tutaj: https://www.mimuw.edu.pl/~czarni...ml07/lab11.html
    ale to nie chce mi działać w Optimie. Jeśli by to działało to byłaby pełna kompatybilność z zebrami nawet tymi starymi. Oczywiście da się to załatwić w inny, mniej elegancki sposób np. rozbudowując skrypt cmd do jakiegoś powershella etc. Jeśli ktoś się bardziej orientuje w xslt w Optimie to proszę o pomoc. Być może na tych drukarkach ze wsparciem UTF-8 będzie działać od strzału.
  2. Drukowanie na liście zasobów dla wielu towarów na raz. Do tego trzeba zmodyfikować zapytanie SQL i chyba jest jakaś tabela przejściowa, ale nie wiem jak to zrobić...jakieś pomysły?

Odpowiedzi:

User Avatar
klient
Rafał Błaszczyk
6 pkt
1 pytań
1 odpowiedzi
0 pomysłów
0 komentarzy
6 100%
oceń
 
Rafał Błaszczyk odpowiedział/a
Logistyka
Logistyka pytań: 86 | odpowiedzi: 406

Mariusz FrączekAdam NowakRafał BłaszczykDariusz KnopikMirosław SmendaPiotr RybińskiMaciej LachowiczRomuald Ulcyfer
Techniczne
Techniczne pytań: 1568 | odpowiedzi: 5958

k3sil4Paweł NagórkaAdam NowakŁukasz PulchnyGrażyna ŻelichowskaMarek KwiatkowskiMagdalena GrygaAneta Walendzik
Handel
Handel pytań: 905 | odpowiedzi: 3476

Handel

Grzegorz BąbaPiotr BartosiakTomasz SzkudlarekMichał SkowrońskiPrzemysław ParusGrzegorz DurakRoman MozolaRafał Łopuszyński-ucz.RSO!-IIedycja
miesiąc temu

Zapomniałem dodać do instalacji drukarki - drukarka zebra powinna być zainstalowana w Windows ze sterownikiem "Generic / Text Only". Można zainstalować nową drukarkę i użyć tego samego portu, którego używa już zainstalowana zebra ze sterownikiem Zebra Designer. Nowa drukarka jest potrzebna tylko po to, żeby móc wysyłać ZPL bezpośrednio na nią.

BTW - polskie znaki działają w ten sposób na GK420

Masz pytanie?

zadaj pytanie

Masz pomysł?

zgłoś pomysł