Hallo zusammen,
aktuell suche ich nach einem effizienten Weg Bestände im Shopware 6 Shop automatisiert mit Beständen aus einer anderen API Schnittstelle abzugleichen.
Bisher habe ich es mit der Admin API und einem „/api/_action/sync“ Aufruf probiert. Das funktioniert, allerdings dauert das bei größeren Datenmengen von mehreren Tausend Produkten doch eine Weile.
Schneller scheint es mir zu gehen das ganze direkt in der Datenbank zu aktualisieren.
In der Tabelle „product“ gibt es die Felder „stock“ und „available_stock“. Hat hier jemand Erfahrung damit ob ich die beiden Werte einfach auf den neuen Bestand setzten kann oder ob das irgendwelche Nebeneffekte hätte?
Wir updaten aus Gründen der Performance auch direkt über die DB. Auswirkungen gibt es keine. Allerdings refreshen wir im Anschluss an das Update automatisiert die Cache. Gruß
Ich hab das ganze mittlerweile mal ausprobiert. Auf den ersten Blick scheint das direkte aktualisieren der Bestände über die Datenbank zu funktionieren. Es gibt dann aber doch ein Problem. Die Produkte stehen bei uns auf „abverkauf“. Können also nur gekauft werden, wenn der Bestand größer 0 ist. Nach dem Update des Bestands lassen sich die Produkte dann auch über die Vorschau in den Kategorien in den Warenkorb legen. Auf der Produkt Detail Seite exisitert der Warenkorb Button aber nicht, obwohl der Artikel dort als Sofort Verfügbar angezeigt wird.
Wenn ich im Backend dann einmal manuell den abverkauf aufhebe und wieder aktiviere erscheint der Warenkorb wieder.
Jemand eine Idee woran das liegen könnte und was ich im Shop über die Api triggern muss damit der Warenkorb wieder erscheint.
JA Du musst alle Felder updaten, der Shop berechnet anhand offener Bestellungen den Bestand. Und wenn alles Bestellungen als Ausgeführt stehen und du dennoch das Problem hast, würde ich mir die DB mal ansehen. Wir haben das Phänomen das Bestellungen doppelt angelegt werden mit verschiedenen Statussen deshalb. Ist noch ein WMS oder so im Einsatz?
Immer dann wenn Du ein fremdes System hast in dem der Bestand geführt wird, oder den Bestand zusätzlich zum Shop änderst, muss eine Strategie entwickelt werden, zu welchem Zeitpunkt wie der Bestand korrekt ist im Shop.
Wir haben auch ein externes ERP das die Bestandsführung übernimmt und dann ständig sich mit Shopware abgleichen muss.
Das Problem bei Abverkauf-Produkten ist: Wann kann der Kunde noch bestellen. Shopware errechnet wohl den „verfügbaren Bestand“ aus Lagerbestand, Warenkorbinhalten und noch nicht ausgelieferten Bestellungen. Aber immer nur dann, wenn der Artikel „angefaßt“ wird. Bedeutet: Einfach die Bestände aktualisieren reicht nicht.
Wir aktualisieren diese Felder in der Product-Tabelle direkt per SQL: active, stock, available_stock, available UND updated_at. Und zwar alle 15 Minuten, nach Verarbeitung der übertragenen Bestellungen von SW ans ERP, da uns dann das ERP direk wieder den Bestand zurückgibt. Und leeren anschließend den Cache und stündlich läuft der Index-Dienst.
Das bedeutet aber trotzdem, dass es dazu kommen kann das im Laden etwas verkauft wurde und der Artikel im Shop unter Umständen noch bis 29 Minuten länger verfügbar ist.
Da muss man also eine individuelle Lösung für finden.
Das Problem mit dem tatsächlich verfügbaren Bestand ist tatsächlich kniffelig, aber wir haben uns schon da vorbereitet das es hier und da mal zu Bestellungen von Artikeln kommt, die eigentlich nicht mehr verfügbar sind.
Ich hab jetzt mal die Felder ‚available‘ und ‚updated_at‘ mit aktualisiert beim aktualisieren der Bestände. Leider hat es das Problem nicht gelöst, dass die Änderungne im Frontend nicht direkt wirksam werden. Um ein cache entleeren kommt man wohl nicht herum