Preskoči na glavno vsebino

Zistenie stavu skladu pre Eshop

Ako vo Flexi zistiť stav skladu pre Eshop

Avtor: Lenka Haringerová

Napojením vlastného e-shopu na účtovníctvo ABRA Flexi sme sa už zaoberali v samostatnom článku. Tentokrát si upresníme, ako z ABRA Flexi prenášať do e-shopu aktuálny stav skladu. Ak totiž príjemky a výdajky evidujete iba v účtovníctve a e-shop ich nerieši, je to najlepší spôsob, ako získať jasnú informáciu o tom, koľko, akého tovaru možno v e-shope predať. Ako teda stav skladu správne načítať?

Možností je hneď niekoľko. Väčšina e-shopov má v ABRA Flexi zavedený samostatný sklad. Väčšinou to býva hlavný sklad. Ak má firma aj kamenné predajne, každá z nich má svoj vlastný sklad. Prevody tovaru na predajne a z nich sa potom riešia prevodkami zo skladu e-shopu. Po každom pohybe (príjem aj výdaj) sa teda e-shop musí dozvedieť, že stav určitého tovaru sa znížil alebo zvýšil.

Stav skladu k dátumu

Prvou možnosťou je využitie evidencie stavu skladu k dátumu. Ide síce o presný, avšak málo efektívny spôsob. Je síce schopný vypočítať stav skladu presne k určitému dňu, ale to väčšinou nie je potrebné. Bohužiaľ je v porovnaní s ostatnými spôsobmi pomalý. Aj keď použijete detail custom len na to, čo vás zaujíma, získanie reálnych výsledkov trvá veľmi dlho.

http://localhost:5434/c/muj_eshop/stav-skladu-k-datu.json?sklad=4&detail=custom:cenik,stavMJ&limit=0

Tento prvý pokus o načítanie stavu skladu trval v priemere 2 minúty a 20 sekúnd na 30 000 záznamoch. Ani zďaleka teda nejde o optimálne riešenie. Vrátil však presne to, čo pre e-shop potrebujete – záznamy obsahujúce cenník a stav skladu. Celková veľkosť json súboru, ktorý Flexi vygenerovalo, je 6 MB. Je síce možné spustiť stránkovanie, ale veľmi nepomôže.

Pozor aj na to, že s každým ďalším mesiacom v roku bude počet pohybov rásť a celkový čas potrebný na získanie dát sa bude zhoršovať.

Skladové karty

Ďalšou možnosťou, ako získať aktuálny stav skladu, sú skladové karty pre aktuálne účtovné obdobie. Ide teda o dvojicu dotazov. Prvým potrebujete zistiť ID aktuálneho účtovného obdobia. Táto informácia sa však počas celého účtovného obdobia (celý rok) nemení a nie je teda potrebné ju načítavať pri každom dotaze na stav skladu.

Druhý dotaz potom vyzerá takto:

http://localhost:5434/c/muj_eshop/skladova-karta/(ucetObdobi = 6 and sklad = 4).json?detail=custom:cenik,stavMJ&limit=0&no-ext-ids=true

Dotaz trvá okolo 35 sekúnd a vygeneruje tiež json o veľkosti 6 MB. Opäť je možné spustiť stránkovanie, ale skôr len z dôvodu spracovania menších súborov.

Pozor. Ak sa nepoužije parameter „no-ext-ids=true", čas sa zvýši až na tri minúty!

Skladové karty so zostatkom

Počet načítavaných skladových kariet možno ešte obmedziť. Nie je totiž nutné načítavať karty s nulovým alebo záporným zostatkom. Väčšina e-shopov nemá všetky produkty skladom a veľká časť sortimentu je dostupná na objednávku. Takže stačí načítať len skladové karty, ktoré majú kladný zostatok. O všetkých produktoch, ktoré sa nevyskytujú vo výsledku, vieme, že nie sú skladom, a môžeme teda stav skladu nastaviť na 0.

http://localhost:5434/c/muj_eshop/skladova-karta/(ucetObdobi = 6 and sklad = 4 and stavMJ > 0).json?detail=custom:cenik,stavMJ&limit=0&no-ext-ids=true

Výsledný json o veľkosti necelý 1 MB je vygenerovaný za 5 sekúnd. To je už celkom zásadný rozdiel oproti pôvodným niekoľkým minútam.

Používateľský dotaz – varianta „všetko"

Ak je aj päť sekúnd príliš dlhá doba, existuje ešte posledná možnosť. Vytvoriť si vo Flexi používateľský dotaz, 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.iducetobdobi = <> and k.idskladu = <>

Tento dotaz je následne samozrejme možné spustiť cez REST-API a získať výsledky.

http://localhost:5434/c/muj_eshop/uzivatelsky-dotaz/35/call.json?iducetniobdobi=6&idskladu=4&limit=0

Jednoduchým používateľským dotazom sme schopní za 5 sekúnd získať kompletný stav skladu pre všetky záznamy v cenníku, bez ohľadu na ich stav (nulový alebo nenulový). Ďalšou výhodou je, že výsledný json má veľkosť 1,1 MB.

Používateľský dotaz – varianta „len nenulové"

Čo ak ale dotaz mierne upravíme a necháme si vrátiť len nenulové stavy?

select c.kod, k.stavMj from skarty k left join ccenik c on c.idcenik = k.idcenik where k.iducetobdobi = <> and k.idskladu = <> and stavMJ > 0.0

Volanie je rovnaké ako v predchádzajúcom prípade.

http://localhost:5434/c/muj_eshop/uzivatelsky-dotaz/35/call.json?iducetniobdobi=6&idskladu=4&limit=0

A čas? Okolo 700 ms (0,7 s).

Výsledok obsahuje všetky potrebné informácie a vygenerovaný json má veľkosť 145 kB. Takto malý súbor sa celkom ľahko a rýchlo prenáša a spracováva. Takže aj pamäťová náročnosť na strane e-shopu je minimálna.

Zhrnutie

Ak vlastníte licenciu povoľujúcu Používateľské dotazy, nebojte sa ich využívať. Dokážete tak maximálne zrýchliť odozvy vyhľadávania aj minimalizovať výsledky. Ak ju nevlastníte, je stále možné dosiahnuť celkom slušné výsledky s využitím štandardného API evidencie skladových kariet. Zamyslite sa však nad tým, či by vám používateľské dotazy nemohli spríjemniť a zefektívniť prácu.

Poznámka:

Všetky merania boli vykonávané na localhoste na stále rovnakej firme. Počas testovania nepribudol do firmy žiadny záznam. Cenník obsahoval 30 000 záznamov. Celkový počet skladových kariet pre účtovné obdobie, ktoré nás zaujímalo, bol 100 000 (celkovo ich bolo 500 000) a zostatok bol na 5 000 kartách.

Ste s tem dobili odgovor na svoje vprašanje?