Wie Echtzeit-Bestände zwischen Ladengeschäft und Onlineshop wirklich synchron bleiben (Shopify)

Von Robin Laseur

Bei Shopify stimmt die eine Bestandszahl, weil Onlineshop und POS nicht zwei Systeme sind, die im Gleichschritt gehalten werden müssen. Beide lesen und schreiben in Echtzeit denselben Bestandsdatensatz pro Standort, aufgeteilt in Status, die genau festhalten, wie viel Ware vorhanden ist, wie viel bereits vergeben ist und wie viel noch verkauft werden kann. Treffen ein POS-Verkauf und eine Onlinebestellung dieselbe Variante, ändern beide diesen einen Datensatz. Die Zahl bewegt sich einmal und bleibt korrekt. Das ist Synchronisation durch die Architektur selbst, kein geplanter Abgleich. An vier bestimmten Stellen bricht sie. Wer diese Stellen kennt, kann ein wirklich einheitliches Setup von einem unterscheiden, das nur synchron aussieht. Dieser Artikel erklärt den Mechanismus von Anfang bis Ende.
Wo die eine Bestandszahl tatsächlich liegt
Shopify führt nicht eine Zahl pro Produkt, sondern mehrere, pro Standort. Das Verhältnis zwischen ihnen ist der ganze Mechanismus. Laut der Bestandsdokumentation von Shopify hat jede Variante an jedem Standort eine Reihe von Status: On hand, Available, Committed, Unavailable und Incoming.
On hand ist die gesamte physische Menge an einem Standort, also alles im Gebäude, ob es gerade verkauft werden kann oder nicht. Committed ist Ware, die bereits offenen, noch nicht erfüllten Bestellungen zugewiesen ist. Unavailable ist zurückgelegte, nicht verkaufbare Ware, zum Beispiel Einheiten, die in einem Bestellentwurf gebunden oder als beschädigt markiert sind. Incoming ist Ware, die von einem Lieferanten oder aus einer Umlagerung erwartet wird, aber noch nicht angekommen ist. Available ist die Zahl, auf die es im Onlineshop ankommt: das, was übrig bleibt, wenn man die anderen abzieht. Die Rechnung lautet On hand minus Committed minus Unavailable, Incoming bleibt komplett außen vor.
Diese Subtraktion ist der Kern des Systems. Available ist die Menge, die Sie einem neuen Kunden zusagen können, und Shopify berechnet sie automatisch neu, sobald sich die anderen Werte ändern. Hat ein Standort 40 Stück On hand und sind 6 davon für Bestellungen gebunden, die noch verpackt werden müssen, beträgt Available 34. Diese 34 kann ein Kunde kaufen, online oder im Laden, und darüber hinaus sollte an diesem Standort nichts gegen diese Variante verkauft werden, bis sich die Zahlen ändern. Die 40 hat sich nicht verändert, aber für einen neuen Verkauf zählen nur 34.

