This is an old revision of the document!
Etikettenvorlagen
Table of Contents
Etikettenvorlagen (Label Templates) für COBI.wms sind HTML-Dateien, die spezielle Platzhalterwerte enthalten können, welche von COBI.wms interpretiert werden. Diese Platzhalter werden über eine einfache „Suchen-und-Ersetzen“-Logik durch die jeweiligen Werte ersetzt, bevor das resultierende HTML zur grafischen Darstellung an das Android-System übergeben wird.
Unterstützte Platzhalterwerte
Die folgenden Abschnitte beschreiben die verschiedenen Arten von Platzhaltern, die in COBI.wms-Etikettenvorlagen unterstützt werden.
Einfache Platzhalter
Die Platzhalter müssen innerhalb des HTML-Dokuments im folgenden Format verwendet werden:
@platzhalterName@ — ein @-Symbol vor und nach dem Namen, ohne Leerzeichen.
| Dokumentebene | |
|---|---|
docNumber | Belegnummer |
docForeignNumber | BP-Referenz des Belegs |
docDate | Buchungsdatum |
docDueDate | Fälligkeitsdatum |
docReference | Referenz 2 (falls vorhanden) |
docComments | Bemerkungsfeld |
| Geschäftspartner des Belegs | |
businessPartnerCode | Code des Geschäftspartners |
businessPartnerName | Name des Geschäftspartners |
| Positionsebene | |
lineNumber | Positionsnummer beginnend bei null |
lineItemName | Beschreibung (enthält i. d. R. Artikelname) |
lineFreeText | Freitext |
lineUnitName | ME-Bezeichnung wie in der Belegposition |
lineBPCatalogCode | Katalognummer des Geschäftspartners |
lineBPCatalogName | Katalogbeschreibung des Geschäftspartners |
| Bezogen auf Mengeneinheit der Position | |
unitCode | ME-Code (falls nicht „Manual“) |
unitName | ME-Bezeichnung (ignoriert manuelle Eingaben) |
unitQtyInBaseUnit | Menge in Basis-ME |
| Artikelebene | |
itemCode | Artikelnummer |
itemName | Artikelname |
itemForeignName | Fremdbezeichnung / Alt. Artikelnummer |
itemBarcode | Primärer Barcode (Text) |
itemBarcodeGTIN12 | Barcode in GTIN-12-Format |
itemBarcodeGTIN13 | Barcode in GTIN-13-Format |
itemBarcodeGTIN14 | Barcode in GTIN-14-Format |
itemSupplierCatalogNumber | Lieferantenkatalognummer |
itemAdditionalIdentifier | Zusatzkennung (DB-Feld SWW) |
itemGroupName | Artikelgruppenname |
itemPurchasePackQty | Anzahl Artikel pro Einkaufspackung |
itemSalesPackQty | Anzahl Artikel pro Verkaufspackung |
itemPurchaseUnitQty | Bestand pro Einkaufs-ME |
itemSalesUnitQty | Bestand pro Verkaufs-ME |
itemPurchaseUnitName | Name der Einkaufs-ME |
itemSalesUnitName | Name der Verkaufs-ME |
itemStockUnitName | Name der Lager-ME |
itemPurchaseLength | Länge der Einkaufs-ME |
itemPurchaseWidth | Breite der Einkaufs-ME |
itemPurchaseHeight | Höhe der Einkaufs-ME |
itemPurchaseLengthUnit | Maßeinheit für Länge Einkauf |
itemPurchaseWidthUnit | Maßeinheit für Breite Einkauf |
itemPurchaseHeightUnit | Maßeinheit für Höhe Einkauf |
itemSalesLength | Länge der Verkaufs-ME |
itemSalesWidth | Breite der Verkaufs-ME |
itemSalesHeight | Höhe der Verkaufs-ME |
itemSalesLengthUnit | Maßeinheit für Länge Verkauf |
itemSalesWidthUnit | Maßeinheit für Breite Verkauf |
itemSalesHeightUnit | Maßeinheit für Höhe Verkauf |
itemPurchaseUnitContents | Inhalt der Einkaufs-ME in Basis-ME |
itemSalesUnitContents | Inhalt der Verkaufs-ME in Basis-ME |
itemStockUnitContents | Inhalt der Lager-ME in Basis-ME |
| Chargenebene | |
batchNumber | Chargennummer |
batchProductionDate | Produktionsdatum |
batchProductionGS1 | Produktionsdatum im GS1-Format (YYMMDD) |
batchExpiryDate | Ablaufdatum |
batchExpiryGS1 | Ablaufdatum im GS1-Format (YYMMDD) |
batchAttr1 | Chargenattribut 1 |
batchAttr2 | Chargenattribut 2 |
batchDetails | Chargenvermerk |
| Seriennummernebene | |
serialNumber | Seriennummer |
serialMnfNumber | Herstellerseriennummer |
serialLotNumber | Losnummer |
serialDetails | Seriennummerdetails |
| Lagerebene | |
warehouseCode | Lagercode |
warehouseName | Lagername |
| Lagerplatzebene | |
locationCode | Lagerplatzcode |
locationBarcode | Lagerplatzbarcode |
| Kontextabhängig | |
quantity | Menge der Auswahl (Position/Charge usw.) |
Platzhalter auf Dokument- und Positionsebene sind nur gültig, wenn das Etikett aus einer Belegposition heraus gedruckt wird.
Die itemBarcodeGTIN…-Platzhalter stellen sicher,
dass die Barcode-Länge dem jeweiligen GTIN-Standard entspricht,
oder setzen ggf. Nullen ein, um weiterhin ein gültiges Format zu erzeugen.
Artikelpreise
Preise können über den Platzhalter
@itemPrice(x)@
aus Preislisten ausgegeben werden.
Format-Beispiele:
5.00 USD(bzw. geräteeinstellungabhängig5,00 USD)
Weitere Varianten:
| Platzhalter | Beschreibung |
|---|---|
itemPriceRawValue(x) | Unformatiert (z. B. 5.5) |
itemPriceFormattedValue(x) | Formatiert nach Gerätesprache |
itemPriceCurrencyCode(x) | 3-stelliger Währungscode |
itemPriceCurrencySymbol(x) | Währungssymbol (z. B. €) |
Barcodegrafiken
Spezial-Platzhalter zur Anzeige tatsächlicher Barcodes:
@barcode(FORMAT,BREITE,HÖHE,INHALT)@
Unterstützte FORMATE:
- CODEBAR
- CODE_39 / CODE_93 / CODE_128
- DATA_MATRIX
- EAN_8 / EAN_13
- QR_CODE
- UPC_A / UPC_E
Beispiel:
@barcode(EAN_13,100,50,@itemBarcodeGTIN13@)@
GS1-Unterstützung
GS1-Barcodes erfordern als ersten Charakter:
|
Beispiel:
@barcode(CODE_128,100,75,|01@itemBarcodeGTIN14@10@batchNumber@|)@
Präzisere HTML-Kontrolle
Alternativ:
* @barcodeSrc(…)@ → nur src-Attribut
* @barcodeBase64(…)@ → nur Base64-Daten
Benutzer-Eingaben
Eingabeplatzhalter:
@input(NAME)@
Mit Anzeigename:
@input(quantity[Anzahl Kisten])@
Mit Auswahlwerten:
@input(Currency;EUR,USD,GBP)@
Datums-Platzhalter
@date(FORMAT)@
Beispiele:
@date(yyyy-MM-dd)@ → 2025-10-24 |
@date(dd.MM.yyyy)@ → 24.10.2025 |
Datums-Umformatierung
@dateReformat(DATUM|VON_FORMAT|ZU_FORMAT)@
Beispiel:
@dateReformat(@batchExpiryGS1@|yyMMdd|dd.MM.yyyy)@
JavaScript-Integration
Aktivierung:
@useJavaScript@
Druckersteuerung erfolgt dann über JS:
cobiwms.print()
Zugriff auf Platzhalterwerte:
cobiwms.get("itemName")
Beispielvorlagen
Zwei vollständige Beispiel-HTML-Dateien:
Datei 1
Einfaches Etikett mit Barcode, Preis & Zeitstempel.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <style> @page { /* You can use width/height, or a standardized size. */ /* For example, the following two are equivalent: */ /* size: 148mm 105mm; */ /* size: A6 landscape; */ size: A6 landscape; /* Don't change, use the container padding below. */ margin: 0; padding: 0; } body { /* We could use 100vw/100vh to cover the whole size declared with @page, but this doesn't work with ZPL printing, so repeat the page dimensions explicitly. Note that we can't use standardized sizes like A6 here. The height should be minimally reduced to make sure the HTML renderer doesn't start a second page. */ width: 148mm; height: 104mm; /* Don't change, use the container below. */ margin: 0; padding: 0; /* Useful to diagnose dimension issues. */ outline: 0.5mm solid black; outline-offset: -0.5mm; } .container { /* Don't change. */ box-sizing: border-box; position: relative; width: 100%; height: 100%; font-family: sans-serif; font-size: 18pt; /* Global padding from the edges. */ padding: 3mm; } </style> </head> <body> <div class="container"> <div style="float: left;"> <b>Code:</b> @itemCode@ </div> <div style="float: right;"> <b>Price:</b> @itemPriceCurrencySymbol(1)@ @itemPriceFormattedValue(1)@ </div> <div style="text-align: center; margin-top: 24mm;"> @itemName@ </div> <div style="text-align: center; margin-top: 2mm;"> @barcode(CODE_128,150,75,|90@itemCode@|10@batchNumber@)@ </div> <div style="text-align: center; margin-top: 1mm; font-size: 0.8em;"> (90)@itemCode@(10)@batchNumber@ </div> <div style="position: absolute; left: 0; bottom: 0; padding: inherit;"> <b>@date(yyyy-MM-dd HH:mm)@</b> </div> <div style="position: absolute; right: 0; bottom: 0; padding: inherit;"> <b>COBI.wms Sample Label</b> </div> </div> </body> </html>
Datei 2
Beispiel mit Benutzereingaben & JavaScript.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <style> @page { /* You can use width/height, or a standardized size. */ /* For example, the following two are equivalent: */ /* size: 148mm 105mm; */ /* size: A6 landscape; */ size: A6 landscape; /* Don't change, use the container padding below. */ margin: 0; padding: 0; } body { /* We could use 100vw/100vh to cover the whole size declared with @page, but this doesn't work with ZPL printing, so repeat the page dimensions explicitly. Note that we can't use standardized sizes like A6 here. The height should be minimally reduced to make sure the HTML renderer doesn't start a second page. */ width: 148mm; height: 104mm; /* Don't change, use the container below. */ margin: 0; padding: 0; /* Useful to diagnose dimension issues. */ outline: 0.5mm solid black; outline-offset: -0.5mm; } .container { /* Don't change. */ box-sizing: border-box; position: relative; width: 100%; height: 100%; font-family: sans-serif; font-size: 18pt; /* Global padding from the edges. */ padding: 3mm; } </style> <!-- Input definitions: @input(text[Insert value])@ @input(selection[Select value];Value 1,Value 2,Value 3)@ @input(codeFormat[Barcode type];CODE_128,DATA_MATRIX,QR_CODE)@ --> <script> // @useJavaScript@ window.onload = function() { var insert = document.getElementById('js-insert') insert.textContent = "Hello World!" cobiwms.print() } </script> </head> <body> <div class="container"> <div style="float: left;"> <b>JS-Insert:</b> <span id="js-insert"></span> </div> <div style="float: right;"> <b>Selection:</b> @input(selection)@ </div> <div style="text-align: center; margin-top: 24mm;"> @itemName@ </div> <div style="text-align: center; margin-top: 2mm;"> @barcode(@input(codeFormat)@,150,75,|90@itemCode@|10@batchNumber@)@ </div> <div style="text-align: center; margin-top: 1mm; font-size: 0.8em;"> (90)@itemCode@(10)@batchNumber@ </div> <div style="position: absolute; left: 0; bottom: 0; padding: inherit;"> <b>Input:</b> @input(text)@ </div> <div style="position: absolute; right: 0; bottom: 0; padding: inherit;"> <b>COBI.wms Sample Label</b> </div> </div> </body> </html>