[gelöst]Zebra (ZPL) Drucker ansteuern

26. Mai 2009 06:26

Hallo

Die Zebra Drucker verfügen über eine eigene Programmiersprache ZPL. Nun möchte ich diesen in Navision einbinden. Es sollen Artikeletiketten gedruckt werden.

Akutell haben wir diese folgendermaßen umgesetzt. Die Etiketten werden jeweils mit eine Etikettenprogramm erstellt. Danach kann man 2 Etiketten auswählen (ist eine VB Applikation) und an den Drucker senden.

Nun möchte ich diese in Navision abbilden. Wie kann ich dies machen bzw. hat jemand von euch schon so etwas ähnliches umgesetzt.
Wie kann ich eine besten eine Textdatei erstellen und an den Drucker senden. Diese Drucker sind alle im Netzwerk verfügbar.

lg
stony
Zuletzt geändert von stony am 9. Juni 2009 13:07, insgesamt 1-mal geändert.

Re: Zebra (ZPL) Drucker ansteuern

26. Mai 2009 08:04

Hallo stony,

wir haben für unsere Branchenlösung ein Modul entwickelt, mit dem man auf einem Zebra-Drucker per ZPL Etiketten drucken kann. Das Layout ist vom Anwender konfigurierbar und wird direkt per Report auf den Zebra gedruckt.

Wenn es etwas einfacher sein soll, kann man auch nur einen Report einsetzen, der den ZPL-Code ausgibt. Das Layout ist dann allerdings fest. Änderungen müssen dann durch Ändern des/der Reports durchgeführt werden.

Gruß, Fiddi

Re: Zebra (ZPL) Drucker ansteuern

26. Mai 2009 09:28

Hallo

Kannst du mir bitte weiter Information dazu geben. Wie kann man den ZPL-Code ausgeben. Das Layout ist bei uns fest definiert.

lg
stony

Re: Zebra (ZPL) Drucker ansteuern

26. Mai 2009 09:41

Der Trick dabei ist, den Drucker nicht über den Zebra-Treiber anzusprechen, sondern als "Generic-Text". Dann kann man den ZPL-Code direkt ausgeben.

Gruß, Fiddi

Re: Zebra (ZPL) Drucker ansteuern

26. Mai 2009 11:00

Heißt das, das man eine Drucker (mit Gerneric Text als Treiber) installiert. Nur wie generiert man diese ZPL Commands und sendet diese an den Drucker.

Re: Zebra (ZPL) Drucker ansteuern

26. Mai 2009 11:09

hallo stony,

heißt es.

Nun man sagt String:= '^FA....' und gibt den String in einer Section aus. Dabei muss man noch ein paar Dinge beachten.
  • Die Section darf nicht ganz am linken Rand beginnen, der Treiber killt sonst die ersten Zeichen
  • Das Ausgabefeld in der Section muss man groß genug machen, damit der längste ZPL-String ausgegeben werden kann. Woraus folgt:
  • Jedes Etikettenfeld sollte in einer separaten Zeile ausgegeben werden

Gruß, Fiddi

Re: Zebra (ZPL) Drucker ansteuern

26. Mai 2009 11:38

Alternativ kann man das ganze auch ohne Report machen.

Wir haben in unserer Branchenlösung bei Varianten implementiert.

Wenn Die Kommandos direkt an den Drucker gesendet werden sollen, so machen:

Code:
Var PrintPort  File
PrintPort.OPEN('\\Server\Sharename') oder PrintPort.OPEN('LPT1') etc.
PrintPort.WRITE(Hier ZPL-Sequenzen);
PrintPort.CLOSE


Gruss

Re: Zebra (ZPL) Drucker ansteuern

26. Mai 2009 11:50

Hallo

D.h. für den Befehle eine neue Zeile aber nicht eine neu Sektion oder.
Hast du vielleicht auch eine Ahnung wie dies mit Logos funktioniert. Soweit ich dies bis jetzt gelesen habe, müssen diese vorher an den Drucker gesendet werden und können danach in´s Etikett eingebunden werden ?

lg
stony

Re: Zebra (ZPL) Drucker ansteuern

26. Mai 2009 12:02

Gar keine Sections

