Onlineshop und ERP verbinden: Bestand, Preise, Bestellungen
Kurz gesagt
Legen Sie je Datenart ein führendes System fest, zum Beispiel den Bestand im ERP und die Bestellung im Shop. Verbinden Sie beide über einen eindeutigen Artikelschlüssel, geben Sie dem Shop den verfügbaren statt den physischen Bestand und nehmen Sie jede Bestellung genau einmal ins ERP. Testen Sie das mit einer Testbestellung. Das ist die Vorgehensweise dieses Artikels, keine Vorgabe der Plattformen.
Das Wichtigste
- Der Shop erhält den verfügbaren Bestand: physischer Bestand minus Reservierungen minus einen Sicherheitsbestand für den Shop; das ist die Rechenregel dieses Artikels.
- Nach der Shopify-Entwicklerdokumentation (abgerufen am 13. Oktober 2026) ändert die Mutation inventoryAdjustQuantities den Bestand um eine Differenz, die Mutation inventorySetQuantities setzt ihn auf einen Wert, optional mit einem Vergleichswert (compareQuantity): Stimmt der gespeicherte Wert nicht überein, lehnt Shopify die Änderung ab.
- Dieselbe Dokumentation nennt, dass dieselbe Webhook-Lieferung mehrfach eintreffen kann und über den Header X-Shopify-Webhook-Id erkannt wird; Änderungen der Zustände committed, reserved, damaged, safety_stock und quality_control lösen keine Webhooks aus.
- Nach der WooCommerce-REST-API-Dokumentation (v3, abgerufen am 13. Oktober 2026) hat ein Produkt die Felder manage_stock, stock_quantity und backorders (no, notify, yes); backorders gilt nur, wenn der Bestand geführt wird.
- Pflichten, die für den Webshop selbst gelten, sind nicht Gegenstand dieses Artikels.
Ein Onlineshop und ein ERP führen dieselben Artikel und dieselben Mengen. Sobald beide eine eigene Zahl pflegen, laufen sie auseinander. Die Anleitung legt fest, welches System welche Daten bestimmt, wie beide Systeme übereinstimmen und woran Sie einen Fehler bei der Bestandsübergabe erkennen. Die Lage der Kasse im Gesamtbild beschreibt Kasse mit ERP verbinden.
Was Sie vorab brauchen
- Zugang zur Schnittstellen-Dokumentation Ihrer Shopsoftware und Ihres ERP (Schnittstellen zwischen Kasse und ERP).
- Einen Artikelstamm mit eindeutiger Artikelnummer je Variante (Artikelnummern im ERP, Stammdaten pflegen).
- Ein Testsystem oder einen Testmodus im Shop, in dem Testbestellungen ohne Zahlung möglich sind.
- Die Liste der Lagerorte, aus denen der Shop liefert (Lagerverwaltung im ERP).
Schritt für Schritt: Shop und ERP verbinden
Schritt 1: Führendes System je Datenart festlegen
Bestimmen Sie für jede Datenart, welches System sie ändern darf. Die folgende Verteilung ist ein Vorschlag, den Sie an Ihren Betrieb anpassen.
| Datenart | Führendes System | Fließt zum anderen System |
|---|---|---|
| Artikelstamm, Bezeichnung | ERP | Shop |
| Bestand | ERP | Shop (verfügbare Menge) |
| Preis | ERP | Shop |
| Bestellung | Shop | ERP |
| Kundendaten der Bestellung | Shop | ERP, als Bestellbezug |
| Versandstatus | ERP | Shop |
Ergebnis: Jede Datenart hat genau ein führendes System. Ändert jemand einen Preis im Shop, obwohl das ERP führt, überschreibt die nächste Übertragung die Änderung.
Schritt 2: Schlüssel abgleichen
Jede Variante braucht im Shop und im ERP denselben Schlüssel, zum Beispiel die Artikelnummer (SKU) oder die GTIN. Prüfen Sie vor dem Start, dass jede Shop-Variante genau einem ERP-Artikel entspricht. Ergebnis: eine Zuordnungstabelle ohne leere und ohne doppelte Zeilen.
Schritt 3: Shop-Bestand definieren
Rechnen Sie die Menge, die der Shop sieht, im ERP aus: physischer Bestand der Lagerorte, aus denen der Shop liefert, minus Reservierungen, minus ein Sicherheitsbestand für den Shop.
Beispielrechnung mit erfundenen Zahlen: 20 Stück liegen im Hauptlager, 5 sind für Aufträge im Laden reserviert, der Sicherheitsbestand für den Shop beträgt 2 Stück. Der Shop sieht 20 − 5 − 2 = 13 Stück. Ergebnis: eine Rechenregel, die im ERP hinterlegt ist.
Schritt 4: Übertragungsweg wählen
Wählen Sie, wie Änderungen ankommen: ein Ereignis des Shops (Webhook) löst die Übergabe aus, oder das ERP fragt in festen Abständen ab, oder beides. Ein Ereignis (Webhook) meldet eine Änderung sofort, kann aber doppelt eintreffen; ein regelmäßiger Abgleich schützt zusätzlich vor einem verpassten Ereignis. Die Dokumentation von Shopify nennt dazu, dass Änderungen in den Zuständen committed, reserved, damaged, safety_stock und quality_control keine Webhooks auslösen. Ergebnis: ein Plan, welcher Weg welche Daten trägt.
Schritt 5: Bestandsänderungen sinnvoll senden
Es gibt zwei Arten, den Bestand zu übertragen: als Differenz („minus 1“) oder als Wert („13“). Shopify bietet beide: inventoryAdjustQuantities ändert um eine Differenz, inventorySetQuantities setzt einen Wert. Bei WooCommerce legen die Felder manage_stock und stock_quantity den geführten Bestand eines Produkts fest, und backorders steuert, ob Bestellungen über den Bestand hinaus erlaubt sind, wenn der Bestand geführt wird. Ein ungeschützt gesetzter, veralteter Wert überschreibt Bestellungen, die zwischen Berechnung und Übergabe eingegangen sind (siehe das Beispiel unten). Shopify bietet bei inventorySetQuantities einen Vergleichswert an: Nur wenn der gespeicherte Bestand dem erwarteten entspricht, wird gesetzt; die Dokumentation empfiehlt, ihn immer mitzugeben, und warnt vor falschen Mengen, wenn man darauf bei gleichzeitigen Anfragen verzichtet. Eine Differenz geht dagegen verloren, wenn die Übertragung ausfällt. Setzen Sie deshalb Werte nur mit Vergleichsschutz oder Differenzen für laufende Änderungen, und prüfen Sie den Gesamtwert in einem regelmäßigen Abgleich. Melden Sie keine Bewegung zurück, die der Shop schon selbst gebucht hat: Nach der Shopify-Dokumentation mindert Shopify den verfügbaren Bestand, sobald eine Bestellung eingeht; reservieren Sie diese Bestellung im ERP und senden die Menge als Differenz zurück, wird sie doppelt abgezogen. Ergebnis: eine Regel pro Ereignis.
Schritt 6: Bestellungen genau einmal übernehmen
Übernehmen Sie jede Shop-Bestellung mit ihrer Shop-Bestellnummer als Schlüssel ins ERP. Prüfen Sie vor dem Anlegen, ob die Nummer schon vorhanden ist. Shopify weist darauf hin, dass dieselbe Webhook-Lieferung mehrfach eintreffen kann, und empfiehlt, die Verarbeitung idempotent zu halten oder den Header X-Shopify-Webhook-Id zu speichern. Ergebnis: Eine mehrfach gesendete Bestellung erzeugt genau einen Auftrag.
Schritt 7: Testen
Bestellen Sie im Testmodus einen Artikel mit Bestand 1 und prüfen Sie nacheinander: Die Bestellung steht im ERP, die Reservierung mindert den verfügbaren Bestand, der Shop zeigt den neuen Bestand. Bestellen Sie dann zweimal kurz hintereinander. Erwartetes Ergebnis: Der Bestand wird nicht negativ, und kein Auftrag entsteht doppelt.
Ein Beispiel für einen überschriebenen Bestand
Beispielrechnung mit erfundenen Zahlen. Das ERP berechnet den Shop-Bestand 13 und sendet ihn als Wert ohne Vergleichsschutz.
| Zeitpunkt | Ereignis | Bestand im Shop | Tatsächlich verfügbar |
|---|---|---|---|
| 1 | ERP sendet den Wert 13 | 13 | 13 |
| 2 | Kunde bestellt 2 Stück im Shop | 11 | 11 |
| 3 | ERP sendet einen zuvor berechneten Wert 13 | 13 | 11 |
Zu Zeitpunkt 3 zeigt der Shop 13 Stück, tatsächlich sind 11 verfügbar. Der Wert wurde vor der Bestellung berechnet und danach übertragen. Sendet das ERP nur Differenzen und gibt es bei Zeitpunkt 3 keine Änderung im ERP, bleibt der Shop bei 11. Mit Vergleichswert hätte Shopify das Setzen abgelehnt, weil der gespeicherte Bestand 11 vom erwarteten 13 abweicht.
So prüfen Sie das Ergebnis
Vergleichen Sie (Vorschlag) einmal täglich für zehn Artikel den Shop-Bestand mit dem Wert, den die Rechenregel aus Schritt 3 im ERP ergibt. Zählen Sie außerdem die Bestellungen der letzten 24 Stunden im Shop und im ERP. Beide Zahlen müssen übereinstimmen.
Wenn etwas nicht klappt
| Anzeichen | Wahrscheinliche Ursache | Abhilfe |
|---|---|---|
| Der Shop verkauft mehr, als lieferbar ist | Shop erhält den physischen statt des verfügbaren Bestands, oder Reservierungen fehlen | Rechenregel aus Schritt 3 prüfen |
| Der Shop-Bestand springt auf einen alten Wert zurück | Ein veralteter Wert wurde ohne Vergleichsschutz gesetzt und überschreibt eine zwischenzeitliche Bestellung | Vergleichswert mitsenden oder Differenzen senden, Gesamtwert abgleichen |
| Der Shop-Bestand sinkt je Bestellung doppelt | Der Shop hat die Bestellung schon abgezogen, und das ERP meldet sie als Differenz zurück | Bewegungen, die der Shop bucht, nicht erneut senden |
| Eine Bestellung steht zweimal im ERP | Dieselbe Lieferung ist doppelt eingetroffen | Shop-Bestellnummer vor dem Anlegen prüfen |
| Eine Bestellung fehlt im ERP | Ein Ereignis ist ausgefallen | Regelmäßiger Abgleich der Bestellnummern |
| Eine Variante zeigt falschen Bestand | Schlüssel stimmen nicht überein | Zuordnungstabelle aus Schritt 2 prüfen |
| Der verfügbare Bestand im Shop steigt nach einer Stornierung oder Retoure nicht, obwohl die Ware wieder verkaufbar ist | Rückbuchung nicht übergeben oder Ware nicht wieder aufgenommen | Ereignis für Storno und Retoure ergänzen, Wiederaufnahme im ERP buchen |
| Preise im Shop weichen vom ERP ab | Brutto- und Nettopreise vermischt oder im Shop geändert | Führendes System und Preisfeld prüfen |
Wann Sie Hilfe holen sollten
Fragen Sie den Anbieter Ihrer Shopsoftware oder Ihres ERP, wenn eine Schnittstelle Ereignisse nicht liefert oder die Dokumentation einen Zustand nicht erklärt. Für Rechtsfragen zum Webshop selbst, etwa zu Preisangaben oder Verbraucherrechten, ist dieser Artikel nicht die Stelle; beginnen Sie mit Widerrufsbutton im Webshop. Mehrere Kanäle zugleich behandelt Omnichannel-Bestand, Marktplätze behandelt Marktplätze anbinden.