Format der Etiketten Definition

Allgemeines

Die Etikettendefinition funktioniert folgendermaßen: Die Syntax die verwendet wird entspricht Jinja2: https://jinja.palletsprojects.com/en/3.1.x/ Beim Etikettendruck passiert nun Folgendes:

  • Die Jinja Definition wird eingelesen und abgearbeitet

  • Die Felder aus dem Datenmodell (zB Produkt oder Variante) werden an den definierten Stellen eingesetzt. Optional geschieht hier auch eine erste Verarbeitung , wie die Länge zu begrenzen, oder Leerzeichen zu entfernen. Diese Verarbeitung kann über Python passieren oder mittels Jinja Filtern (https://jinja.palletsprojects.com/en/3.1.x/templates/) Siehe Beispiel unten.

  • Die Ausgabe ist eine JSON Datei, die an die Druckseite weitergegeben wird. Hier drinnen ist angegeben auf welchen Drucker die Etiketten ausgegeben werden sollen und die Anzahl der Etiketten (die noch verändert werden kann). Eines der Datenfelder in diese JSON Datei enthält auch die FDS Definition zum Layout und Druck der Etiketten. Dieses Format wird vom Hardware Service verstanden und in einen Windows Druckbefehl umgewandelt.

  • Das FDS Format enthält Angaben zu Papier Positionierung und Datenfelder Ersetzung sowie den FDS Layout Block zur Positionierung der Schriften und Etiketten Elemente.

  • Wenn Sie den Druck auf der Etiketten Druckseite bestätigen, wird das FDS Format mit Angaben des Layouts, der Etikettenanzahl, der Einzüge und Druckernamen an das Hardware Service abgeschickt.

  • Das Hardware Service liest das FDS Format aus und erstellt den Windows Druckbefehl, der an den gewählten Etikettendrucker geschickt wird.

Beispiele Jinja

Variablen Zuweisung und Datenverarbeitung

{%- set PRODUCT_PRICE = model.list_price %}

Die Klammern {% %} sind Jinja Code Blöcke. Sie weisen Jinja an je nach Keyword (hier set) Daten vorzubereiten oder abzuarbeiten. Das set Keyword setzt innerhalb von Jinja eine Variable. Hier wird PRODUCT_PRICE gesetzt. Die Variable model kommt aus dem Backend. model bezeichnet das onRetail Modell für das die Etiketten gedruckt werden, zB Produkt oder Variante. Das - nach {% bedeutet nur dass im Ausgabeformat keine Leerzeichen oder Vorschübe ausgegeben werden sollen durch diese Anweisung (Whitespace Control).

{%- set LABEL_REF_NAME = json.dumps(model.name) %}

json.dumps ist hier zusätzlich verwendet um den Wert als JSON Wert auszugeben und um Steuer-, Sonder- oder Anführungszeichen zu codieren. Das ist eine Python Funktion und wird daher mit den Klammern um model.name ausgeführt. model.name ist das Funktionsargument für json.dumps. (Siehe Python Funktionen, und json.dumps)

{%- set PRODUCT_NAME = json.dumps(model.name[0:30]) %}

In diesem Beispiel wird der Name abgeschnitten auf maximal 30 Zeichen. Python Notation für den String Bereich [0:30]

{%- set TAX_INFO = json.dumps(model.taxes_id.name|replace("Mehrwertsteuer ", "MwSt: ")) %}

Der Variable TAX_INFO wird hier die Steuerbezeichnung zugeordnet, mit dem Jinja Filter replace. Dieser ersetzt im Beispiel "Mehrwertsteuer " mit "Mwst " um die Ausgabe zu verkürzen.

{%- set GROUP_NAME -%}
  "ID: {{ model.id }}"
{%- endset %}

Eine mehrzeilige Anweisung mittels set, die der Variable GROUP_NAME alles zuweist, was in der Zeile 2 steht, inklusive der Anführungszeichen. Die doppelt geschwungenen Klammern referenzieren wieder Modelldaten. Wenn das Produkt für das die Etikette gedruckt werden soll beispielsweise die Id 24 hat, dann ist GROUP_NAME jetzt "ID: 24" zugeordnet.

Das gleiche funktioniert übrigens auch für den Block {%- set FDS -%} in dem die FDS Formatbefehle als Text der Jinja Variable FDS zugewiesen werden.

Kommentare

{#- =======   LABEL DRUCKER DATEN   ======= #}

Die Klammern {# und #} markieren Kommentare und ihr Inhalt wird von Jinja ignoriert.

Ausgabe und Variablen Zugriff

  {
    "Quantity": {{ LABEL_QUANTITY }},
    "FormName": {{ LABEL_REF_NAME }},
    "FormDesc": {{ PRODUCT_EAN }},
    "GroupName": {{ GROUP_NAME }},
    "LabelType": {{ LABEL_TYPE }},
    "UseGridLayout": true,
    "LabelPrinterData": {
      "CmdVer": 1,
      "Cmd": "PrintLabel",
      "PrinterSettings": {
        "PrinterName": {{ PRINTER_NAME }}
      },
  ...

Zeilen ohne Klammerausdrücke wie {% oder {{ werden von Jinja ohne Bearbeitung ausgegeben. In diesem Ausgabeschritt werden nur noch die Variablen in Doppelklammern {{ VARIABLE }} durch ihre zuvor zugewiesenen Werte ersetzt. Die Ausgabe sähe dann in Etwa so aus:

{
    "Quantity": 5,
    "FormName": "Produkt Etiketten",
    "FormDesc": "Beschreibung",
    "GroupName": "ID: 24",
    "LabelType": 99,
    "UseGridLayout": true,
    "LabelPrinterData": {
      "CmdVer": 1,
      "Cmd": "PrintLabel",
      "PrinterSettings": {
        "PrinterName": "Zebra t420 Etikettendrucker"
      },

Aufbau der Definition

Die Definition eines Etikettes teilt sich in 3 Teile.

Teil 1, Definitionen, Datenvorbereitung

Im ersten Teil einer Etikettendefinition werden die Daten aus dem Modell und der Druckername Jinja Variablen zugewiesen.

Teil 2, FDS Format (Positionierung Elemente)

Der zweite Teil steht unter {%- set FDS -%}

Hier finden sich die Positionierungen der Elemente, die auf dem Etikett angedruckt werden sollen.

; Artikeltext
   Font  ; 11.Arial
   Field ; 12 ; 1 ; 0 ; TEXT1

Der Text nach dem Strichpunkt ist ein Kommentar und dient nur dem besseren Verständnis. Font ist die Anweisung für die zu verwendende Schriftart. Die muss nur angegeben werden, wenn sie sich ändern soll. 11 ist hier die Schriftgröße. Field bedeutet, dass das weiter unten übergebene Feld in der FDS Definition als anzudruckender Text erscheint. (Weiter unten unter dem Abschnitt "Printdata" ist die Zeile "Text": {{ PRODUCT_NAME }}, dafür verantwortlich.

Text  ; 14 ; 41 ; 8 ; inkl.MWSt

Ein Text kann hier auch direkt angedruckt werden. In diesem Fall ist das "inkl. MWSt". Es wird keine Ersetzung mehr durchgeführt, weil das kein FDS Datenfeld mehr ist.

Die Zahlen nach dem Keyword (Font, Field oder Text) bedeuten:

  1. Abstand von oben in mm. Hier also 1,4 cm vom oberem Etikettenrand

  2. Abstand von links in mm. Hier 4,1 cm vom linken Rand

  3. derzeit ohne Bedeutung. Die 8 hat derzeit keine Auswirkung.

Teil 3, Layout Einstellungen, Datenübergabe

Im letzten Teil werden die FDS Daten übergeben und die generellen Abstände für den druckbaren FDS Bereich angegeben.

  • UseGridLayout ... true oder false, ob A4 Papier oder Einzeletiketten gedruckt werden sollen

  • RowCount ... Anzahl der Zeilen bei A4 Etiketten

  • ColCount ... Anzahl der Spalten bei A4 Etiketten

  • StartRow ... Abstand der Etikette vom oberen Druckrand in Zehntel mm

  • StartCol ... Abstand der Etikette vom linken Druckrand in Zehntel mm

Hier wird auch festgelegt, ob es sich um Einzeletiketten für den Etikettendrucker handelt, oder ob es A4 Etiketten für Klebepapier Etiketten sind.

{#- =======================   LABEL DRUCKER DATEN   ======================= #}
{
  "Quantity": {{ LABEL_QUANTITY }},
  "FormName": {{ LABEL_REF_NAME }},
  "FormDesc": {{ PRODUCT_EAN }},
  "GroupName": {{ GROUP_NAME }},
  "LabelType": {{ LABEL_TYPE }},
  "UseGridLayout": true,
  "LabelPrinterData": {
    "CmdVer": 1,
    "Cmd": "PrintLabel",
    "PrinterSettings": {
       "PrinterName": {{ PRINTER_NAME }}
    },
    "Layout": {
      "Style": 99,
      "RowCount": 9,
      "ColCount": 3,
      "StartRow": 100,
      "StartCol": 80,
      "Width": 630,
      "Height": 320
    },
    "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}}  
  }

Last updated

(c)2024 ETRON Softwareentwicklungs- und Vertriebs GmbH