Etikettendruck

Beim onRetail Labelprint mittels ETRON Hardware Service für das Ansprechen von lokalen Labelprintern werden alle Druckerarten unterstützt.

Im onRetail Backend findet man die Einstellungen dafür unter dem Menüpunkt „Einstellungen“ unter Label Print. Hier hat man die Möglichkeit, mehrere Labeldrucker anzulegen. Unter „Anlegen“ erscheint folgendes Formular:

Die allgemeinen Felder haben folgende Bedeutung:

Bezeichnung: Name des Labels im System

Modell: Auswahl der Datenquelle für das Befüllen des Labels mit Inhalten

IP-Adresse: Adresse des ETRON Hardware Service. Standardmäßig immer: http://localhost:7786/EtrHws/run

Port: Bleibt „0“.

Beim Feld Label Print Code wird JSON Code nach der Vorlage des ETRON Hardware Service eingetragen. Beispiele finden sich in Ihrem ETRON Hardware Service Ordner unter C:\HWS\PROG\Doku\PrintLabel Doku.txt (Laufwerk C: kann ggfs. abweichen, je nachdem welches Laufwerk bei der Installation gewählt wurde)

Ist das Etikett definiert, muss „Zum Druckmenü hinzufügen“ gewählt werden.

Beschreibung der Label Print Code JSON

Der Label Print Code legt fest, wie die gedruckte Etikette aussehen soll und welche Daten darauf beschrieben sein sollen.

Dieser Teil des Codes beschreibt, wie die Etikette auszusehen hat:

{
    „CmdVer“: 1,             // Version ist derzeit 1, bleibt unverändert
    „Cmd“: „PrintLabel“,     // Name des Befehls, muss PrintLabel heißen
    „PrinterSettings“: {
        „PrinterName“: „ZDesigner ZD420-300dpi ZPL“ 
        
        // Name des Druckernamens in Windows, 
        // dieser Name muss exakt der selbe 
        // wie in den Windows Druckereinstellungen sein.
    },
    „Layout“: {
        „Style“:11,
        „RowCount“:1,
        „ColCount“:1,
        „StartRow“:2,
        „StartCol“:0
    },
    
    [...]

Dieser Teil des Codes beschreibt, welche Daten auf dem Etikett gedruckt werden: (dieses Beispiel bezieht sich auf das Modell „Produktvorlage“):

„PrintData“: [{
    „Ean“: „model.barcodes“,                 // EAN Nummer
    „Plu“: „model.default_code“,             // Interne Artikelnummer
    „Text“: „model.name“,                    // Artikeltext
    „Text2“: „model.description_sale“        // Erweiterter Artikeltext
    „Price“: “model.list_price“,             // Verkaufspreis
    „CrossedPrice“: “model.regular_price“,   // Stattpreis, ist der Stattpreis 0 wird kein Wert auf das Etikett gedruckt.
    „ShowPrice“: true,                       // Gibt an, ob der Preis angezeigt werden soll
    „VatPrice“: true,                        // Gibt an, ob die Steuer angezeigt werden soll
    „VatRate“: “model.taxes_id“,             // Steuersatz
    „OrderNumber“: „model.product_code“,     // Auftragsnummer, wenn benötigt, bei reinen Artikeletiketten nicht notwendig
    „GpiTmg“: 200,                           // Standardwert, bitte belassen
    „GpiMeh“: „ML“,                          // Standardwert, bitte belassen
    „GpiBas“: 1000                           // Standardwert, bitte belassen.
}]

Beispiel Varianten-Etiketten.

Die Template Sprache Jinja wird hier verwendet.

Jinja Templating

{
  "CmdVer": 1,
  "Cmd": "PrintLabel",
  "PrinterSettings": {
    "PrinterName": "ZDesigner ZD420-300dpi ZPL"
  },
  "Layout": {
    "Style": 11,
    "RowCount": 1,
    "ColCount": 1,
    "StartRow": 2,
    "StartCol": 0
  },
  "PrintData": [
    {
      "Ean": "{{model.product_code}}",
      "Plu": "{{model.id}}",
      "Text": "{{model.name}}",
      "Text2":"
      {%- for attr in model.attribute_value_ids|sort(attribute="attribute_id.name",reverse=true) %}
          {%- if loop.index > 1 %}, {% endif %}
          {{-attr.attribute_id.name| truncate(200,end="")}}: {{attr.name}}
      {%- endfor %}",
      "Price": "{{model.list_price}}",
      "CrossedPrice": "{{model.regular_price}}",
      "ShowPrice": true,
      "VatPrice": true,
      "VatRate": "{{model.taxes_id.name|replace("Mehrwertsteuer ", "MwSt: ")}}",
      "GpiTmg": 200,
      "GpiMeh": "ML",
      "GpiBas": 1000
    }
  ]
}

Anmerkungen:

Das Format der Etikette ist JSON. Im JSON Format dürfen keine Kommentare eingefügt sein, ansonsten ist es ungültig.

Etiketten für Hauptprodukte werden in der Etikettendefinition auf das Modell „product.template“ gelegt, die für Variantenprodukte auf das Modell „product.product“.

Nach Erstellen der Etikettendefinition muss der Aktionsbutton „Zum Druckmenü hinzufügen“ aktiviert werden, damit die Etikettenvariante nach Auswahl von Artikeln in der Listenansicht im Drucken Dropdown sichtbar wird.

„Style“: 11, bezieht sich auf ein vordefiniertes Etikettenformat für die Artikelauszeichnung.

for attr in model.attribute_value_ids ist die Schleife über die Attributwerte der Variante.

|sort(attribute=„attribute_id.name“,reverse=true) Die Pipe „|“ ermöglicht es Datenfelder mit verschiedenen von Jinja definierten Helfer Funktionen weiter zu bearbeiten. Hier wird die Liste der Attribute nach ihren Namen in umgekehrter Reihenfolge sortiert.

, Ein Beistrich soll vor das Attribut nur gesetzt werden, wenn es nicht das erste ist.

| truncate(200,end=„“) Mit dem Helfer „truncate“ können zu lange Texte abgeschnitten werden. Hier ist die maximale Länge 200 Zeichen.

|replace(„Mehrwertsteuer “, „MwSt: “) Der „replace“ Helfer wird hier verwendet, um das ausgegebene Wort „Mehrwertsteuer “ auf dem Etikett abzukürzen.

Bei den Jinja Variablen und Codeblöcken kann man die Leerzeichen davor aufsaugen indem man ein Minus nach den öffnenden Klammern/dem ersten Prozentzeichen anhängt.

{{- variable }} anstatt {{variable}}
und
{%- etc... %} anstatt {% etc ... %}

FDS Template:

{#- ======================   LEGENDE   ======================= #}
{#-
  Allgemeine Einstellungen:
Drucker Name (wie in Windows)         {{ PRINTER_NAME }}
Nummer der Etikettenvorlage           {{ LABEL_TEMPLATE_NUMBER }}

  Druckbildschirm Info:
Etikettentyp                          {{ LABEL_TYPE }}
Farbige Info Name der Bestellung      {{ GROUP_NAME }}
Label Referenz Name                   {{ LABEL_REF_NAME }}

  Label Daten:
Label Anzahl pro Bestellzeile         {{ ORDER_QUANTITY }}
Produkt Varianten Attribute           {{ VARIANT_ATTRIBUTES }}
Produkt Steuer                        {{ TAX_INFO }}
Produkt (Varianten) Preis             {{ PRODUCT_PRICE }}
Durchgestrichener Statt Preis         {{ CROSSED_PRICE }}
Produkt Barcode                       {{ PRODUCT_EAN }}
Produkt Id onRetail                   {{ PRODUCT_PLU }}
(durch 0 ersetzen falls kein Statt Preis gewünscht ist)
#}


{#- ====================   DEFINITIONEN   ===================== #}
{%- set PRINTER_NAME = json.dumps("ZEBRA GK420t") %}
{%- set LABEL_TEMPLATE_NUMBER = 99 %}
{%- set LABEL_TYPE = json.dumps("Artikel") %}
{%- set GROUP_NAME -%}
"ID: {{ model.id }}"
{%- endset %}
{%- set LABEL_QUANTITY = 1 %}
{%- set TAX_INFO = json.dumps(model.taxes_id.name|replace("Mehrwertsteuer ", "MwSt: ")) %}
{%- set PRODUCT_PRICE = model.list_price %}
{%- set LABEL_REF_NAME = json.dumps(model.name) %}
{%- set PRODUCT_NAME = json.dumps(model.name[0:30]) %}
{%- set PRODUCT_NAME2 = json.dumps(model.name[30:62]) %}
{%- set HERSTELLER = json.dumps(model.manufacturer_id.name) %}
{%- set CROSSED_PRICE = json.dumps(model.regular_price or 0) %}
{%- set PRODUCT_EAN = json.dumps(model.product_code) %}
{%- set PRODUCT_PLU = json.dumps("%d"%model.id) %}
{%- set FDS -%}
ID;ETT01;3;Benutzerdefiniertes Etikett
       ; ID ; OPT ; TEXT               ; FORM ; FORM SIZE
FormAsgn ; Z  ; 0   ; Benutzerdefiniert  ; 99   ; Benutzerdefiniert

; Seite
Head ; FORM99 ; 57x24 Preis Rechts
 ; EAN
 Font   ; 36.EAN-13B Half Height
 Field ; 2 ; 1 ; 0 ; EANFCD ; FONTBOX{108,70}

 ; Artikeltext
 Font  ; 7.Arial Bold
 Field ; 7 ; 1 ; 0 ; TEXT1
 Field ; 10 ; 1 ; 0 ; TEXT2

 ; Firmeninfo
 If ; IsFmi
    Font  ; 7.Arial
    Field ; 12.5 ; 0 ; 0 ; FMI
 Else
    Line ; 19 ; 0 ; 19 ; 51 ; 3
 End

 ; Box fr Preis
 Line ; 19 ; 26 ; 23 ; 26 ; 3
 Line ; 23 ; 51 ;19.2 ; 51 ; 7
 Line ; 23 ; 26 ; 23 ; 51 ; 7

 ; Preis
 Font ; 10.Arial Bold
 Field ; 18 ; 27 ; 0 ; LDWSYM
 Font ; 10.Arial Black
 Field ; 18 ; 47 ; 0 ; vkp ; SAYRIGHT
 Font ; 6.Arial
 Text  ; 14 ; 1 ; 8 ;
 Text  ; 14 ; 35 ; 8 ; inkl.MWSt
 Font ; 8.Arial Bold
Field ; 18 ; 10 ; 0 ;  ; sayright


 ; Info Ohne Mwst / Warengruppe / BeNr / Stattpreis
 Font ; 9.Arial Bold
 If ; IsStp
    Field ; 16 ; 0 ; 0 ; stpw
    Field ; 16 ; 24 ; 0 ; ; SAYRIGHT
    Line ; 21 ; 15 ; 17 ; 24 ; 3
    Line ; 21 ; 24 ; 17 ; 15 ; 2
 Else
    Field ; 16 ; 0 ; 0 ; INFO1
    Font ; 7.Arial
    Field ; 16 ; 25 ; 0 ; Info1 ; SAYRIGHT
       End

 ; Info Warengruppe / Bestellnummer (Kundenbezogen)
 Font  ; 0.Arial Bold
 Field ; 1 ; 33 ; 0 ; BENR
 Field ; 3.5 ; 33 ; 0 ; INFO4

 ; Grӧen Info bei Grӧenartikel (Kundenbezogen)
 Field ; 7 ; 40 ; 0 ; INFO5
 Field ; 10 ; 40 ; 0 ; INFO6

 ;BITMAP ; 12 ; 3 ; 16 ; 8 ; BlueCode.jpg ;
{%- endset %}
{%- set FDSDATA = json.dumps(FDS) -%}
{#- =======================   LABEL DRUCKER DATEN   ======================= #}
{
"Quantity": {{ LABEL_QUANTITY }},
"FormName": {{ LABEL_REF_NAME }},
"FormDesc": {{ PRODUCT_EAN }},
"GroupName": {{ GROUP_NAME }},
"LabelType": {{ LABEL_TYPE }},
"LabelPrinterData": {
  "CmdVer": 1,
  "Cmd": "PrintLabel",
  "PrinterSettings": {
     "PrinterName": {{ PRINTER_NAME }}
  },
  "Layout": {
    "Style": {{ LABEL_TEMPLATE_NUMBER }},
    "RowCount": 1,
    "ColCount": 1,
    "StartRow": 5,
    "StartCol": 2
  },
  "PrintData": [{
    "Ean": {{ PRODUCT_EAN }},
    "Plu": {{ PRODUCT_PLU }},
    "Text": {{ PRODUCT_NAME }},
    "Text2": {{ PRODUCT_NAME2 }},
    "Price": {{ PRODUCT_PRICE }},
    "CrossedPrice": {{ CROSSED_PRICE }},
    "ShowPrice": true,
    "VatPrice": true,
    "VatRate": {{ TAX_INFO }},
    "GpiTmg": 200,
    "GpiMeh": "ML",
    "GpiBas": 1000
    }],"FdsData":{{FDSDATA}}
  }
}

{#- =======================   LABEL DRUCKER DATEN ENDE