Was mit der Zahl passiert, wenn jemand kauft
Verfolgen Sie eine einzelne Einheit durch einen Kauf, und der Synchronisationsmechanismus wird sichtbar.
Ein Kunde bestellt online drei Stück. Shopify senkt On hand noch nicht, denn die Ware liegt physisch noch am Standort. Stattdessen wandern drei Einheiten von Available zu Committed. On hand bleibt gleich, Available sinkt um drei, und diese drei sind nun für die Bestellung reserviert. Wenn das Team die Bestellung verpackt und versendet, geht Committed für diese Bestellung auf null zurück, und erst dann sinkt On hand, weil die Ware den Standort physisch verlassen hat. Die Zahl hat sich in zwei Schritten bewegt, erst Reservierung, dann Abgang, und Available war zu jedem Zeitpunkt dazwischen korrekt.
Ein POS-Verkauf funktioniert genauso und auf demselben Datensatz, fasst die Schritte aber zusammen: Die Transaktion wird im Moment des Bezahlens gebunden und erfüllt, die Zahl des Ladenstandorts ändert sich also sofort. Weil Shopify POS On hand und Unavailable inzwischen direkt an der Kasse anzeigt, neben Committed, sieht das Verkaufspersonal denselben Stand, mit dem auch die Website arbeitet. Das verringert versehentliche Überverkäufe an der Theke.
Das letzte Puzzleteil ist, wie die Website entscheidet, was kaufbar ist. Die Online-Verfügbarkeit eines Produkts ist die Summe von Available über alle Standorte, die dem Kanal Online Store zugeordnet sind. Ein Standort, der für diesen Kanal nicht aktiviert ist, trägt nichts zum Bestand der Website bei, auch wenn er physisch voll ist. Das wird später wichtig, denn hier weicht der Mechanismus unbemerkt von dem ab, was viele Händler annehmen.
Innerhalb dieses Kreislaufs sind Online und POS im strengen Sinn einheitlich: Sie tauschen keine Dateien aus, sondern arbeiten mit einem Satz von Status pro Standort, der sich mit jeder eingehenden Transaktion aktualisiert. Es gibt nichts abzugleichen, weil es keine zwei Zahlen gibt, die man abgleichen müsste.
Warum synchronisiert und einheitlich nicht dasselbe ist
Diese Unterscheidung entscheidet darüber, ob Sie Ihrem Setup vertrauen können. Ein einheitliches System teilt den Datensatz. Ein synchronisiertes System führt eine eigene Kopie und aktualisiert sie in Intervallen. Zwischen zwei Aktualisierungen widersprechen sich die beiden also, und jeder Widerspruch ist eine Gelegenheit, etwas zu verkaufen, das nicht da ist, oder etwas zu verbergen, das da ist.
Der Standard-Onlineshop von Shopify plus Shopify POS ist einheitlich, weil beide mit denselben Status arbeiten. Sobald ein dritter Beteiligter hinzukommt, der diese Status nicht teilt, etwa ein Marktplatzkanal, ein 3PL, ein ERP, ein zweites POS oder ein Retourenprozess außerhalb der Plattform, ist dieser Beteiligte synchronisiert, nicht einheitlich. Er liest eine Zahl, handelt danach und meldet später zurück. In der Lücke zwischen seiner Sicht und der von Shopify entstehen die vier Fehler. Alle haben dieselbe Ursache: Etwas hat den Datensatz gelesen oder geschrieben, ohne die Status zu beachten, auf denen er aufbaut.

