DE · AT · CHAnleitung

Preise und Stammdaten zwischen ERP und Shop pflegen

Aktualisiert:

Gilt für: Shops mit zwei Systemen (Shop und ERP oder Warenwirtschaft), versionunabhängig; Preisangabepflichten je Land sind nicht Teil des Artikels

Kurz gesagt

Für jedes Feld gilt ein System als Quelle und das andere als Empfänger: Preise, Bestand, Gewicht und Steuerschlüssel im ERP, Verkaufstexte, Bilder und Shop-Kategorien im Shop oder PIM; dieselbe Aufteilung passt in Deutschland, Österreich und der Schweiz. Das zweite System liest diese Felder nur. Ausnahme: Ein Preis, der nur in einem Kanal gilt, gehört in das Kanalsystem.

Das Wichtigste

  • Je Feld ein führendes System; das zweite System liest nur und schreibt nicht zurück.
  • Preis, Bestand, Gewicht und Steuerschlüssel liegen im ERP, Verkaufstexte, Bilder und Shop-Kategorien im Shop oder PIM.
  • Eine reine Preisänderung im Shop erfordert keine neue GTIN; nur ein aufgedruckter Packungspreis (GS1, Abschnitt 2.10).
  • Gegen parallele Änderungen hilft eine Vorbedingung, die die Schnittstelle je Änderung prüft: der starke ETag des Datensatzes mit If-Match (RFC 9110) oder ein Versionswert, den der Server beim Anwenden atomar vergleicht, etwa als test-Anweisung in JSON Patch (RFC 6902); ein bloßes Versionsfeld im Datensatz wirkt, sobald die Schnittstelle es als Vorbedingung prüft.
  • Einen Preis in genau einem System runden; Rückrechnen im zweiten System erzeugt Cent-Differenzen.

Ein Feld wie der Verkaufspreis kann in zwei Systemen stehen, aber nur eines darf es schreiben. Schreibt auch das andere, hängt die Anzeige davon ab, welcher Lauf zuletzt lief, und die Rechnung kann einen anderen Betrag tragen als der Warenkorb. Die Frage lautet deshalb nicht, welche Software die bessere ist, sondern welches System eine Angabe setzen darf; diesen Zuschnitt nennen wir hier Systemführerschaft.

Was Sie vorab brauchen

  • ein Feldinventar: jedes Feld, das in beiden Systemen vorkommt, mit dem Namen je System
  • Zugriff auf die Import- und Exportprofile, nicht nur auf die Anzeige
  • die Preislisten sowie Staffel- und Kundengruppenpreise, soweit vorhanden
  • die Liste Ihrer Kanäle (Shop, Marktplatz, Preisvergleich, Geschäftskundenliste)
  • fünf Artikel als Stichprobe, darunter ein Staffelpreis, ein Bündel und ein Länderpreis

Schritt für Schritt: Felder verteilen und abgleichen

Schritt 1: Feldinventar anlegen

Schreiben Sie beide Feldlisten nebeneinander und suchen Sie die Angaben, die dasselbe meinen. Achten Sie auf Paare, die gleich heißen und Verschiedenes bedeuten: „Lieferzeit“ ist im ERP die Beschaffungszeit beim Lieferanten, im Shop der Text für die Kundschaft. Markieren Sie abgeleitete Werte, die kein eigenes Feld sind, sondern eine Rechnung: der Bruttopreis aus Nettopreis und Steuerschlüssel, der Grundpreis aus Preis und Bezugsmenge.

Ergebnis: eine Liste mit dem Feldnamen je System und dem Vermerk „abgeleitet“ oder „übertragen“.

Schritt 2: Je Feld ein führendes System festlegen

Für jedes Feld notieren Sie ein System als Quelle und das andere als Empfänger. Hilft die Zuordnung nicht weiter, trennen Sie das Feld in zwei Felder, statt sich auf eine Absprache zu verlassen: eine Handelsbezeichnung für den Beleg und einen Verkaufstext für die Produktseite. Die Tabelle ist eine Arbeitsvorlage.

