Warnung: Erstellen Sie immer zuerst ein gutes Backup, bevor Sie einen der folgenden Schritte ausfuehren.
Odoo bietet mehrere Standardoptionen zum Drucken von Zebra-Etiketten. In Studio koennen Sie daran nichts aendern, Sie koennen jedoch (eine Kopie des) Standardberichts anpassen. Dafuer brauchen Sie Grundkenntnisse des ZPL-Codes von Zebra-Etiketten - der ist gluecklicherweise nicht kompliziert.

Standardeinstellungen anpassen
Die Standardeinstellungen dieses Etiketts passen Sie ueber den Qweb-Tab des zugrunde liegenden Berichts an.
Aktivieren Sie zuerst den Developer-Modus. Geben Sie dann vom Startbildschirm aus /reports ein, um zu allen Berichten zu gelangen.

Waehlen Sie Settings > Technical > Actions > Reports und selektieren Sie den Bericht, den Sie bearbeiten moechten, in diesem Fall Product Label (ZPL).

Oben rechts finden Sie den Link zum Qweb-Teil dieses Berichts. Dieser Qweb-Code steuert das Layout des Etiketts.

Der ZPL-Etikettencode
Oeffnen Sie diese View, zeigt der Tab Architecture den Code, der zu Ihrer aktuellen Installation und den Modul-Optionen gehoert. Diesen Code koennen Sie hier bearbeiten.
Hinweis: Aenderungen am Standardlayout werden beim naechsten Update mit hoher Wahrscheinlichkeit ueberschrieben. Legen Sie daher eine inherited View an. Das liegt ausserhalb des Umfangs dieses Artikels, fuer Tests ist es aber praktisch, den Bericht auf diese Weise schnell anzupassen.
Gut zu wissen: Sie koennen eine Zeile mit einem Semikolon (;) auskommentieren. Alles nach einem Semikolon in einer Zeile gilt als Kommentar und wird vom ZPL-Interpreter ignoriert.
Erstellen Sie auch ein Backup des aktuellen Codes, damit Sie jederzeit zum Standard zurueckkehren koennen.
Der Code, den Sie sehen, kann zum Beispiel so aussehen:

<t t-name="stock.label_product_product_view">
<t t-foreach="quantity.items()" t-as="barcode_and_qty_by_product">
<t t-set="product" t-value="barcode_and_qty_by_product[0]"/>
<t t-foreach="barcode_and_qty_by_product[1]" t-as="barcode_and_qty">
<t t-set="barcode" t-value="barcode_and_qty[0]"/>
<t t-foreach="range(barcode_and_qty[1])" t-as="qty">
<t t-translation="off">
^XA
^FT100,80^A0N,40,30^FD<t t-esc="product.display_name"/>^FS
<t t-if="product.default_code and len(product.default_code) > 15">
^FT100,115^A0N,30,24^FD<t t-esc="product.default_code[:15]"/>^FS
^FT100,150^A0N,30,24^FD<t t-esc="product.default_code[15:30]"/>^FS
</t>
<t t-else="">
^FT100,150^A0N,30,24^FD<t t-esc="product.default_code"/>^FS
</t>
<t t-if="price_included">
^FO600,100,1
^CI28
<t t-if="product.currency_id.position == 'after'">
^A0N,66,48^FH^FD<t t-esc="product.list_price" t-options="{"widget": "float", "precision": 2}"/><t t-esc="product.currency_id.symbol"/>^FS
</t>
<t t-if="product.currency_id.position == 'before'">
^A0N,66,48^FH^FD<t t-esc="product.currency_id.symbol"/><t t-esc="product.list_price" t-options="{"widget": "float", "precision": 2}"/>^FS
</t>
</t>
<t t-if="barcode">
^FO100,160^BY3
^BCN,100,Y,N,N
^FD<t t-esc="barcode"/>^FS
</t>
^XZ
</t>
</t>
</t>
</t>
</t>
Erklaerung des Codes
Dieser Code druckt Etiketten fuer Produkte mit den zugehoerigen Barcodes und Mengen. Zeile fuer Zeile:
<t t-name="stock.label_product_product_view">: der Name des Templates fuer den Druck von Produktetiketten.<t t-foreach="quantity.items()" t-as="barcode_and_qty_by_product">: durchlaeuft jedes Element inquantityund weist esbarcode_and_qty_by_productzu, sodass Barcode und Menge je Produkt gedruckt werden.<t t-set="product" t-value="barcode_and_qty_by_product[0]"/>: setztproductauf das erste Element, das das Produkt darstellt.<t t-foreach="barcode_and_qty_by_product[1]" t-as="barcode_and_qty">: durchlaeuft die Listebarcode_and_qty_by_product[1], sodass mehrere Barcodes und Mengen fuer dasselbe Produkt moeglich sind.<t t-set="barcode" t-value="barcode_and_qty[0]"/>: setztbarcodeauf das erste Element, das den Barcode darstellt.<t t-foreach="range(barcode_and_qty[1])" t-as="qty">: durchlaeuft eine Zahlenfolge, deren Anzahl durch das zweite Element bestimmt wird, sodass derselbe Barcode und dieselbe Menge mehrfach gedruckt werden.<t t-translation="off">: schaltet die Uebersetzung fuer den Etiketteninhalt aus, sodass die Texte unveraendert bleiben.^XA: startet die ZPL-Befehle.^FT100,80^A0N,40,30^FD<t t-esc="product.display_name"/>^FS: legt Position und Schrift der ersten Zeile fest und druckt den Anzeigenamen des Produkts.<t t-if="product.default_code and len(product.default_code) > 15">: prueft, ob das Produkt eine interne Referenz mit mehr als 15 Zeichen hat.^FT100,115^A0N,30,24^FD<t t-esc="product.default_code[:15]"/>^FS: druckt die ersten 15 Zeichen der internen Referenz.^FT100,150^A0N,30,24^FD<t t-esc="product.default_code[15:30]"/>^FS: druckt die naechsten Zeichen der internen Referenz.<t t-else="">: die Alternative, wenn die Bedingung nicht zutrifft.^FT100,150^A0N,30,24^FD<t t-esc="product.default_code"/>^FS: druckt die vollstaendige interne Referenz.<t t-if="price_included">: prueft, ob der Preis enthalten ist.^FO600,100,1: legt die Position des Preises auf dem Etikett fest.^CI28: stellt die Zeichenkodierung auf UTF-8.<t t-if="product.currency_id.position == 'after'">: prueft, ob das Waehrungssymbol hinter dem Preis steht.^A0N,66,48^FH^FD...^FS: druckt den Preis und das Waehrungssymbol.<t t-if="product.currency_id.position == 'before'">: prueft, ob das Waehrungssymbol vor dem Preis steht.^A0N,66,48^FH^FD...^FS: druckt das Waehrungssymbol und den Preis.<t t-if="barcode">: prueft, ob ein Barcode vorhanden ist.^FO100,160^BY3: legt die Position und die Barcode-Parameter fest.^BCN,100,Y,N,N: legt Typ und Groesse des Barcodes fest.^FD<t t-esc="barcode"/>^FS: druckt den Barcode.^XZ: beendet die ZPL-Befehle.
Das Ergebnis ist ein Etikett mit Produktname, interner Referenz, Preis und Barcode fuer jedes Produkt.
Tipp: Lassen Sie einen KI-Assistenten mitdenken
Ein KI-Assistent eignet sich gut, um einen einzelnen Teil anzupassen. Auf die Frage “Wie verkleinere ich im folgenden Code die Schriftgroesse und den Barcode um 50%?” erhalten Sie Folgendes.
Die Schriftgroesse wird mit ^A0N festgelegt, gefolgt von den Groessenparametern; halbieren Sie diese Werte, um den Text kleiner zu machen. Die Barcode-Groesse wird mit ^BY3 festgelegt; senken Sie sie zum Beispiel auf 2,5, 2 oder 1,5, um den Barcode zu verkleinern.
Der angepasste Code, mit Schrift und Barcode jeweils 50% kleiner:
<t t-name="stock.label_product_product_view">
<t t-foreach="quantity.items()" t-as="barcode_and_qty_by_product">
<t t-set="product" t-value="barcode_and_qty_by_product[0]"/>
<t t-foreach="barcode_and_qty_by_product[1]" t-as="barcode_and_qty">
<t t-set="barcode" t-value="barcode_and_qty[0]"/>
<t t-foreach="range(barcode_and_qty[1])" t-as="qty">
<t t-translation="off">
^XA
^FT100,80^A0N,20,15^FD<t t-esc="product.display_name"/>^FS
<t t-if="product.default_code and len(product.default_code) > 15">
^FT100,115^A0N,15,12^FD<t t-esc="product.default_code[:15]"/>^FS
^FT100,150^A0N,15,12^FD<t t-esc="product.default_code[15:30]"/>^FS
</t>
<t t-else="">
^FT100,150^A0N,15,12^FD<t t-esc="product.default_code"/>^FS
</t>
<t t-if="price_included">
^FO600,100,1
^CI28
<t t-if="product.currency_id.position == 'after'">
^A0N,33,24^FH^FD<t t-esc="product.list_price" t-options="{"widget": "float", "precision": 2}"/><t t-esc="product.currency_id.symbol"/>^FS
</t>
<t t-if="product.currency_id.position == 'before'">
^A0N,33,24^FH^FD<t t-esc="product.currency_id.symbol"/><t t-esc="product.list_price" t-options="{"widget": "float", "precision": 2}"/>^FS
</t>
</t>
<t t-if="barcode">
^FO100,160^BY2
^BCN,50,Y,N,N
^FD<t t-esc="barcode"/>^FS
</t>
^XZ
</t>
</t>
</t>
</t>
</t>
Die Schriftparameter sind verringert (zum Beispiel 20, 15, 15, 12) und die Barcode-Parameter auf einen kleineren Barcode gesetzt (^BY2, ^BCN,50).
Brauchen Sie Unterstuetzung bei Ihren Odoo-Etiketten?
Kommen Sie beim Anpassen eines ZPL-Berichts nicht weiter? Buchen Sie einen Odoo-Scan oder nehmen Sie Kontakt auf - wir schauen gemeinsam mit Ihnen.