Vier Dinge, die die Synchronisation unbemerkt brechen
Jeder dieser Punkte ist eine Bedingung, keine Zwangsläufigkeit. Wenn Sie den Mechanismus verstehen, wissen Sie, welche davon auf Ihr Setup zutreffen.
1. Das Rennen um die letzte Einheit
Das Zeitfenster zwischen dem Lesen von Available und dem Schreiben von Committed ist klein, aber nicht null. Gehen zwei Bestellungen für dieselbe letzte Einheit fast gleichzeitig ein und prüft ein Kanal oder eine App Available, bevor das Committed der anderen Bestellung registriert ist, können beide angenommen werden, obwohl der Bestand nur für eine reicht. Das Ergebnis ist ein Überverkauf, bei dem kein einzelnes System etwas falsch gemacht hat: Jedes hat eine Zahl gelesen, die im Moment des Lesens stimmte.
Der Shopify-Admin selbst rechnet korrekt, deshalb entsteht das selten innerhalb von Standard-Online plus POS. Es tritt auf, wenn ein externer Kanal oder eine App einen eigenen zwischengespeicherten Available-Wert führt und auf einer veralteten Kopie verkauft, oder wenn ein Produkt so eingestellt ist, dass es auch ohne Bestand weiterverkauft wird, was die Prüfung bewusst umgeht. Achten Sie daher auf jeden Verkaufskanal, der eine Kopie der Zahl liest statt des Live-Datensatzes.
2. Ware, die vergeben, aber nicht verkauft ist
Committed und Unavailable bilden den Reservierungsmechanismus, und Fehler in beide Richtungen fallen sichtbar auf. Liest ein System On hand und behandelt das als verkaufbar, ohne die bereits als Committed gebundenen Einheiten zu berücksichtigen, verspricht es Ware, die zwar physisch da ist, aber schon in anderen Bestellungen steckt. Ein späterer Kunde kauft dann eine Einheit, die es für ihn nicht gibt. Wird Available dagegen einmal gesetzt und nicht neu berechnet, wenn sich Committed ändert, kann Ware als ausverkauft erscheinen, während freie Einheiten im Regal liegen. Bestellentwürfe fügen eine subtilere Variante hinzu: Sie verschieben Ware nach Unavailable, sodass eine Variante aus Gründen ausverkauft wirken kann, die man längst vergessen hat. Die Bedingung hier: jede Integration und jeder Ablauf, der Bestände verändert, ohne Committed und Unavailable so zu lesen und zu beachten wie der Onlineshop.
3. Der falsche Standort
Das Multi-Standort-Modell von Shopify behandelt den Bestand jedes Standorts als unabhängig. Bestände werden nicht automatisch über Standorte hinweg zusammengelegt, daher ist die Frage, welchen Standort ein Kanal liest und reserviert, eine Entscheidung mit Folgen. Daraus ergeben sich mehrere Fehlerbedingungen. Ein Produkt kann an einem Standort On hand haben, während Available einen Strich zeigt. Das bedeutet, dass es dort inaktiv ist und von diesem Standort aus weder verkauft noch versendet werden kann, egal wie viel physisch vorhanden ist. Ein reiner Ladenstandort kann Bestand haben, der in Ihre Gesamtmenge einfließt, aber nicht in den Onlinekanal, sodass die Website weniger verfügbar zeigt, als das Unternehmen besitzt. Und eine Bestellweiterleitung, die von einem Standort mit wenig Available reserviert, kann einen Verkauf blockieren, obwohl ein anderer Standort genug hat, weil dieser andere Standort für den Kanal nicht aktiviert ist. Nichts davon ist ein Synchronisationsfehler. Jedes Mal verhält sich die Multi-Standort-Logik genau wie konfiguriert, während jemand annimmt, der Bestand sei ein gemeinsamer Topf.
4. Alles, was nur synchronisiert
Hier richtet die Grenze zwischen synchronisiert und einheitlich ihren Schaden an. Ein 3PL, ein ERP, ein Marktplatz-Connector oder ein Retourenprozess außerhalb von Shopify teilt die Status nicht, sondern kopiert Zahlen nach Zeitplan oder über eine Integration hin und her. Zwei Bedingungen überwiegen. Erstens das Timing: Zwischen den Aktualisierungen driften die Sicht des externen Systems und die von Shopify auseinander, und jeder Verkauf auf der veralteten Seite ist ein Verkauf auf einer Zahl, die bereits falsch war. Zweitens falsch zugeordnete Felder: Eine Integration, die in den falschen Status schreibt, zum Beispiel eine physische Zählung in Available überträgt, obwohl sie On hand hätte aktualisieren sollen, verkauft gebundene Ware unbemerkt doppelt, weil sie den Puffer überschrieben hat, auf den die Reservierungslogik angewiesen ist. Auch Retouren gehören dazu. Eine Retoure bucht Ware zurück, und ob sie in Available oder bis zur Prüfung in Unavailable landet und ob das externe System überhaupt von der Retoure weiß, entscheidet darüber, ob die zurückgekommene Einheit korrekt bleibt. Die Bedingung ist einfach: Jedes System außerhalb des Shopify-Datensatzes ist synchronisiert, und jedes davon ist eine Stelle, an der die eine Zahl unbemerkt aufhören kann, eine einzige zu sein.
So erkennen Sie, ob Ihr Setup einheitlich oder nur synchronisiert ist
Der Mechanismus liefert Ihnen einen direkten Test. Fragen Sie für jedes System, das Ware verkaufen oder bewegen kann, mit welchem Datensatz es arbeitet. Liest und schreibt es die Live-Status pro Standort in Shopify, ist es mit dem Rest einheitlich, und die Zahl stimmt schon durch den Aufbau. Führt es eine eigene Kopie und gleicht später ab, ist es synchronisiert und gehört auf die Liste der Stellen, an denen Sie auf die vier Fehler oben achten sollten.
Der Standard-Onlineshop von Shopify und Shopify POS bestehen diesen Test gemeinsam. Die Frage für die meisten Unternehmen ist, wie viele weitere Beteiligte sie hinzugefügt haben und ob jeder davon die Status beachtet oder nur die Zahl kopiert. Ist ein Marktplatz, ein 3PL oder ein ERP im Spiel, hängt die Zuverlässigkeit des Ganzen davon ab, wie sorgfältig diese Verbindung gebaut wurde. Das ist eine Designentscheidung, keine Einstellung, die man einschaltet. Liegt Ihr Risiko an dieser Grenze, lohnt es sich, die ERP- und Integrationsseite genauso sorgfältig zu erfassen wie den Standardkern. Genau solche Setups baut und prüft Flatline.
Das Wichtigste in Kürze
Shopify hält eine Bestandszahl korrekt, indem es pro Standort Status führt: On hand, Available, Committed, Unavailable und Incoming. Available ist dabei On hand minus Committed minus Unavailable. Online und POS arbeiten beide in Echtzeit mit demselben Datensatz.
Eine Bestellung verschiebt Ware von Available zu Committed und senkt On hand erst beim Versand. Ein POS-Verkauf erledigt beides auf einmal. Die Verfügbarkeit auf der Website ist die Summe von Available über die Standorte, die dem Kanal Online Store zugeordnet sind.
Einheitlich heißt, diesen Datensatz zu teilen. Synchronisiert heißt, die Zahl zu kopieren und später abzugleichen. Dieser Unterschied ist die Ursache jeder Abweichung.
Vier Bedingungen brechen die Synchronisation: ein Rennen zwischen dem Lesen von Available und dem Schreiben von Committed, Systeme, die Committed und Unavailable ignorieren, Multi-Standort-Logik, die für einen gemeinsamen Topf gehalten wird, und jedes externe System, das nur synchronisiert, statt zu teilen.
Um Ihr eigenes Setup zu beurteilen, prüfen Sie, mit welchem Datensatz jedes System arbeitet, das verkauft oder Ware bewegt. Live-Status bedeutet einheitlich; eine eigene Kopie bedeutet synchronisiert und damit eine Stelle, die Sie im Blick behalten sollten.
Häufige Fragen
Aktualisiert Shopify POS den Onlinebestand in Echtzeit?
Ja. Shopify POS und der Onlineshop arbeiten mit demselben Bestandsdatensatz pro Standort, statt zwei getrennte Systeme zu synchronisieren. Ein POS-Verkauf passt die gemeinsame Zahl also sofort an, und die Website zeigt das ohne geplante Aktualisierung. Die Ausnahme ist jeder zusätzliche Kanal und jedes System mit einer eigenen Kopie der Zahl.
Warum kommt es bei Shopify trotz Echtzeitbestand zu Überverkäufen?
Meist, weil etwas mit einer veralteten oder falschen Version der Zahl arbeitet: ein externer Kanal, der auf einem zwischengespeicherten Available-Wert verkauft, eine Integration, die gebundene Ware in Committed ignoriert, ein Produkt, das auch ohne Bestand weiterverkauft wird, oder eine Bestellweiterleitung zum falschen Standort. Standard-Online plus POS verkauft selten von sich aus zu viel, weil Shopify Available korrekt berechnet.
Was ist der Unterschied zwischen On hand und Available in Shopify?
On hand ist der gesamte physische Bestand an einem Standort, einschließlich der Einheiten, die bereits Bestellungen zugewiesen oder als nicht verfügbar zurückgelegt sind. Available ist das, was Sie einem neuen Kunden tatsächlich verkaufen können: On hand minus Committed minus Unavailable. Die Verkaufslogik sollte Available lesen, nicht On hand.
Verwandte Artikel