Feld Führendes System Warum dort Im zweiten System
Artikelnummer (SKU) ERP Sie verbindet Bestellung, Rechnung und Lager übernehmen, nicht neu vergeben
GTIN Herstellerangabe in ERP oder PIM Sie identifiziert den Handelsartikel im offenen Handel übernehmen
Verkaufstext und Bilder Shop oder PIM Sie richten sich nach dem Kanal hier pflegen
Shop-Kategorie Shop Sie folgt der Navigation, nicht dem Lager nicht zurückschreiben
Warengruppe und Erlöskonto ERP Sie steuern Auswertung und Buchhaltung übernehmen
Merkmale und Varianten ERP oder PIM Sie bestimmen Nummer, Bestand und Preis je Ausprägung übernehmen
Preise der Preisliste (Liste, Staffel, Kundengruppe) ERP Sie gelten kanalübergreifend und tragen die Rechnung nur lesen
Aktionspreis mit Gültigkeit das System, in dem die Aktion gilt Sie gilt für einen Kanal oder für alle zum Enddatum beenden
Bestand und Verfügbarkeit ERP oder Lagerverwaltung Dort entstehen die Lagerbewegungen nur anzeigen
Gewicht und Maße für den Versand ERP oder PIM Sie gehen in Versandkosten und Frachtpapiere ein dieselben Werte nutzen
Steuerschlüssel (Feld) ERP oder Fakturierung Er gehört zur Buchhaltung übernehmen
Einkaufspreis und Kalkulation ERP Vertrags- und Buchhaltungsdaten nie in den Shop übertragen
Bezugsmenge für den Grundpreis PIM oder ERP Sie ist eine Produkteigenschaft Anzeige daraus ableiten
Preisliste und Währung je Land ERP Je Land gilt eine eigene Liste Land bestimmt die Liste

Was der Shop davon anzeigt, folgt dem Preisangabenrecht je Land: Preisangaben in Deutschland, Preisangaben in Österreich, Preisangaben in der Schweiz. Liegen Produkttexte in mehreren Kanälen, hilft ein eigenes Produktinformationssystem, siehe Wann sich ein PIM-System lohnt.

Schritt 3: Schreibrechte im zweiten System sperren

Ein Feld ist erst ruhig, wenn das zweite System es nicht schreiben kann. Nehmen Sie es aus dem Importprofil der Rückrichtung und entfernen Sie im Shop die Möglichkeit, den übernommenen Wert zu überschreiben; eine solche Option ist eine zweite Pflegestelle. Muss im Ausnahmefall doch jemand im Shop ändern, notieren Sie Wer, Was und Wann und tragen Sie den Wert in das führende System nach.

Schritt 4: Änderungen feldweise und wiederholbar übertragen

Schicken Sie statt des ganzen Artikelsatzes die geänderte Angabe mit Artikelnummer, Feldname, neuem Wert und Version. Dafür ist die HTTP-Methode PATCH gedacht: Sie überträgt Anweisungen zu einem bestehenden Datensatz, während PUT die ganze Darstellung ersetzt (RFC 9110, Abschnitte 9.3.4 und 14.5). PATCH ist nach RFC 5789 weder sicher noch idempotent und wird serverseitig vollständig oder gar nicht angewendet.

JSON Patch (application/json-patch+json) überträgt Anweisungen wie add und replace; schlägt eine fehl, gilt das ganze Dokument als nicht angewendet (RFC 6902, Abschnitte 1 und 5), und test prüft vorab den erwarteten Wert (Abschnitt 4.6). JSON Merge Patch beschreibt den gewünschten Zustand, wobei ein null ein Feld entfernt (RFC 7396, Abschnitt 1); es passt nicht zu Dokumenten, die null als eigenen Wert verwenden.

Gegen parallele Änderungen brauchen Sie eine Vorbedingung, die die Schnittstelle je Änderung prüft; If-Match ist einer von mehreren Wegen (RFC 5789, Abschnitt 2, nennt eine bedingte Anfrage mit starkem ETag als Beispiel). Wählen Sie diesen Weg, vergleicht der Server keinen freien Wert im Datensatz, sondern den Entity-Tag (ETag): Nach RFC 9110 muss er dabei stark vergleichen und die Methode unterlassen, wenn kein gelisteter ETag mehr passt (Abschnitt 13.1.1, zum starken ETag Abschnitt 8.8.1). Die gescheiterte Vorbedingung darf er mit 412 anzeigen (Abschnitt 15.5.13); hat ein anderer Aufruf die Änderung bereits angewandt, darf er stattdessen auch mit 2xx antworten und ändert dann nichts mehr (Abschnitt 13.1.1). Das setzt voraus, dass die Schnittstelle für jeden Datensatz einen starken ETag liefert und die Vorbedingung auswertet; führen Sie die Version nur als Feld im Datensatz, weist sie konkurrierende Änderungen ab, sobald die Schnittstelle sie prüft, etwa als test-Anweisung in einem JSON Patch, das der Server vollständig oder gar nicht anwendet (RFC 6902, Abschnitte 4.6 und 5) (redaktionelle Arbeitsregel). Wiederholen darf ein Client nur, was wiederholbar ist: PUT, DELETE und lesende Methoden ja, POST ohne weitere Kenntnis nicht (Abschnitt 9.2.2).

