Zum Hauptinhalt springen

JTL-Funktionsattribute Kompendium

Eine Datenquelle in JTL pflegen — Gebinde, Pfand und Preise erscheinen automatisch in BIS ERP und der BISpicy POS-Kasse.

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. BISpicy liest beim JTL-Sync die Attribute mit dem Präfix bis_ aus und übernimmt sie automatisch in BIS ERP und die POS-Kasse.

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 Stücklisten-Artikel für Gebinde, keine zusätzlichen Pfand-Stammsätze, keine Im-/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 aus 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. BISpicy legt daraus Verpackungseinheiten und Staffelpreise an.

Nummerierung: bis_gebinde_1_*, bis_gebinde_2_*, … — beliebig viele Gebinde pro Artikel.

Pflichtfelder

AttributTypBeispielWas es bewirkt
bis_gebinde_1_nameTextKisteAnzeigename der Verpackungseinheit. Erscheint auf Bon, Rechnung, Lieferschein und Kundendisplay.
bis_gebinde_1_mengeGanzzahl20Anzahl Einzelartikel pro Gebinde (z. B. 20 Flaschen pro Kiste). Auch als Staffelpreis-Mindestmenge.
bis_gebinde_1_eanText4001234567899EAN/Barcode des Gebindes. Die Kasse erkennt die Verpackungseinheit anhand dieser EAN beim Scannen.
bis_gebinde_1_preisDezimal22.00Verkaufspreis des Gebindes. Brutto oder Netto je nach preistyp.

Optionale Felder

AttributTypBeispielWas es bewirkt
bis_gebinde_1_preistypTextbrutto / nettoSteuert, ob die Preise als Brutto- oder Nettowert interpretiert werden. Standard: brutto.
bis_gebinde_1_preis_{kundengruppe}Dezimalbis_gebinde_1_preis_gastro = 16.50Preis 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_b2bDezimal18.00Sonderfall 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_sonderpreisDezimal19.99Zeitlich begrenzter Aktionspreis (global).
bis_gebinde_1_sonderpreis_von / _bisDatum2026-06-01Zeitfenster des Sonderpreises (YYYY-MM-DD). Leer = ab sofort bzw. unbefristet.
bis_gebinde_1_sonderpreis_{kundengruppe}DezimalAktionspreis für eine bestimmte Kundengruppe, mit eigenem Zeitfenster. sonderpreis_b2b = Aktionspreis der Gruppe „B2B".
bis_gebinde_1_kundengruppeTextVeraltet. 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". In BIS ERP bearbeitbar über den Preise-Tab des Artikels (Button „Preise bearbeiten" am Gebinde) — auch ganz ohne JTL.

Pfand am Basisartikel

Markiert einen Artikel als Pfandartikel (z. B. Glasflasche) und definiert den Pfandwert. Beim POS-Verkauf erscheint Pfand automatisch als eigene Position auf dem Bon.

AttributTypWerteWas es bewirkt
bis_pfand_typ Text EINWEG / MEHRWEG / KEIN Pfandart. EINWEG = klassisches Einwegpfand (i. d. R. 0,25 €). MEHRWEG = Mehrwegflasche. 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.

Beispiel — minimaler Pfand-Setup ohne Gebinde-VPE

bis_pfand_typ = MEHRWEG
bis_pfand_betrag = 0.25
bis_kistenpfand_betrag = 1.50
bis_kiste_ab = 12

Verkauf 1 Flasche → 0,25 € Flaschenpfand. Verkauf 12 Flaschen → 12 × 0,25 € + 1 × 1,50 € Kistenpfand (automatisch). Verkauf 24 Flaschen → 24 × 0,25 € + 2 × 1,50 €. Der Kassierer kann die Kistenpfand-Position bei Bedarf aus dem Warenkorb entfernen, falls der Kunde die Flaschen ohne Kiste mitnimmt — Flaschenpfand bleibt zwingend.

Beispiel — mit Gebinde-VPE (Kiste als scanbarer Artikel)

bis_pfand_typ = MEHRWEG
bis_pfand_betrag = 0.25
bis_kistenpfand_betrag = 1.50
bis_kiste_ab = 12

