Was sind Funktionsattribute?
In JTL-Wawi werden Funktionsattribute zentral unter Menü Artikel → Attribute angelegt (Bereich „Artikel" → Attribut anlegen → Funktionsattribut) und anschließend je Artikel mit einem Wert befüllt. BIS ERP liest beim JTL-Sync die Attribute mit dem Präfix bis_ aus und übernimmt sie automatisch in die ERP- und POS-Datenmodelle.
Vorteile:
- Bidirektional. Gebinde, Preise und Pfand lassen sich in JTL oder direkt in BIS ERP pflegen — der Sync gleicht beide Seiten ab und schreibt Änderungen aus BIS ERP als Funktionsattribute nach JTL zurück.
- Keine Doppelpflege. Keine zusätzlichen Stücklisten-Artikel, keine eigenen Pfand-Artikel-Stammsätze, keine Import-/Exportdateien.
- Automatischer Abgleich. Änderungen erscheinen beim nächsten Sync auf der jeweils anderen Seite — in BIS ERP, der Kasse und JTL.
Konvention
Alle Attribute beginnen mit bis_. Werte werden in tArtikelAttributSprache für Sprache 0 und 1 gelesen. Umlaute werden automatisch von Windows-1252 auf UTF-8 konvertiert.
Gebinde / Verpackungseinheiten
Verpackungseinheiten (Kiste, Träger, Palette) am Artikel pflegen — mit Menge, EAN, Preis und optional Pfand. BIS ERP legt daraus Verpackungseinheiten und Staffelpreise an.
Nummerierung: bis_gebinde_1_*, bis_gebinde_2_*, … — beliebig viele Gebinde pro Artikel.
Pflichtfelder
| Attribut | Typ | Beispiel | Was es bewirkt |
bis_gebinde_1_name | Text | Kiste | Anzeigename der Verpackungseinheit. Erscheint auf Bon, Rechnung, Lieferschein und Kundendisplay. |
bis_gebinde_1_menge | Ganzzahl | 20 | Anzahl Einzelartikel pro Gebinde (z. B. 20 Flaschen pro Kiste). Auch als Staffelpreis-Mindestmenge. |
bis_gebinde_1_ean | Text | 4001234567899 | EAN/Barcode des Gebindes. Die POS-Kasse erkennt die Verpackungseinheit anhand dieser EAN beim Scannen. |
bis_gebinde_1_preis | Dezimal | 22.00 | Verkaufspreis des Gebindes. Brutto oder Netto je nach preistyp — Umrechnung erfolgt automatisch anhand der Steuerklasse. |
Optionale Felder
| Attribut | Typ | Beispiel | Was es bewirkt |
bis_gebinde_1_preistyp | Text | brutto / netto | Steuert, ob die Preise als Brutto- oder Nettowert interpretiert werden. Standard: brutto. |
bis_gebinde_1_preis_{kundengruppe} | Dezimal | bis_gebinde_1_preis_gastro = 16.50 | Preis für genau eine Kundengruppe. {kundengruppe} = Name der Kundengruppe in Kleinschreibung, Leerzeichen werden zu _ (z. B. b2b_staffel_1). Kundengruppen ohne eigenes Attribut bekommen den Global-Preis. |
bis_gebinde_1_preis_b2b | Dezimal | 18.00 | Sonderfall von preis_{kundengruppe}: Preis für die Kundengruppe „B2B". Gilt nur für diese eine Gruppe — andere B2B-Gruppen (z. B. „B2B Staffel 1") bekommen den Global-Preis, sofern kein eigenes Attribut gesetzt ist. |
bis_gebinde_1_sonderpreis | Dezimal | 19.99 | Zeitlich begrenzter Aktionspreis (global). Brutto/Netto wie preis. |
bis_gebinde_1_sonderpreis_von / _bis | Datum | 2026-06-01 | Zeitfenster des Sonderpreises (YYYY-MM-DD). Leer = ab sofort bzw. unbefristet. |
bis_gebinde_1_sonderpreis_{kundengruppe} | Dezimal | — | Aktionspreis für eine bestimmte Kundengruppe, mit eigenem Zeitfenster. sonderpreis_b2b = Aktionspreis der Gruppe „B2B". |
bis_gebinde_1_kundengruppe | Text | — | Veraltet. Wird nicht mehr ausgewertet — stattdessen preis_{kundengruppe} verwenden. |
Preismodell: Global + pro Kundengruppe
Der Gebinde-Preis wird je Kunde aufgelöst: 1. der Preis seiner Kundengruppe (preis_{kundengruppe}, z. B. preis_b2b für die Gruppe „B2B"), sonst 2. der Global-Preis (preis). Es gibt keinen pauschalen „B2B-Preis für alle B2B-Gruppen" — jede Gruppe bekommt entweder ihren eigenen Preis oder den Global-Preis. Bearbeitbar direkt in BIS ERP über den Preise-Tab des Artikels (Button „Preise bearbeiten" am Gebinde).
Pfand am Basisartikel
Markiert einen Artikel als Pfandartikel (z. B. Glasflasche) und definiert den Pfandwert. BIS ERP schreibt das in articles.depositType und articles.depositAmount. Beim POS-Verkauf erscheint Pfand automatisch als eigene Position auf dem Bon.
| Attribut | Typ | Werte | Was es bewirkt |
bis_pfand_typ |
Text |
EINWEG / MEHRWEG / KEIN |
Pfandart. EINWEG = klassisches Einwegpfand (i.d.R. 0,25 €). MEHRWEG = Mehrwegflasche (i.d.R. 0,08–0,15 €). KEIN oder leer = kein Pfand. |
bis_pfand_betrag |
Dezimal |
z. B. 0.25 |
Flaschenpfand pro Stück. Brutto bei B2C-Kundengruppen, Netto bei B2B-Kundengruppen. |
bis_kistenpfand_betrag |
Dezimal |
z. B. 1.50 |
Pfand für die Kiste selbst (nicht pro Flasche). Sync läuft only-if-empty — manuelle Pflege im BIS-ERP-UI hat Vorrang. |
bis_kiste_ab |
Ganzzahl |
z. B. 12 |
Schwelle: ab wieviel Flaschen die POS-Kasse automatisch eine Kistenpfand-Position bucht. Sync only-if-empty. |
B2C vs. B2B
Der Nominalwert (z. B. 0,25 €) bleibt identisch — beim Kassenverkauf entscheidet die Kundengruppe des aktiven Kunden: B2C-Kunden bekommen den Wert als Brutto (MwSt enthalten), B2B-Kunden als Netto (MwSt kommt drauf). Auf dem Bon, der Rechnung und dem Lieferschein erscheint Pfand immer als eigene Position.
Master-Schalter Kistenautomatik
Die Kistenautomatik fügt beim Verkauf von 12er-Vielfachen automatisch eine Kasten-Pfand-Position zum Bon hinzu — ohne dass der Kassierer die Kiste extra scannen muss.
Im Kundencenter unter /my/jtl-integration → Sektion „Kistenpfand-Automatik" kann jeder Tenant diesen Automatismus zentral aktivieren oder deaktivieren:
- Aktiviert (Standard): Verkauft der Kassierer z. B. 24 Flaschen, erscheint zusätzlich automatisch eine Position „Kistenpfand" mit dem in
bis_kistenpfand_betrag hinterlegten Wert.
- Deaktiviert: Keine automatische Kasten-Pfand-Position mehr. Flaschenpfand aus
bis_pfand_* bleibt davon unberührt und wird weiterhin pro Flasche berechnet.
Wann ausschalten?
Wenn Sie ausschließlich lose Flaschen verkaufen, keine Kistenpfand-Logik benötigen oder die Kasten-Position lieber manuell scannen wollen.
Die Einstellung wird automatisch an alle angebundenen POS-Kassen verteilt. Eine Änderung im Kundencenter wirkt beim nächsten Sync der POS-App.
Kundengruppen- & Sonderpreise am Basisartikel
Für den normalen Artikel (nicht das Gebinde) brauchen Sie kein Funktionsattribut. B2B-/Kundengruppen-Preise, Sonderpreise (Aktionspreise), Staffelpreise und individuelle Kundenpreise pflegen Sie ganz normal in JTL-Wawi an den Standard-Preisfeldern des Artikels. Der Connector liest sie beim JTL-Sync automatisch aus den nativen JTL-Preistabellen aus.
Wichtig
bis_*-Funktionsattribute brauchen Sie nur für Gebinde und Pfand. B2B-Preise und Sonderpreise des Basisartikels kommen aus JTLs eigener Preisverwaltung — kein Attribut nötig.
Wo wird in JTL gepflegt?
- Kundengruppen-Preis (z. B. B2B): Artikel öffnen → Reiter „Preise / VK-Preise" → Preis je Kundengruppe hinterlegen.
- Sonderpreis (Aktionspreis): Artikel → „Preise" → Sonderpreis mit Gültigkeits-Zeitraum (optional je Kundengruppe).
- Staffelpreis: Artikel → „Preise" → Staffel mit „ab Menge".
- Individueller Kundenpreis: kundenspezifischer Artikelpreis (JTL-Preis mit Kundenbezug).
Preisfindung an der Kasse
Sind mehrere Preise gültig, gewinnt der speziellste — in dieser Reihenfolge:
Individueller Kundenpreis
→ Kundengruppen-Preis (z. B. B2B)
→ Staffelpreis (ab Menge)
→ Sonderpreis (im Gültigkeitszeitraum)
→ Standardpreis
Die Kundengruppe des aktiven Kunden steuert zusätzlich, ob Preise und Pfand als Brutto (B2C) oder Netto (B2B) erscheinen.
| JTL-Quelle (nativ) | Inhalt | → BIS ERP / POS |
tArtikel.fVKNetto | Standard-Verkaufspreis | Basispreis |
tPreis + tPreisDetail (ab Menge 0) | Preis je Kundengruppe (z. B. B2B) | productCustomerGroupPrices |
tPreisDetail (ab Menge > 0) | Staffelpreis | productTierPrices |
tArtikelSonderpreis + tSonderpreise | Sonderpreis mit Zeitraum | Sonderpreis-Felder |
tPreis mit Kundenbezug | Individueller Kundenpreis | product_customer_prices |
Aktionen: „Kaufe X, erhalte Y gratis" ab POS 1.1.13
Aktionen wie 1+1, 3+1 oder „kaufe Artikel A, erhalte Artikel B gratis" pflegen Sie am Auslöser-Artikel (dem Artikel, den der Kunde kauft) über bis_promo_*-Funktionsattribute. Ein Promo pro Artikel — keine Nummerierung. Der Aktionsname entsteht automatisch als „JTL-Aktion {SKU}".
| Funktionsattribut | Typ | Pflicht | Bedeutung |
bis_promo_buy | Ganzzahl | ja (≥ 1) | N — zu kaufende Menge (z. B. 3 bei „3+1") |
bis_promo_get | Ganzzahl | ja (≥ 1) | M — Anzahl Gratis-Einheiten (z. B. 1 bei „3+1") |
bis_promo_free_sku | Text | nein | SKU des Gratis-Artikels. Leer = derselbe Artikel (1+1, 3+1). Gesetzt = „kaufe diesen Artikel, erhalte den anderen gratis". Muss eine lokal vorhandene SKU sein, sonst Fallback auf selben Artikel. |
bis_promo_deposit | 0 / 1 | nein | Pfand auf der Gratis-Einheit berechnen. 1 = ja (Standard), 0 = nein. |
Beispiel — 3+1 auf denselben Artikel
bis_promo_buy = 3
bis_promo_get = 1
Verkauf von 4 Stück → 3 berechnet, 1 als 0,00-€-Position. Ist der Artikel pfandpflichtig, bleibt das Pfand der Gratis-Einheit voll berechnet (bis_promo_deposit=1) — nur der Artikelpreis ist 0 €.
Beispiel — kaufe Artikel A, erhalte Artikel B gratis
bis_promo_buy = 1
bis_promo_get = 1
bis_promo_free_sku = SKU-DES-GRATIS-ARTIKELS
Nicht über Funktionsattribute
Kategorie-Aktionen (günstigste Einheit einer Kategorie gratis) und zeitlich befristete Aktionen pflegen Sie direkt im BIS ERP / Kundencenter. Per JTL-Funktionsattribut sind „selber Artikel" (1+1, 3+1) und „Artikel A → Artikel B" abbildbar. Voraussetzung an der Kasse: BISpicy POS ab Version 1.1.13.
Datenfluss
JTL Wawi (Artikel-Funktionsattribute)
|
| JTL-SQL-Sync alle 5 Min oder manuell
v
BIS ERP
|- articles.depositType / depositAmount <- bis_pfand_*
|- articlePackagingUnits.* <- bis_gebinde_*
`- productTierPrices.* <- bis_gebinde_*_preis / sonderpreis
|
| Sync zur POS-App (BISRemote)
v
POS-Kasse
|- Verpackungseinheit kann gescannt werden (EAN)
|- Staffelpreis wird automatisch angewandt
|- Pfand wird automatisch als eigene Position addiert
`- Brutto/Netto-Berechnung anhand Kundengruppe
Sync-Verhalten
- Hinzufügen / Ändern. Bei jedem Sync werden die FA-Daten neu eingelesen. Änderungen in JTL erscheinen in BIS ERP und der Kasse beim nächsten Sync.
- Löschen. Attribut in JTL entfernen → Sync-Lauf entfernt die Verpackungseinheit oder Pfand-Daten in BIS ERP.
- Mehrere Sprachen. Die Werte werden aus
tArtikelAttributSprache für Sprache 0 und 1 gelesen.
- Encoding. Windows-1252 → UTF-8 Konvertierung für Umlaute.
- Validierung. Pflichtfelder fehlen → Eintrag wird übersprungen und im Sync-Log als Warnung protokolliert.
Mapping-Tabelle: Funktionsattribut → BIS-ERP-Spalte
| Funktionsattribut | Ziel-Tabelle | Ziel-Spalte |
bis_gebinde_N_name | articlePackagingUnits | name, shortName |
bis_gebinde_N_menge | articlePackagingUnits | quantityPerUnit |
bis_gebinde_N_ean | articlePackagingUnits | ean, barcode |
bis_gebinde_N_preis | articlePackagingUnits / productTierPrices | sellingPrice + Staffelpreis |
bis_gebinde_N_preistyp | productTierPrices | Berechnungsrichtung brutto/netto |
bis_gebinde_N_kundengruppe | productTierPrices | customerGroupKey |
bis_gebinde_N_sonderpreis | productTierPrices | Sonderpreis-Felder |
bis_pfand_typ | articles | depositType (EINWEG/MEHRWEG/none) |
bis_pfand_betrag | articles | depositAmount |