Wie Sie
Ihren eigenen E-Shop an die ABRA Flexi-Buchhaltung
anbinden,
haben wir bereits in
einem
besprochen
. Diesmal wird angegeben, wie der aktuelle Lagerbestand aus ABRA Flexi in den E-Shop übertragen werden kann. Wenn Sie die Ein- und Ausgänge nur in der Buchhaltung verfolgen und der E-Shop diese nicht übernimmt, ist dies der beste Weg, um klare Informationen darüber zu erhalten, wie viel von welcher Ware im E-Shop verkauft werden kann. Wie bekomme ich also den Bestandsstatus richtig?
Es gibt mehrere Möglichkeiten. Die meisten E-Shops haben ein eigenes Lager in ABRA Flexi. Normalerweise ist es das Hauptlager. Wenn das Unternehmen auch stationäre Geschäfte hat, verfügt jedes dieser Geschäfte über ein eigenes Lager. Der Warentransfer zu und von den Filialen wird dann durch Transfers aus dem E-Shop-Lager abgewickelt. Nach jeder Bewegung (Eingang und Versand) muss der E-Shop also wissen, dass sich der Bestand an bestimmten Waren verringert oder erhöht hat.
Lagerstatus zum Datum
Die erste Möglichkeit ist die Verwendung der Bestandsdatensätze. Dies ist eine genaue, aber nicht sehr effiziente Methode. Es ist zwar in der Lage, den Bestandsstatus auf ein bestimmtes Datum genau zu berechnen, dies ist jedoch in der Regel nicht erforderlich. Leider ist sie im Vergleich zu den anderen Methoden langsam. Selbst wenn Sie eine Detailanpassung nur auf das anwenden, was Sie interessiert, dauert es sehr lange, bis Sie echte Ergebnisse erzielen.
http://localhost:5434/c/muj_eshop/stav-skladu-k-datu.json?sklad=4&detail=custom:cenik,stavMJ&limit=0
Dieser erste Versuch, den Bestandsstatus abzurufen, dauerte bei 30.000 Datensätzen durchschnittlich 2 Minuten und 20 Sekunden. Dies ist also alles andere als eine optimale Lösung. Es lieferte jedoch genau das, was Sie für Ihren E-Commerce-Shop benötigen - Datensätze mit Preisen und Lagerbeständen. Die Gesamtgröße der json-Datei, die Flexi erzeugt hat, beträgt 6 MB. Es ist zwar möglich, eine Paginierung auszuführen, aber das hilft nicht viel.
Beachten Sie auch, dass mit jedem Monat des Jahres die Anzahl der Bewegungen wächst und die Gesamtzeit, die zum Abrufen der Daten benötigt wird, schlechter wird.
Lagerkarten
Eine weitere Möglichkeit, den aktuellen Lagerbestand zu ermitteln, ist die Verwendung von Lagerkarten für die aktuelle Abrechnungsperiode. Es handelt sich also um ein Paar von Abfragen. Der erste muss die ID der aktuellen Abrechnungsperiode herausfinden. Diese Informationen ändern sich jedoch nicht für den gesamten Abrechnungszeitraum (das ganze Jahr), so dass sie nicht jedes Mal abgerufen werden müssen, wenn Sie den Lagerbestand abfragen.
Die zweite Abfrage sieht dann wie folgt aus:
http://localhost:5434/c/muj_eshop/skladova-karta/(ucetObdobi = 6 und store = 4).json?detail=custom:cenik,stateMJ&limit=0&no-ext-ids=true
Die Abfrage dauert ca. 35 Sekunden und erzeugt ebenfalls ein 6 MB großes json. Auch hier ist es möglich, Paging zu betreiben, aber mehr nur um der Verarbeitung kleinerer Dateien willen.
Warnung. Wenn der Parameter "no-ext-ids=true" nicht verwendet wird, erhöht sich die Zeit auf drei Minuten!
Lagerkarten mit Saldo
Die Anzahl der zu ladenden Lagerkarten kann weiter begrenzt werden. Es ist nicht notwendig, Karten mit einem Null- oder Negativsaldo aufzuladen. Die meisten E-Shops haben nicht alle Produkte auf Lager und ein großer Teil des Sortiments ist auf Bestellung erhältlich. Sie müssen also nur Aktienkarten aufladen, die einen positiven Saldo haben. Bei allen Produkten, die nicht im Ergebnis enthalten sind, wissen wir, dass sie nicht auf Lager sind und können daher den Lagerstatus auf 0 setzen.
http://localhost:5434/c/muj_eshop/skladova-karta/(ucetObdobi = 6 und stock = 4 und stateMJ > 0).json?detail=custom:pricelist,stateMJ&limit=0&no-ext-ids=true
Das resultierende json, das weniger als 1 MB groß ist, wird in 5 Sekunden erzeugt. Dies ist bereits ein erheblicher Unterschied zu den ursprünglichen wenigen Minuten.
Benutzerabfrage - Variante "alle"
Wenn selbst fünf Sekunden zu lang sind, gibt es eine letzte Möglichkeit. Erstellen Sie eine Benutzerabfrage
in Flexi, die noch schneller sein kann.
Die Abfrage sieht dann so aus:
select c.kod, k.stavMj from skarty k left join ccenik c on c.idcenik = k.idcenik where k.iducetobdobdobdobdobi = <> and k.idskladu = <>
Diese Abfrage kann dann natürlich über die REST-API ausgeführt werden, um die Ergebnisse zu erhalten.
http://localhost:5434/c/muj_eshop/uzivatelsky-dotaz/35/call.json?iducetniobdobi=6&idskladu=4&limit=0
Mit einer einfachen Benutzerabfrage sind wir in der Lage, den kompletten Bestandsstatus für alle Datensätze in der Preisliste in 5 Sekunden zu erhalten, unabhängig von ihrem Status (Null oder Nicht-Null). Ein weiterer Vorteil ist, dass das resultierende json 1,1 MB groß ist.
Benutzerabfrage - Option "nur Nicht-Null"
Was aber, wenn wir die Abfrage leicht modifizieren und nur Nicht-Null-Zustände zurückgeben lassen?
select c.kod, k.stavMj from skarty k left join ccenik c on c.idcenik = k.idcenik where k.iducetobdobdobdobdobi = <> and k.idskladu = <> and stavMJ > 0.0
Der Aufruf ist der gleiche wie im vorherigen Fall.
http://localhost:5434/c/muj_eshop/uzivatelsky-dotaz/35/call.json?iducetniobdobi=6&idskladu=4&limit=0
Und die Uhrzeit? Etwa 700ms (0,7 Sekunden).
Das Ergebnis enthält alle notwendigen Informationen und die generierte json ist 145 kB groß. Eine solch kleine Datei lässt sich recht einfach und schnell übertragen und verarbeiten. So ist auch der Speicherbedarf auf der E-Shop-Seite minimal.
Zusammenfassung
Wenn Sie eine Lizenz haben, die Benutzerabfragen
erlaubt, scheuen Sie sich nicht, diese zu verwenden. Sie können die Suchantworten maximieren und die Ergebnisse minimieren. Wenn Sie keine besitzen, ist es immer noch möglich, mit der Standard-API für die Abrechnung von Speicherkarten recht ordentliche Ergebnisse zu erzielen. Überlegen Sie jedoch, ob Benutzerabfragen Ihre Arbeit angenehmer und effizienter machen könnten.
Bemerkung:
Alle Messungen wurden auf localhost auf derselben Firma immer wieder durchgeführt. Während des Tests wurden der Firma keine Datensätze hinzugefügt. Die Preisliste enthielt 30.000 Datensätze. Die Gesamtzahl der Lagerkarten für den Abrechnungszeitraum, an dem wir interessiert waren, betrug 100.000 (500.000 insgesamt) und der Saldo befand sich auf 5.000 Karten.