bis_gebinde_1_name = Kiste
bis_gebinde_1_menge = 12
bis_gebinde_1_ean = 4001234567899
bis_gebinde_1_preis = 22.00
B2C vs. B2B. Der Nominalwert (z. B. 0,25 €) bleibt gleich — die Kundengruppe des aktiven Kunden bestimmt, ob er als Brutto oder Netto auf dem Bon erscheint. Pfand-Positionen werden immer als eigene Bonzeile ausgewiesen.

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" lässt sich dieser Automatismus tenantweit aktivieren oder deaktivieren:

  • Aktiviert (Standard): Verkauft der Kassierer 24 Flaschen, fügt die POS-Kasse automatisch zwei Kisten-Pfand-Positionen hinzu — mit dem in bis_kistenpfand_betrag hinterlegten Wert.
  • Deaktiviert: Keine automatische Kistenpfand-Position mehr. Flaschenpfand aus bis_pfand_* bleibt davon unberührt und wird weiterhin pro Flasche berechnet.
Wann ausschalten? Wenn Sie ausschließlich Einzelflaschen verkaufen, keine Kistenpfand-Logik benötigen oder die Kistenposition lieber manuell scannen wollen.

Die Einstellung verteilt sich automatisch an alle angebundenen POS-Kassen. Eine Änderung im Kundencenter wirkt beim nächsten Sync der Kasse — keine Updates der App nötig.

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 BISpicy-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.fVKNettoStandard-VerkaufspreisBasispreis
tPreis + tPreisDetail (ab Menge 0)Preis je Kundengruppe (z. B. B2B)productCustomerGroupPrices
tPreisDetail (ab Menge > 0)StaffelpreisproductTierPrices
tArtikelSonderpreis + tSonderpreiseSonderpreis mit ZeitraumSonderpreis-Felder
tPreis mit KundenbezugIndividueller Kundenpreisproduct_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}".

FunktionsattributTypPflichtBedeutung
bis_promo_buyGanzzahlja (≥ 1)N — zu kaufende Menge (z. B. 3 bei „3+1")
bis_promo_getGanzzahlja (≥ 1)M — Anzahl Gratis-Einheiten (z. B. 1 bei „3+1")
bis_promo_free_skuTextneinSKU 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_deposit0 / 1neinPfand 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
   |
   | Sync zur POS-App (BISRemote)
   v
BISpicy POS
   |- Verpackungseinheit scannbar (EAN)
   |- Staffelpreis automatisch angewandt
   |- Pfand als eigene Position addiert
   `- Brutto/Netto je Kundengruppe

Sync-Verhalten

  • Hinzufügen / Ändern. Bei jedem Sync werden die FA-Daten neu eingelesen.
  • Löschen. Attribut in JTL entfernen → Sync-Lauf entfernt Gebinde oder Pfand-Daten in BISpicy.
  • Mehrsprachig. Werte werden für Sprache 0 und 1 aus tArtikelAttributSprache gelesen.
  • Encoding. Windows-1252 → UTF-8 für Umlaute.
  • Validierung. Bei fehlenden Pflichtfeldern wird der Eintrag übersprungen und im Sync-Log als Warnung protokolliert.

Mapping-Tabelle: Funktionsattribut → BIS-ERP-Spalte

FunktionsattributZiel-TabelleZiel-Spalte
bis_gebinde_N_namearticlePackagingUnitsname, shortName
bis_gebinde_N_mengearticlePackagingUnitsquantityPerUnit
bis_gebinde_N_eanarticlePackagingUnitsean, barcode
bis_gebinde_N_preisarticlePackagingUnits / productTierPricessellingPrice + Staffelpreis
bis_gebinde_N_preistypproductTierPricesbrutto/netto-Berechnungsrichtung
bis_gebinde_N_kundengruppeproductTierPricescustomerGroupKey
bis_gebinde_N_sonderpreisproductTierPricesSonderpreis-Felder
bis_pfand_typarticlesdepositType (EINWEG/MEHRWEG/none)
bis_pfand_betragarticlesdepositAmount