Pripojeniu vlastného e-shopu k účtovníctvu ABRA Flexi sme sa už venovali v samostatnom článku. Tentokrát uvedieme, ako preniesť aktuálny stav zásob z ABRA Flexi do e-shopu. Ak v účtovnom systéme sledujete len príjemky a výdajky a e-shop ich nespracúva, je to najlepší spôsob, ako získať prehľadné informácie o tom, koľko a akého tovaru sa dá v e-shope predať. Ako teda správne načítať stav zásob?
Existuje niekoľko možností. Väčšina e-shopov má v systéme ABRA Flexi samostatný sklad. Zvyčajne je to hlavný sklad. Ak má spoločnosť aj kamenné predajne, každá z nich má vlastný sklad. Presuny tovaru do predajní a z nich sa potom realizujú prostredníctvom presunov zo skladu e-shopu. Po každom pohybe (prijatí a odoslaní) teda musí e-shop vedieť, že sa zásoba určitého tovaru znížila alebo zvýšila.
Stav zásob k dátumu
Prvá možnosť je použiť stav skladu k dátumu. Táto metóda je síce presná, ale nie veľmi účinná. Hoci dokáže vypočítať stav skladu presne k určitému dátumu, zvyčajne to nie je potrebné. V porovnaní s ostatnými metódami je však pomalá. Dokonca aj keď použijete detailný zvyk len na to, čo vás zaujíma, trvá veľmi dlho, kým dosiahnete skutočné výsledky.
http://localhost:5434/c/muj_eshop/stav-skladu-k-datu.json?sklad=4&detail=custom:cenik,stateMJ&limit=0
Tento prvý pokus o načítanie stavu zásob trval v priemere 2 minúty a 20 sekúnd pri 30 000 záznamoch. Toto riešenie teda zďaleka nie je optimálne. Vrátil však presne to, čo potrebujete pre svoj e-shop - záznamy obsahujúce ceny a stav zásob. Celková veľkosť súboru json vygenerovaného systémom Flexi je 6 MB. Hoci je možné spustiť stránkovanie, veľmi to nepomôže.
Tiež si uvedomte, že s každým ďalším mesiacom v roku sa počet pohybov zvyšuje a celkový čas potrebný na získanie údajov sa zhoršuje.
Skladové karty
Ďalším spôsobom, ako získať aktuálny stav zásob, je použitie skladových kariet pre aktuálne účtovné obdobie. Ide teda o dvojicu otázok. V prvom prípade je potrebné získať ID aktuálneho účtovného obdobia. Táto informácia sa však nemení počas celého účtovného obdobia (celý rok), takže nie je potrebné ju načítavať pri každom dotazovaní na stav zásob.
Druhý dotaz potom vyzerá takto:
http://localhost:5434/c/muj_eshop/skladova-karta/(ucetObdobi = 6 a store = 4).json?detail=custom:pricing,stateMJ&limit=0&no-ext-ids=true
Dotaz trvá približne 35 sekúnd a zároveň generuje 6 MB veľký súbor json. Opäť je možné spustiť stránkovanie, ale skôr len kvôli spracovaniu menších súborov.
Upozornenie. Ak sa nepoužije parameter "no-ext-ids=true", čas sa zvýši až na tri minúty!
Skladové karty so zostatkom
Počet vložených skladových kariet možno ďalej obmedziť. Nie je potrebné dobíjať karty s nulovým alebo záporným zostatkom. Väčšina e-shopov nemá všetky výrobky na sklade a veľkú časť sortimentu si môžete objednať. Takže stačí nabiť len tie skladové karty, ktoré majú kladný zostatok. O všetkých produktoch, ktoré nie sú vo výsledku, vieme, že nie sú na sklade, a preto môžeme nastaviť stav zásob na 0.
http://localhost:5434/c/muj_eshop/skladova-karta/(ucetObdobi = 6 a stock = 4 a stateMJ > 0).json?detail=custom:price,stateMJ&limit=0&no-ext-ids=true
Výsledný súbor json s veľkosťou menej ako 1 MB sa vygeneruje za 5 sekúnd. To je už dosť výrazný rozdiel oproti pôvodným niekoľkým minútam.
Používateľský dotaz - "všetko"
Ak je aj päť sekúnd príliš veľa, je tu ešte jedna možnosť. Vytvorte používateľský dotaz vo Flexi, ktorý môže byť ešte rýchlejší.
Dotaz bude vyzerať takto:
select c.kod, k.stavMj from skarty k left join ccenik c on c.idcenik = k.idcenik where k.iducetobdobdobi = <> and k.idskladu = <>
Tento dotaz potom samozrejme môžete spustiť prostredníctvom rozhrania REST-API a získať výsledky.
http://localhost:5434/c/muj_eshop/uzivatelsky-dotaz/35/call.json?iducetniobdobi=6&idstock=4&limit=0
Pomocou jednoduchého používateľského dotazu dokážeme za 5 sekúnd získať kompletný stav skladu pre všetky záznamy v cenníku, bez ohľadu na to, aký je ich stav (nulový alebo nenulový). Ďalšou výhodou je, že výsledný json má veľkosť 1,1 MB.
Používateľský dotaz - "iba nenulové"
Ale čo ak dotaz mierne upravíme a necháme vrátiť len nenulové stavy
select c.kod, k.stavMj from skarty k left join ccenik c on c.idcenik = k.idcenik where k.iducetobdobdobi = <> and k.idskladu = <> and stavMJ > 0.0
Volanie je rovnaké ako v predchádzajúcom príklade.
http://localhost:5434/c/muj_eshop/uzivatelsky-dotaz/35/call.json?iducetniobdobi=6&idstock=4&limit=0
A čas? Približne 700 ms (0,7 sekundy).
Výsledok obsahuje všetky potrebné informácie a vygenerovaný json má veľkosť 145 kB. Takýto malý súbor sa dá pomerne ľahko a rýchlo preniesť a spracovať. Takže aj pamäťové nároky na strane e-shopu sú minimálne.
Obsah
Ak máte licenciu umožňujúcu Používateľské dotazy, môžete ich použiť. Môžete maximalizovať odpovede na vyhľadávanie a minimalizovať výsledky. Ak ho nevlastníte, stále je možné dosiahnuť celkom slušné výsledky pomocou štandardného rozhrania API pre záznam skladových kariet. Zamyslite sa však nad tým, či by používateľské dotazy mohli spríjemniť a zefektívniť vašu prácu.
Poznámka:
Všetky merania boli vykonané na localhost v tej istej spoločnosti opakovane. Počas testovania neboli do firmy pridané žiadne záznamy. Cenník obsahoval 30 000 záznamov. Celkový počet skladových kariet za účtovné obdobie, ktoré nás zaujímalo, bol 100 000 (spolu 500 000) a zostatok bol na 5 000 kartách.