z.B. in einer CodeUnit
Code:
PrintPort.OPEN('\\Server\Sharename') oder PrintPort.OPEN('LPT1') etc.
PrintPort.WRITE('^XA');
PrintPort.WRITE('^BY2,3.0^FO25,120^BEN,50,Y,N^FR^FD%1^FS'');
etc.
etc.
PrintPort.CLOSE


Bilder habe ich nie was gemacht.

Gruss

Re: Zebra (ZPL) Drucker ansteuern

26. Mai 2009 12:17

wenn du meine Lösung bevorzugst (hat den Vorteil mit der normalen Druckersteuereung über Tabelle 78 klar zu kommen) solltest du die eigentliche Ausgabe in einer integer-Section machen, wo jedes Etiketten- Feld in einer Zeile ausgibst.

Sieht dann etwa so aus:

Basistabelle : z.B. Artikel
Etikettenfelder : integer (Filter 1...n, n= Anzahl der Etikettenobjekte{Texte, Barcodes,...})


evtl. definierst du dann noch einen Header bzw. Footer um den Drucker zu initialisieren bzw. zurück zu setzten.

Ich habe gerade keinen Drucker zur Hand, aber ich glaube, man kann Logos u.ä. auf dem Drucker über die WEB-Oberfläche abspeichern.


Gruß, Fiddi

Re: Zebra (ZPL) Drucker ansteuern

26. Mai 2009 13:48

Es gibt auch einen andere Möglichkeit.
ZEPRA hat seit einiger Zeit auch Drucker am Markt, die mit den normalen Windows Drucksystem (Windows Druckserver)arbeiten und keine ZPL anpsrache mehr benötigen. Ältere Drucker sollen dies auch können, wenn Sie ein Firmwareupdate erhalten. Diese Information ist jetzt ca. 1 Jahr alt.

Vielleicht findet sich dazu ja auch etwas in den Foren von ZEPRA selber.

Schönen Tag noch.

Sven

Re: Zebra (ZPL) Drucker ansteuern

26. Mai 2009 14:50

@Dreistein,

das kann der Zebra schon länger, aber, wenn du um 90° gedrehten Text haben willst, bist du mit dem NAV- Reportgenerator ziemlich aufgeschmissen.

Gruß, Fiddi

Re: Zebra (ZPL) Drucker ansteuern

29. Mai 2009 08:17

Hallo,
ich habe für einen Kunden unter Navision Financials 2.01 auch schon Barcode-Etiketten für die Ausgabe auf einem Zebra-Drucker programmiert.
Dabei werden für einen bestimmten Artikel (auswählbar) eine auswählbare Anzahl an Etiketten gedruckt.

Die Steuerzeichen für den Barcode werden einfach in einer Textvariablen hinterlegt und diese Textvariable wird als SourceExpression bei einem Control eingetragen.

Code:
  DATAITEMS
  {
    { PROPERTIES
      {
        DataItemTable=Table2000000026;
        DataItemTableView=SORTING(Nummer);
        NewPagePerRecord=Ja;
        OnPreDataItem=BEGIN
                        Ganzzahl.SETRANGE(Nummer, 1, intAnzahl);
                      END;

        OnAfterGetRecord=BEGIN
                           txtBarcode := '${^FO50,350^BCN,140,Y,N,N,N^FD02>50'+recArtikel."EAN-Code";
                           txtBarcode := txtBarcode+'>615>5'+FORMAT(dateMHD,0,'<Year,2><Month,2><Day,2>');
                           txtBarcode := txtBarcode+'>610>5'+codeCharge+'^FS}$';
                         END;



txtBarcode ist dabei die Textvariable für den Barcode.
Im Reportdesign sieht das Ganze dann aus, wie in einem "normalen" Druck-Report.
Der Zebra-Drucker erkennt die Steuerzeichen und druckt das, was er soll - nämlich ein Barcodeetikett.

Noch ein Hinweis dazu:
Erst vor Kurzem gab es bei diesem Kunden die Anforderung, dass wahlweise ein anderes Etikettenformat bedruckt werden soll.
Dabei haben alle Navision-Einstellungen (Papersize,...) nichts bewirkt - der Drucker hat nach dem Druck eines Etiketts immer den Vorschub
des "alten" Etiketts gemacht.
Hier half nur eine Kalibrierung des Druckers auf das "neue" Etikettenformat.

Gruß
Jörg
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Zebra (ZPL) Drucker ansteuern

8. Februar 2012 14:27

Hallo,

@martinst:

Bei deiner Lösung direkt aus der CU bekomme ich die Fehlermeldung: "Das Bestriebssystem kann nicht auf die Datei "\\Server\Sharename" (bei deinem Beispiel) zugreifen. Prüfen Sie Typ und Attribute der Datei."

Ein simples copy mit einer Testdatei mit dem gleichen PrinterCode, der sonst durch die Funktion generiert wird, an die gleiche Druckeradresse geschickt, funktioniert aber problemlos.
Wo ist hier das Problem? Hab ich noch irgendwas übersehen?

Danke.

martinst hat geschrieben:Alternativ kann man das ganze auch ohne Report machen.

Wir haben in unserer Branchenlösung bei Varianten implementiert.

Wenn Die Kommandos direkt an den Drucker gesendet werden sollen, so machen:

Code:
Var PrintPort  File
PrintPort.OPEN('\\Server\Sharename') oder PrintPort.OPEN('LPT1') etc.
PrintPort.WRITE(Hier ZPL-Sequenzen);
PrintPort.CLOSE

Re: [gelöst]Zebra (ZPL) Drucker ansteuern

8. Februar 2012 14:33

Warum benutzt ihr nicht einen "Generics- Text" Drucker?
Damit könnt Ihr jeden Zebra- Drucker irgendwo in eurem Netz von jedem Arbeitsplatz ansteuern.

Gruß, fiddi

Re: [gelöst]Zebra (ZPL) Drucker ansteuern

8. Februar 2012 15:40

Leider sind es in dem Falle kein Zebra sondern TSC - Drucker.

Aber das Prinzip funktioniert ja scheinbar trotzdem, wenn ich die Codes wie oben erwähnt direkt an den Drucker senden kann.

Leider funktioniert das mit dem Textdrucker aber nicht.

Hatte mir ja auch schon einen Report gebaut, der alle Befehle ausspuckt und den Drucker als "Enable Generic / Text only Mode" konfiguriert.
Nur leider rührte sich beim Drucker rein gar nichts. :-(

Wieder umgestellt auf normalen Modus und alles geht wieder. :-?

Gruß,
Falko

Wie gesagt, PRN-File mit den Steuercodes per copy an den Drucker senden funktioniert problemlos.

fiddi hat geschrieben:Warum benutzt ihr nicht einen "Generics- Text" Drucker?
Damit könnt Ihr jeden Zebra- Drucker irgendwo in eurem Netz von jedem Arbeitsplatz ansteuern.

Gruß, fiddi

Re: [gelöst]Zebra (ZPL) Drucker ansteuern

8. Februar 2012 15:48

Leider funktioniert das mit dem Textdrucker aber nicht.


Das funktioniert definitiv.
Ich setze das schon seit Jahren so mit Zebra- Druckern ein. Es gibt allerdings die kleine Windows- Gemeinheit, dass deine Textzeile nicht ganz am linken Rand des Reports beginnen darf, weil der Druckertreiber meint deine Daten noch interpretieren zu müssen (das ist seit WinXP Sp1 so) :mrgreen:

Gruß, fiddi

Re: [gelöst]Zebra (ZPL) Drucker ansteuern

8. Februar 2012 20:17

Ok, ich gebe mich geschlagen. Es funktioniert jetzt. :-)

Der Fehler mit dem "Generic/Text Only" war nicht der Report, sondern der falsche Druckertreiber.
Die oben erwähnte Text only Option des Seagull Treibers scheint nicht das gleiche zu tun, wie der Standard Windows "Generic / Text only" - Treiber an sich.

Die Lösung war also die Neuinstallation des Druckers unter Verwendung des Standard Windows Treibers.

Vielen Dank fiddi für den Schubs in die richtige Richtung.

fiddi hat geschrieben:
Leider funktioniert das mit dem Textdrucker aber nicht.


Das funktioniert definitiv.
Ich setze das schon seit Jahren so mit Zebra- Druckern ein. Es gibt allerdings die kleine Windows- Gemeinheit, dass deine Textzeile nicht ganz am linken Rand des Reports beginnen darf, weil der Druckertreiber meint deine Daten noch interpretieren zu müssen (das ist seit WinXP Sp1 so) :mrgreen:

Gruß, fiddi

Re: [gelöst]Zebra (ZPL) Drucker ansteuern

22. Mai 2013 11:26

Allgemeiner Hinweis (den erhielt ich heute von einem Endandwender).
Hier ist eine Möglichkeit, den Ausdruck bei der Entwicklung auch ohne viel Etikettenverschwendung in der Vorschau zu testen (fast 100% kompatibel :wink: )
Nachtrag für verwaisten Link:
https://www.zebra.com/ap/en/support-downloads/printer-software/zebra-designer-downloads.html
https://support.zebra.com/cpws/docs/ait/KA_files/9582/zebradesigner-pro-ug-en.pdf
https://www.zebra.com/content/dam/zebra/manuals/software/zebradesigner/zdesigner3essentials-ug-en.pdf

Re: [gelöst]Zebra (ZPL) Drucker ansteuern

21. Januar 2014 12:13

@ FalkoD

Bei deiner Lösung direkt aus der CU bekomme ich die Fehlermeldung: "Das Bestriebssystem kann nicht auf die Datei "\\Server\Sharename" (bei deinem Beispiel) zugreifen. Prüfen Sie Typ und Attribute der Datei."

vor dem öffnen des printports WRITEMODE(TRUE); einfügen
Code:
Printport.WRITEMODE(TRUE);
PrintPort.OPEN('\\Server\Sharename') oder PrintPort.OPEN('LPT1') etc.
PrintPort.WRITE(Hier ZPL-Sequenzen);
PrintPort.CLOSE


Michael