Beträge gehen als Dezimalzahl fester Stellenzahl oder als ganze Zahl in der kleinsten Währungseinheit über: RFC 8259, Abschnitt 6, weist darauf hin, dass Implementierungen Zahlen nach IEEE 754 binary64 annähern dürfen; Euro und Franken haben je zwei Nachkommastellen (ISO 4217, Stand 17. September 2026). Zu einer Preisänderung gehört das Datum, ab dem sie gilt, sonst entscheidet der Zeitpunkt des Laufs (redaktionelle Empfehlung).

Schritt 5: Preis rundet genau ein System

Führt das ERP den Nettopreis und der Shop den Bruttopreis, wird zweimal gerechnet und zweimal gerundet. Beispielrechnung mit erfundenen Zahlen und einem angenommenen Satz von 20 Prozent, der keine Aussage über einen Steuersatz in den drei Ländern ist: 8,30 Euro netto ergeben brutto 8,30 × 1,20 = 9,96 Euro. Rundet der Shop die Anzeige auf 9,95 Euro und schreibt zurück, ergibt 9,95 ÷ 1,20 = 8,2916…, gerundet 8,29 Euro netto: eine unbeabsichtigte Senkung um einen Cent. Den Wert, der angezeigt und abgerechnet wird, setzt deshalb ein System; das zweite übernimmt ihn.

Eine reine Preisänderung lässt die Kennungen unangetastet: Nach dem GTIN Management Standard löst nur der direkt auf die Packung gedruckte Preis eine neue GTIN aus (Abschnitt 2.10). Wer bei jeder Preisanpassung neu vergibt, verliert die Zuordnung zu Bestellungen, Feeds und Lagerbestand.

Schritt 6: Abgleich, Stichprobe und Nachweis einrichten

Prüfen Sie jeden Lauf und zusätzlich im Shop. Je Lauf: Zahl der geänderten Felder, Summe der Preise vorher und nachher und die Artikelnummern mit altem und neuem Wert. Im Shop: die fünf Stichproben aufrufen und Anzeige, Warenkorb, Bestellbestätigung und Rechnungsposition vergleichen, mit den Randfällen, in denen zwei Felder zusammenwirken (Staffelpreis, Länderpreis, Aktionspreis mit Enddatum, Grundpreis).

Ergebnis: ein Bericht je Lauf mit Laufzeit, Zahl der Änderungen, Differenzen und Stichproben; damit lässt sich eine Preisdifferenz einem Lauf zuordnen. Wie Sie Fehler einer Übergabe erkennen und alarmieren, beschreibt Datensynchronisation zwischen Systemen.

So prüfen Sie das Ergebnis

  • Jedes Feld im Feldinventar hat ein führendes System; keines ist in beiden Systemen änderbar.
  • Die Rückrichtung überträgt kein Preisfeld, keinen Bestand und keine Kennung.
  • Eine Preisänderung trägt Artikelnummer, Feldname, Wert und die Vorbedingung mit, gegen die sie geprüft wird; passt sie nicht mehr (etwa der starke ETag), wendet der Server die Änderung nicht an.
  • Beträge kommen als Dezimalzahl fester Stellenzahl oder als ganze Zahl in der kleinsten Einheit an.
  • Die fünf Stichproben stimmen in Anzeige, Warenkorb, Bestellbestätigung und Rechnung überein.

Wenn etwas nicht klappt

Symptom Ursache Behebung
Der Preis im Shop ist am Morgen wieder der alte Im Shop wurde geändert, der Lauf hat überschrieben Änderung im ERP nachtragen, Feld im Shop sperren
Anzeige und Rechnung weichen um einen Cent ab Zwei Systeme runden den Bruttopreis Rundung in ein System legen
Shop und Marktplatz zeigen verschiedene Preise Der Kanal liest eine eigene Liste Quelle je Kanal dokumentieren
Nach einem Lauf ist der Preis leer Ein Merge Patch hat null gesendet und damit das Feld entfernt (RFC 7396) Den gültigen Preis erneut senden; ein Feld bewusst leeren nur im mit der Schnittstelle vereinbarten Format (RFC 7396, Abschnitt 2)
Eine Preisänderung wurde doppelt gebucht Ein Aufruf ohne eigenen Schlüssel lief zweimal Je Änderung einen eigenen Schlüssel mitgeben und im Ziel speichern, damit die Gegenseite denselben Schlüssel erkennt und den zweiten Aufruf verwirft; das setzt eine Deduplizierung voraus, die die Schnittstelle tatsächlich anbietet (redaktionelle Arbeitsregel)
Der Bestand im Shop passt nicht zum Lager Die Verfügbarkeit wird im Shop berechnet Verfügbarkeit aus dem führenden Bestand ableiten

