← Terug naar help Handleidingen

Label-rapporten in Odoo aanpassen (ZPL, Zebra)

Odoo print Zebra-labels via een standaard ZPL-rapport. Studio helpt hier niet, maar je past de opmaak aan via de Qweb-view van het rapport (Settings/Technical/Actions/Reports, Product Label (ZPL)). Maak eerst een backup, werk bij voorkeur met een inherited view, en pas posities, lettergrootte (^A0N) en barcode (^BY) aan in de ZPL-code.

Bijgewerkt 7 juni 2026

Waarschuwing: maak altijd een goede backup voordat je een van de onderstaande stappen uitvoert.

Odoo kent verschillende standaardopties om Zebra-labels te printen. Je past ze niet aan via Studio, maar je kunt wel een kopie van het standaardrapport bewerken. Daarvoor heb je basiskennis van ZPL-code nodig - die valt gelukkig mee.

Printerdialoog in Odoo met labelformaten, waaronder ZPL Labels, voor het printen van productlabels

Standaardinstellingen aanpassen

De standaardinstellingen van dit label pas je aan via het Qweb-tabblad van het achterliggende rapport.

Zet eerst Developer mode aan. Typ vanaf het startscherm /reports om alle rapporten te openen.

Odoo-zoekbalk met /reports om naar het rapportenoverzicht te navigeren

Kies Settings / Technical / Actions / Reports en open het rapport dat je wilt bewerken - in dit geval Product Label (ZPL).

Lijst met Odoo-rapporten met Product Label (ZPL) gemarkeerd

Na het openen vind je rechtsboven de knop naar het Qweb-deel van het rapport. Die Qweb-code regelt de opmaak van het label.

Rapportformulier in Odoo met rechtsboven de knop QWeb Views naar de opmaakcode

ZPL-code van het label

Open je die view, dan zie je op het tabblad Architecture de code die hoort bij de huidige installatie en module-opties. Die code pas je hier aan.

Let op: wijzigingen aan de standaardlayout worden bij een volgende update hoogstwaarschijnlijk overschreven. Werk daarom bij voorkeur met een inherited view. Dat valt buiten de scope van dit artikel, maar voor testen is rechtstreeks aanpassen wel handig. Handig om te weten: je commentarieert een regel uit met een puntkomma (;). Alles na de puntkomma negeert de ZPL-interpreter.

Maak ook hier eerst een backup van de huidige code, zodat je altijd terug kunt naar de standaard.

Voorbeeld van de standaardcode

Qweb-view in Odoo met de ZPL-code van het Product Label-rapport op het tabblad Architecture

<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="{&quot;widget&quot;: &quot;float&quot;, &quot;precision&quot;: 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="{&quot;widget&quot;: &quot;float&quot;, &quot;precision&quot;: 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>

De code uitgelegd

Deze code drukt labels af voor producten met bijbehorende barcodes en hoeveelheden. Regel voor regel:

  1. <t t-name="stock.label_product_product_view">: de naam van het sjabloon voor productlabels.
  2. <t t-foreach="quantity.items()" t-as="barcode_and_qty_by_product">: een lus die door elk item in quantity itereert, zodat je barcode en hoeveelheid per product kunt afdrukken.
  3. <t t-set="product" t-value="barcode_and_qty_by_product[0]"/>: zet de variabele product op het eerste element, dat het product vertegenwoordigt.
  4. <t t-foreach="barcode_and_qty_by_product[1]" t-as="barcode_and_qty">: een lus over de lijst met barcodes en hoeveelheden, zodat je meerdere barcodes per product kunt afdrukken.
  5. <t t-set="barcode" t-value="barcode_and_qty[0]"/>: zet de variabele barcode op de barcode.
  6. <t t-foreach="range(barcode_and_qty[1])" t-as="qty">: een lus die de barcode net zo vaak afdrukt als de opgegeven hoeveelheid.
  7. <t t-translation="off">: schakelt vertaling uit, zodat de teksten ongewijzigd blijven.
  8. ^XA: start de ZPL-commando’s.
  9. ^FT100,80^A0N,40,30^FD<t t-esc="product.display_name"/>^FS: positie en lettertype van de eerste tekstregel; drukt de weergavenaam van het product af.
  10. <t t-if="product.default_code and len(product.default_code) > 15">: controleert of de standaardcode bestaat en langer is dan 15 tekens.
  11. ^FT100,115^A0N,30,24^FD<t t-esc="product.default_code[:15]"/>^FS: drukt de eerste 15 tekens van de standaardcode af.
  12. ^FT100,150^A0N,30,24^FD<t t-esc="product.default_code[15:30]"/>^FS: drukt het volgende deel van de standaardcode af.
  13. <t t-else="">: het alternatief als de standaardcode niet langer dan 15 tekens is.
  14. ^FT100,150^A0N,30,24^FD<t t-esc="product.default_code"/>^FS: drukt de volledige standaardcode af.
  15. <t t-if="price_included">: controleert of de prijs is inbegrepen.
  16. ^FO600,100,1: plaatst de prijs op het label.
  17. ^CI28: stelt de tekencodering in op UTF-8.
  18. <t t-if="product.currency_id.position == 'after'">: controleert of het valutasymbool achter de prijs staat.
  19. ^A0N,66,48^FH^FD...: drukt prijs en valutasymbool af.
  20. <t t-if="product.currency_id.position == 'before'">: controleert of het valutasymbool voor de prijs staat.
  21. ^A0N,66,48^FH^FD...: drukt valutasymbool en prijs af.
  22. <t t-if="barcode">: controleert of er een barcode is.
  23. ^FO100,160^BY3: plaatst de barcode en stelt de barcodeparameters in.
  24. ^BCN,100,Y,N,N: stelt het type en de grootte van de barcode in.
  25. ^FD<t t-esc="barcode"/>^FS: drukt de barcode af.
  26. ^XZ: beëindigt de ZPL-commando’s.

Het resultaat is een label met productnaam, standaardcode, prijs en barcode voor elk product met bijbehorende hoeveelheden en barcodes.

Tip: laat een AI-assistent meedenken

Een AI-assistent helpt prima om een onderdeel aan te passen. Op de vraag “hoe verklein ik in onderstaande code de lettergrootte en de barcode met 50%?” volgt dit antwoord:

De lettertypen worden gedefinieerd met ^A0N, gevolgd door de parameters voor de lettergrootte. Halveer die waarden om de tekst te verkleinen. De barcodegrootte stel je in met ^BY3; verlaag die naar bijvoorbeeld 2,5, 2 of 1,5 om de barcode te verkleinen.

De aangepaste code, met letter- en barcodegrootte met 50% verkleind:

<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="{&quot;widget&quot;: &quot;float&quot;, &quot;precision&quot;: 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="{&quot;widget&quot;: &quot;float&quot;, &quot;precision&quot;: 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>

De lettergrootteparameters zijn verlaagd (bijv. 20, 15, 15, 12) en de barcodeparameters naar een kleinere barcode (^BY2, ^BCN,50).

Hulp nodig bij je Zebra-labels?

Loop je vast bij het aanpassen van je ZPL-rapport of een inherited view? Plan een Odoo-scan of neem contact op - dan kijken we met je mee.

Loop je toch vast?

Live support vind je op /support, screenshare of een korte call met een senior consultant. Of mail [email protected].