Wann Sie Hilfe holen sollten

Holen Sie Unterstützung, wenn beide Systeme dasselbe Feld in beide Richtungen schreiben und niemand den Vorrang entscheidet, wenn ein Marktplatz eine eigene Preisquelle verlangt, oder wenn Preise in mehreren Ländern und Währungen geführt werden. Für die Systemwahl hilft Warenwirtschaft für Onlinehändler, für die Übertragungswege Schnittstellen im Shop-Umfeld und für die Frage, ab wann ein ERP nötig wird, ERP im Onlinehandel.

Häufige Fragen

Darf ich im Shop kurzfristig einen anderen Preis anzeigen als im ERP?

Nur als eigenes Feld mit eigenem Eigentümer. Ein Aktionspreis mit Anfangs- und Enddatum gehört in das System, in dem die Aktion gilt: Gilt sie nur im Shop, pflegen Sie sie dort und lassen die Felder der Preisliste unberührt; gilt sie in allen Kanälen, gehört sie in die Preisliste des ERP. Eine stille Änderung an einem übernommenen Preisfeld wird beim nächsten Lauf überschrieben.

Warum ändert sich ein Preis bei jedem Abgleich um einen Cent?

Weil zwei Systeme aus verschiedenen Ausgangswerten rechnen. Führt das ERP den Nettopreis und der Shop den Bruttopreis, rundet jedes System für sich; schreibt der Shop seinen gerundeten Bruttopreis zurück, entsteht ein neuer Nettopreis. Übertragen Sie den Wert, der angezeigt und abgerechnet wird, in einer Richtung, statt ihn auf beiden Seiten zu berechnen.

Muss ich für eine Preiserhöhung einen neuen Artikel anlegen?

Nein. Artikelnummer und GTIN bleiben bei einer Preisänderung unverändert; nach dem GTIN Management Standard löst nur ein direkt auf die Packung gedruckter Preis eine neue GTIN aus (Abschnitt 2.10). Legen Sie stattdessen einen Preis mit Gültigkeitsdatum an, damit Bestellungen und Belege eindeutig dem alten oder dem neuen Preis zugeordnet werden können.

Wer führt den Bestand, wenn der Shop auch Ware verkauft, die im Lager liegt?

Das System, in dem die Lagerbewegung entsteht: Wareneingang, Versand und Retoure bucht das ERP oder die Lagerverwaltung. Der Shop zeigt die Verfügbarkeit an und rechnet sie nicht selbst aus. Verkauft der Shop ohne Rückmeldung an das Lager, sinkt der Bestand nur in einer der beiden Zahlen.

Quellen

  1. RFC 9110: HTTP Semantics (STD 97, Juni 2022), Abschnitte 8.8.1, 8.8.3, 8.8.3.2, 9.2.2, 9.3.4, 13, 13.1.1, 14.5 und 15.5.13Internet Engineering Task Force (IETF), rfc-editor.org · abgerufen am
  2. RFC 5789: PATCH Method for HTTP (Standards Track, März 2010), Abschnitt 2 (atomare Anwendung, bedingte Anfrage mit starkem ETag)Internet Engineering Task Force (IETF), rfc-editor.org · abgerufen am
  3. RFC 6902: JavaScript Object Notation (JSON) Patch (Standards Track, April 2013), Abschnitte 1, 4.6 (test) und 5 (Fehlerbehandlung)Internet Engineering Task Force (IETF), rfc-editor.org · abgerufen am
  4. RFC 7396: JSON Merge Patch (Standards Track, Oktober 2014), Abschnitte 1 und 2 (null entfernt ein Mitglied)Internet Engineering Task Force (IETF), rfc-editor.org · abgerufen am
  5. RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format (STD 90, Dezember 2017), Abschnitt 6 (Zahlen, Genauigkeit)Internet Engineering Task Force (IETF), rfc-editor.org · abgerufen am
  6. GTIN Management Standard, Release 1.1, Ratified September 2023, Abschnitt 2.10 (Preis auf der Packung); als Original-PDF am 14.10.2026 von der aktuellen Standardseite geladenGS1 AISBL · abgerufen am
  7. ISO 4217 Währungscodeliste (List One), Stand 17. September 2026: EUR 978 und CHF 756 mit je zwei NachkommastellenSIX Financial Information AG, ISO-4217-Maintenance-Agency · abgerufen am