SCM - obecně
Obsah kapitoly:
SCM = Supply Chain Management. SCM je proces plánování, implementace a kontroly dodavatelského řetězce s cílem co nejefektivněji naplnit požadavky zákazníků. SCM zahrnuje veškeré skladování a přesuny materiálů, produktů nedokončené výroby a výrobků z místa původu do místa spotřeby.
Modul SCM v systému představuje soubor nástrojů a procesů k optimalizaci řízení tohoto dodavatelského řetězce s ohledem na koncového zákazníka, tedy nástrojů pro analýzu dodavatelského řetězce (rozbor budoucích požadavků a sledování jejich pokrytí) a pro zajišťování dodávek (neboli zajišťování zdrojů pro tyto požadavky).
Pojmem Zdroje myslíme doklady příp. jiné záznamy, které dokáží zajistit přírůstek položek reprezentovaných skladovými kartami. Např.: Objednávky vydané, Požadavky na objednávky vydané, Stav skladu,Požadavky na výrobu (vyrobení výrobku), Výrobní příkazy (vyrobení výrobku),Kompletační listy (vyrobení výrobku), Výrobní listy Gastro výroby.
Pojmem Požadavky myslíme doklady, které naopak skladové položky požadují / spotřebovávají. Např. Objednávky přijaté, Spodní limity na skladových kartách,Požadavky na výrobu (požadavek na materiál), Výrobní příkazy (požadavek na materiál),Kompletační listy (materiál), Výrobní listy (materiál). Při sledování budoucích požadavků na sklad. položku a jejího pokrytí může nastat stav, kdy nyní nebo někdy v budoucnosti dojde k zápornému stavu na skladě. Tento stav může ohrozit plynulost dodávek zboží nebo výrobků zákazníkům a budeme ho označovat pojmem Krize. Pokud je záporný stav jenom dočasný a z existujících dokladů již v daný okamžik plyne, že budoucí požadavky budou následně pokryty, pak budeme tento stav označovat jako Dočasná krize.
Stěžejní agendy, v nichž uživatel získává potřebné informace na základě dat z datových zdrojů, jsou Bilance, Vývoj, Pokrytí dokladu. V dalším textu je budeme označovat též jako Funkční agendy SCM.
Zásobovač v obchodní firmě má za úkol pravidelně, kontinuálně a včas zajišťovat dodávku zboží. Přitom řeší otázky: Co nakoupit, kdy to nakoupit, kolik a od koho. Jistě není třeba ručně procházet jednotlivé objednávky přijaté, jejich řádky třídit podle dodavatelů a pro každého vytvářet objednávku vydanou. Takový způsob by byl značně neefektivní. K tomu může využít Průvodce tvorbou požadavků na OV. Tím lze kumulovat požadavky na OV a tvořit výsledné OV za více OP kumulovaně. Lze vzít v potaz i již objednané množství na OV, lze zohlednit výběr dodavatele dle různých kritérií apod. V praxi však možností, jak zajistit zboží, může být více. Nemusí se např. pouze objednávat, někdy ho stačí pouze převést z jiného skladu. Lze si ho na určitou OP také "půjčit" z jiné nevyřízené OP, která má pozdější termín dodání nebo jí nelze vyřídit, protože na ní chybí i jiné zboží. K tomu je však třeba mít včasné a přesné informace, které nejsou a ani nemohou být v průvodci tvorbou požadavků na OV k dispozici. Není ani kontrola nad tím, kdy bude zboží na objednávce zajištěno a tedy, zda bude dodáno včas. Pokud takové informace chce mít k dispozici, využije modul SCM.
Uživatel si spustí agendu Bilance skladových položek a na záložce Omezení vybere definici sloupců, která určí, jaké informace se mu budou v bilanci zobrazovat. Poté si v omezení vybere skladové karty, které ho zajímají, a vyvolá funkci Získat záznamy bez vyprázdnění vyrov. paměti.
Na záložce Seznam uvidí pro vybrané skladové karty informace o požadavcích (např. objednávkách přijatých) a zdrojích (např. objednávkách vydaných), které se vybraných karet týkají. Ve sloupci Zajistit se mu předvyplní množství, které je potřeba u skladových položek zajistit, a záznamy položek, u kterých nastala krize, se podbarví červeně. Uživatel si může v seznamu nechat zobrazit pouze záznamy s krizemi.
Označí si položky, které si přeje zajistit, a spustí Průvodce zajištěním zdrojů. V průvodci se mu zobrazí seznam položek. V tomto seznamu jsou u každé položky informace o tom, jakým dokladem se má položka zajistit, v jaké řadě se má doklad vytvořit apod. Tyto údaje může uživatel vyplnit ručně, nebo může využít pravidla pro předvyplnění, která umožní tuto úlohu automatizovat. Poté spustí generování dokladů a po jeho dokončení si může prohlédnout seznam vytvořených dokladů. Pro každý doklad může otevřít agendu a detailně si jej prohlédnout.
Uživatel zjistí v agendě Bilance, že u konkrétní položky je indikována krize – je vyplněný sloupec Datum krize a Doklad krize a celý řádek je podbarven červeně. Uživatel potřebuje vědět bližší informace, a proto vyvolá nad tímto záznamem agendu Vývoj skladové položky. V této agendě se mu zobrazí přehled budoucích pohybů, u každého pohybu je vidět průběžný stav položky. Na základě těchto informací se může rozhodnout, jak kritické místo vyřeší – pokud je např. krize pouze jeden den (dočasná krize), nebude potřeba žádná akce, naopak pokud bude trvat krize déle a hrozilo by zpoždění zakázky, bude muset krizi řešit.
Záznamy v agendě Bilance si lze zafiltrovat jen za krize resp. dočasné krize.
Uživatel si přidá do agendy objednávek přijatých definovatelný sloupec typu Objekt. Ve výrazu pro tento sloupec použije QuickReports funkce SCMDocumentCoverage, která vrátí míru pokrytí dokladu v procentech. Např. SCMDocumentCoverage ('Obchod', 'RO', ID, True, False). Případně si může i nastavit sloupec, aby zobrazoval procentuální hodnotu graficky v podobě sloupcového grafu (pak výraz vydělit ještě stem SCMDocumentCoverage ('Obchod', 'RO', ID, True, False)/100). Viz též editor sloupců - způsob zobrazení - procentní sloupec.
Když mu pak zavolá zákazník a přeje si vědět, jak to vypadá s jeho objednávkou, uživatel má okamžitě vizuální přehled.
Příklad využití funkcí SCM pro rychlé orientační zobrazení pokrytí objednávek
Pomocí 4. a 5. parametru lze nastavit, jak se procento pokrytí má vyčíslovat: 4. parametr - zda se procento pokrytí bude zobrazovat za zadaný sklad či za všechny sklady, 5. parametr - zda se procento pokrytí bude vyčíslovat z počtu zcela pokrytých řádků vzhledem k celkovému počtu řádků nebo průměrem z pokrytí jednotlivých řádků (tedy dle vzorce 1/n*x1/y1+1/n*x2/y2, kde n je počet řádků, y je požadovaný počet v daném řádku, x je počet, který je pokryt.
Viz též kap. Často kladené otázky k SCM - otázka Jak si rychle zobrazit pokrytí více dokladů najednou?.
Zobrazované pokrytí dokladu je relevantní jedině tehdy, pokud zobrazovaný doklad splňuje podmínky pro načtení do vyrovnávací paměti a je v ní načten! (Viz dále Poskytovatel dat.) Např. pokud datový zdroj je definován tak, že načítá jen potvrzené OP, nemá smysl si zobrazovat pokrytí u nepotvrzené OP (zobrazená hodnota je irelevantní). Rovněž pokud jste v zobrazovaném seznamu zadali nový doklad, je třeba provést vyprázdnění a nové načtení vyrovnávací paměti (viz možnosti načtení vyrovnávací paměti), aby se nový doklad do ní načetl a zobrazovaná hodnota pokrytí byla správná.
Mějme objednávku přijatou (OP), na ní dva řádky na sklad 01:
- ř.1: karta K1 na 1ks ... (na skladě je víc než 1 ks ⇒ tj. řádek je 100%-ně pokryt
- ř.2: karta K2 na 3ks ... (na skladě 1 je 1ks, na skladě 2 v počtu 2ks ⇒ tj. za sklad 1 je pokryto 33%-ně, za všechny sklady pokryto 100%-ně).
Je-li sloupec definován jako SCMDocumentCoverage('Obchod', 'RO', ID, False, False)/100), bude pokrytí 50% (pokryt je jen 1 řádek ze dvou), je-li SCMDocumentCoverage('Obchod', 'RO', ID, False, True)/100), pak bude pokrytí 67% (=1/2*1/3+1/2*1/1).
V příkladu č.3 jsme si ukázali funkci na zjištění pokrytí celého dokladu. Nyní si v příkladu ukážeme funkci na pokrytí konkrétních řádků dokladu. Opět využijeme QuickReports funkce, tentokrát s názvem SCMDocumentRowCoverage, která vrátí pokrytí řádků dané skladové karty požadovaného dokladu v procentech. Funkci lze využit například v definovatelném panelu na obsahu dokladu, kde ukáže pokrytí řádku na kterém je fokus.
Např: SCMDocumentRowCoverage('Obchod', 'RO', Parent_ID.ID, StoreCard_ID, false).
Funkce zobrazuje stejné výsledky (jen bez použitého zaokrouhlení) jako funkce přes tlačítko SCM, Pokrytí dokladu.
Před použitím funkce je nutné spustit nad libovolným dokladem funkci Pokrytí dokladu přes tlačítko SCM s použitím funkce Získat záznamy s vyprázdněním vyrov. paměti. Tím dojde k občerstvení a načtení dat.
Jedná se o využití doplňku SCM - Vývoj. Viz kap. Často kladené otázky k SCM - otázka Jak si zobrazit vývoj SCM rovnou i v jiných agendách?
Uživatel si otevře agendu objednávek přijatých a označí si doklady, pro které si přeje zajistit zboží. Poté spustí průvodce zajištěním zdrojů, ve kterém budou zobrazeny skladové položky z vybraných objednávek. Uživatel si vybere pravidlo pro zajištění, které používá pro vytváření objednávek vydaných, a spustí předvyplnění. U všech položek se mu nastaví jako typ dokladu objednávka vydaná a podle nastavení pravidel se mu vyplní ostatní položky.
Uživatel přejde na další krok průvodce a tím spustí generování dokladů, jejichž seznam se mu poté zobrazí. Pro libovolný doklad nebo pro všechny doklady současně si může otevřít agendu objednávek vydaných.
Z výše uvedeného plyne, že modul má využití nejen ve výrobních firmách (kde je v zásadě nutností), ale i ve firmách obchodních.
Aby agendy Bilance, Vývoj, Pokrytí dokladu poskytly požadované informace, je třeba po jejich spuštění nejdříve určit, jaké informace si právě přejeme zobrazit a z jakých dat se mají načerpat. (Ne vždy a ne každý chce vidět data stejným způsobem. Někdy potřebujeme data pouze za jedno středisko, jindy chceme mít kompletní přehled. Jiná data potřebuje zásobovač, jiná obchodník atd.). To se děje zvolením požadované definice v dané agendě (definice sady datových zdrojů či definice sloupců bilance, viz dále), která toto specifikuje.
Datového zdroje - Všechna data pro SCM jsou získávána prostřednictvím definovaných SQL dotazů a jsou ukládána do tzv. vyrovnávací paměti a odtud se teprve čerpají do agend SCM, reportů či OLE (z důvodu rychlosti nejsou průběžně čerpána přímo z databáze). (To zajišťuje tzv. poskytovatel dat, viz dále, nicméně to se děje interně a uživatel se tím nemusí nijak zabývat). Tyto SQL dotazy se definují v rámci Datového zdroje v číselníku Datové zdroje. Datový zdroj tedy obsahuje SQL dotaz, který se použije pro získání dat, a seznam výstupních položek, které má vracet. SQL dotaz je definovaný pevně, nedoplňují se do něj dynamicky omezení apod. (jako je tomu např. u dynamických zdrojů dat (DynSQLs)). Existují různé druhy datových zdrojů. Každý druh je primárně určen pro něco jiného. Je možné si nejen definovat vlastní zdroje vracející informace o pohybech z dokladů, o stavech skladů apod., ale i definovat si vlastní zdroje pro seznam skladových karet a pro seznam skladů (viz též pevné sloupce Bilance) a sloupce z těchto zdrojů následně použít v omezení v agendách SCM. Viz Druhy datových zdrojů. (Sestavování omezujících prvků v Omezení viz kap. Záložka Omezení funkčních agend SCM.) Každý datový zdroj musí některé položky obsahovat povinně. (Viz též Povinné výstupní položky, Podmínky pro SQL dotaz.)
Můžeme mít datový zdroj "OP", který bude nadefinován následovně: Bude načítat data z objednávek přijatých, které jsou vystaveny s určitým datem dodání, jsou potvrzeny, nejsou uzavřeny a ještě na jejich skladových řádcích zbývá nějaké nedodané zboží. Z těchto objednávek bude vracet položky odkaz na skladovou kartu (jako položku StoreCard_ID), sklad (jako položku Store_ID), firmu (jako položku Firm_ID), zakázku, řadu dokladů, množství (jako položku Quantity) apod. Obdobně můžeme mít nadefinovaný datový zdroj "OV", který bude načítat za stejných podmínek data z objednávek vydaných. Vedle toho můžeme mít nadefinovaný jiný datový zdroj "OP2", který bude načítat data ze všech objednávek přijatých bez ohledu na stav potvrzení (jelikož jej např. nepoužíváme). Dále můžeme mít nadefinován datový zdroj "Stav skladu", který bude načítat data z dílčích skladových karet a který bude kromě odkazu na sklad. kartu a sklad vracet stav skladu apod.
Definice sloupců bilance - Jednotlivé datové zdroje vstupují do definic sloupců bilance. V agendě Bilance si lze totiž do značné míry definovat, jaké sloupce zde mají být a co mají zobrazovat. Je zde totiž několik typů sloupců a to jednak pevné sloupce bilance (např. kód a název skl. karty, kód a název skladu, výsledné množství bilance, ...), jednak definované sloupce bilance (definované právě na základě jedné z definic sloupců bilance) a dále filtrované sloupce bilance. Více viz Typy sloupců v Bilanci. Definic sloupců bilance opět může být víc. Každá definice sloupců bilance se jednak odkazuje na jedno z nastavení SCM, kterých může být opět více a které určuje jednak nastavení zobrazení bilance (tj. masky, barvy v případě krizí atd.) a dále určuje, jaké dat. zdroje se mají použít pro získání seznamu skladových karet a skladů (a naplnění sloupců Kód a název skl. karty atd. (jedny z pevných sloupců bilance)). Viz též Druhy datových zdrojů. Dále každá definice sloupců bilance obsahuje seznam sloupců, které má bilance dále obsahovat (tj. právě ty výše zmíněné definované sloupce bilance). Tyto definované sloupce mohou být buď datové nebo počítané. Tj. u každého je uvedeno, jestli má zobrazovat přímo některou z položek z nějakého datového zdroje a jakou (typicky půjde o položku nesoucí informaci o množství z daného zdroje dat (Quantity), ale použít lze z dat. zdroje i libovolnou jinou, má-li její zobrazení v bilanci pro vás smysl), či jestli má být sloupec počítaný (např. součet dvou jiných sloupců). Více viz sloupce datové a počítané. Přičemž, pokud se jedná o množství, lze určit, zda má být započteno do sloupce s výsledkem bilance (jeden z pevných sloupců bilance)). V agendě Bilance pak uživatel volí právě jednu z těchto definic sloupců bilance. Z toho vyplyne, podle jakých datových zdrojů se prostřednictvím poskytovatele dat načtou data pro následné zobrazení a jaké budou v Bilanci sloupce. Rovněž z toho vyplyne, jaké omezující prvky budou k dispozici v záložce Omezení bilance. (Sestavování omezujících prvků v Omezení viz kap. Vytvoření seznamu omezovacích prvků.)
Definice sloupců bilance musí obsahovat alespoň jeden sloupec datový odkazující se do nějakého datového zdroje druhu "Dokladový" nebo "Stavový" (aby podle něj bylo možno načíst údaje do pevně daných sloupců bilance, tj. skladové karty, sklady, ....). Výstupní položky StoreCard_ID a Store_ID obsahuje každý datový zdroj, viz povinné položky datového zdroje.
Sady datových zdrojů - Z jednotlivých datových zdrojů lze dále sestavovat sady datových zdrojů v číselníku Sady datových zdrojů. Sad datových zdrojů může být více a to proto, že ne vždy a ne každý chce vidět data stejným způsobem, jak bylo zmíněno výše. Každá sada datových zdrojů se jednak odkazuje na jedno z nastavení SCM, kterých může být opět více a které určuje jednak nastavení zobrazení (tj. masky, barvy v případě krizí atd.) a dále určuje, jaké dat. zdroje se mají použít pro získání seznamu skladových karet a skladů. Viz též Druhy datových zdrojů. Dále každá sada obsahuje výběr datových zdrojů, které se mají v daný okamžik použít pro načtení dat pro SCM. Kromě toho umožňuje uživateli ke každému v ní obsaženému datovému zdroji stanovit omezení pro načítaná data, např. omezení za skladové karty, pokud ví, že ho bude zajímat jen určitý sklad resp. že bude chtít zásobování skladu provádět po sortimentech zboží nikoli pro celý sklad najednou. Dále si v sadě datových zdrojů lze pro agendu Vývoj dodefinovat, jaké další sloupce zde mají být a co mají zobrazovat. Je zde totiž několik typů sloupců (obdobně jako v Bilanci, viz výše)) a to jednak pevné sloupce vývoje (např. kód a název skladu, ...), jednak definované sloupce vývoje (definované právě na základě jedné ze sad datových zdrojů). Více viz Typy sloupců ve Vývoji. V agendách Vývoj a Pokrytí dokladů pak uživatel volí právě jednu z těchto sad. Z toho vyplyne, podle jakých datových zdrojů se prostřednictvím poskytovatele dat načtou data pro následné zobrazení a jaké budou ve Vývoji sloupce. Rovněž z toho vyplyne, jaké omezující prvky budou k dispozici v záložce Omezení agendy Vývoj resp. Pokrytí dokladu. (Sestavování omezujících prvků v Omezení viz kap. Vytvoření seznamu omezovacích prvků.) Sady mají použití i v bilanci, viz dále.
Omezení by mohl uživatel zadat až ve funkčních agendách SCM, nicméně pokud si jej nadefinuje rovnou v definici sady, odezva bude rychlejší (do vyrovnávací paměti se bude načítat méně dat).
Mějme nadefinovánu sadu "Obchod", která obsahuje datové zdroje z předchozího příkladu OP, OV, Stav skladu. Pokud tuto sadu použijeme v agendě Vývoj, získáme k jednotlivým skladovým kartám údaje, které jsou výsledkem vyhodnocení dat načtených z objednávek přijatých a vydaných splňujících podmínky uvedené v předchozím příkladu (tj. z potvrzených, neuzavřených,...) a dále z informací o stavech skladů načtené z dílčích skladových karet. Kromě toho ale můžeme mít např. sadu "Obchod - jen za pobočku", kde navíc u jednotlivých datových zdrojů zadáme omezení jen za sklady pobočky.
Definice sady datových zdrojů musí obsahovat alespoň jeden datový zdroj druhu "Dokladový" (aby podle něj bylo možno načíst údaje do pevně daných sloupců, tj. sklady aj. ....) a neměla by obsahovat ostatní druhy. Výstupní položky StoreCard_ID a Store_ID obsahuje každý datový zdroj, viz povinné položky datového zdroje.
Výše uvedené dokresluje následující schématický obrázek:
Pro produkt ABRA Gen s daňovou evidencí nejsou k dispozici výrobní doklady VYP a POZ.
Pokud jsou stanoveny datové zdroje a sestaveny z nich sady datových zdrojů a definice sloupců bilance, lze začít používat agendy, které zobrazují data z těchto dat. zdrojů: Vývoj, Pokrytí dokladu a Bilanci.
Agenda Vývoj položky nám přehledně zobrazí očekávaný vývoj stavu karty.
Vývoj položky určité skl. karty A může být např. následující:
Datum | Doklad | Sklad | Pohyb | Průb. stav skladu |
---|---|---|---|---|
10.10. | Stav skladu | HL | +150 | +150 |
14.10. | OV-15 | HL | +20 | +170 |
18.10. | OP-21 | HL | -70 | +100 |
18.10. | OP-25 | HL | -120 | -20 |
První položkou je aktuální stav skladu a následuje seznam dokladů s počtem na dokladu a průběžným stavem skladu. Některé doklady průběžný stav zvyšují (zdroje), jiné snižují (požadavky). Pokud se v průběžném stavu někde objeví záporné číslo, znamená to nepokrytý stav, který vyžaduje zvláštní pozornost. Z pohledu obchodníka vyjadřuje riziko, že daná objednávka přijatá nebude včas vyřízena. Z pohledu zásobovače požadavek na zajištění.
Takový přehled je užitečný zejména v kombinaci s tím, že jej lze rychle spustit z místa, kde jej potřebujeme. Lze si tak např. na řádku OP rychle a jednoduše zkontrolovat, zda je zboží zajištěno (na skladě nebo již objednáno). Pokud bychom chtěli znát stejnou informaci o celé objednávce, není třeba postupně procházet její řádky a dělat si vývoj každé položky zvlášť, ale lze využít agendu Pokrytí dokladů, která si provede vývoj pro všechny položky dokladu a zobrazí souhrnnou informaci o procentu zajištění dokladu. Pro 100%-ně zajištěné doklady pak má význam provést příslušnou následnou akci, což např. u objednávek může být potvrzení data dodání odběrateli, výrobní příkazy zajištěné materiálem spustit do výroby apod.
Agenda Bilance má význam především pro zásobovače. Slouží k celkovému pohledu na bilanci vybraných skladových karet. Bilance je agenda, která se vztahuje k vícero skladovým kartám. Je jí tedy možné volat z agendy Skladové karty a Dílčí skladové karty (zde jsou informace automaticky omezeny za 1 sklad) a zobrazuje bilanci pro označené karty. Dále ji lze volat z agend různých dokladů, pro něž má smysl sledovat zajištění sklad. položek a to pro skladové karty ze všech označených dokladů. Bilance těsně spolupracuje s agendami Vývoj položky a Zajištění zdrojů. Lze tedy z Bilance volat obě agendy a naopak z těchto agend volat Bilanci. Vývoj jí slouží k zobrazení detailu o vybrané kartě a Zajištění je nástroj, který zajistí chybějící množství u položek, které Bilance odhalila.
Bilance může být např. následující:
Skl. karta | Stav skladu | OP | OV | Limit | Celkem | Zajistit | Krize |
---|---|---|---|---|---|---|---|
A | +150 | -190 | +20 | -20 | +20 | Ano | |
B | +100 | -50 | +40 | -150 | -60 | +60 | Ne |
C | +130 | -60 | +30 | -50 | +50 | 0 | Ne |
D | +150 | -190 | +70 | +30 | +20 | Ano |
Každý řádek Bilance přísluší jedné skladové kartě za daný sklad. Jsou na něm zaznamenány informace jako v agendě Vývoj položky, ale v souhrnné podobě. Význam informací plynoucích z jednotlivých řádků:
- Karta A: - 1. řádek odpovídá příkladu uvedeném výše na Vývoj položky. Vidíme, že dvě objednávky přijaté na 70 a 120 kusů jsou zaznamenány souhrnně jako 190 kusů. Stav skladu jde pod nulu, tedy nastal stav krize.
- Karta B: - Na 2. řádku stav krize nenastává, přesto je třeba nějak zajistit chybějící množství. Vidíme, že v bilanci se mohou objevit sloupce, které se ve Vývoji neobjevují. V tomto případě se jedná o spodní limit skladu. Druhý řádek pro kartu B vyjadřuje stav, kdy v žádné chvíli zboží na skladě nechybí, ale dostáváme se pod spodní limit skladu, a proto je záhodno zajistit chybějící množství 60 ks.
- Karta C: - 3. řádek vyjadřuje stav, kdy je vše v pořádku a nic není třeba zajišťovat.
- Karta D: - 4. řádek by odpovídal prvnímu řádku pro kartu A (příklad na Vývoj) v případě, kdyby ve vývoji po 18.10. existovala OV na 50 kusů. Tím bychom se celkově dostali do kladného čísla na 30 ks. Přesto by v určité fázi vývoje po 18.10. šel očekávaný stav skladu do minusu. Došlo by ke krizi a je potřeba jí nějak řešit. Řešení závisí na uživateli. Buď může zajistit objednávku aspoň 20 kusů, která dorazí do 18.10. nebo vykomunikovat, že OP-21 nebo OP-25 bude dodána později až po dodání zboží z OV na již zmíněných 50 ks.
K vlastnímu zajištění zdrojů je určena agenda Průvodce zajištěním zdrojů. Lze jí spouštět samostatně nebo z jiných agend (z dokladů požadavků (OP, POZ, ...), z agendy Bilance, ...), které jí předávají informace o kartách, které je potřeba zajistit a o požadovaném množství. V agendě lze pak ke každé kartě zvolit způsob zajištění (objednávkou, požadavkem na OV, požadavkem na výrobu,...), další doplňující údaje (řada dokladů, firma, středisko,...) a nechat si příslušné doklady vygenerovat. Pokud je spuštěna z objednávek přijatých, lze vynechat krok počítání bilance a nechat si připravit k zajištění pouze karty z objednávky v množství na objednávce. Tím lze realizovat možnost "přímého" generování objednávek vydaných (OV) podle objednávek přijatých (OP).
Při zajišťování dokladů po jednom může dojít k následujícímu nežádoucímu efektu: Takto zajišťovaný doklad se bude nakonec stejně "tvářit" jako nepokrytý. Dále viz kap. Často kladené otázky k SCM, otázka Mám dvě OP, k nim OV, žádný jiný požadavek, přesto se mi obě OP jeví jako zcela nepokryté. Jak to?. Dále viz též otázka Pokrytí u nepotvrzené OP.
V systému je k dispozici i jiná možnost přímé tvorby OP podle OV, viz procesní tvorba dokladů OP → OV, ovšem s tím, že umožňuje vystavit jednu OP podle více vybraných OV, tedy neumožňuje automaticky vystavit více OP najednou podle vybraných OV (např. na různé dodavatele podle dodavatelů příslušných skladových karet apod.).
Jak bylo řečeno výše, SCM obsahuje číselník datových zdrojů, které obsahují pevně definované SQL dotazy, které se použijí pro získání dat. Všechna data, se kterými se v SCM pracuje, jsou získávána pomocí interního objektu SCMDataProvider. Tento objekt slouží k získávání potřebných dat (tj. na požádání načítá data z databáze), dále k ukládání načtených dat do vyrovnávací paměti (tj. slouží i jako vyrovnávací paměť (cache)) a k vytváření pohledů na tato data pro funkční agendy SCM, QR funkce nebo OLE rozhraní.
Plnění vyrovnávací paměti:
Funkční agendy SCM, QR funkce nebo OLE rozhraní poskytovatele žádají o připravení dat pro konkrétní úlohu – bilanci, vývoj skladové položky, výpočet pokrytí dokladu apod. Přitom předají poskytovateli tyto informace:
- použité datové zdroje
- výstupní položky z datových zdrojů
- seznam položek, za které se budou data filtrovat (omezovat), a jejich hodnotyPoznámka...
Filtrování dat probíhá až nad načtenými daty a provádí jej poskytovatel dat, tedy nikoliv v rámci SQL dotazů do databáze. Podrobněji viz dále, příklad v části Možnosti omezování dat v agendách SCM.)
Sestavení výstupních dat z vyrovnávací paměti:
Na základě takového požadavku načte poskytovatel všechna potřebná data (která dosud načtená nemá, viz dále), uloží je do vyrovnávací paměti a připraví tzv. dataset (lze si představit jako tabulku připravených dat), který předá zpět tomu, kdo o data požádal (agendě SCM, QR funkci nebo OLE rozhraní). Při opakovaném vyvolání obdobného požadavku (např. vyvolání funkce Získat záznamy bez vyprázdnění vyrov. paměti s jiným omezením, vyvolání funkce Provést dotaz z jiné agendy či jen s jinou definicí sloupců resp. jinou sadou dat. zdrojů (s jinými datovými zdroji)) poskytovatel dat ví, které datové zdroje již má načtené a ty znovu nenačítá. Načítá jen ty, které dosud načtené nemá.
Mějme dvě definice sloupců bilance. Definice "pro obchod" nechť obsahuje dat. zdroj OP (z objednávek přijatých) a definice "pro kompletaci" nechť obsahuje také dat. zdroj OP a dále dat. zdroj KL materiál (z kompletačních listů). Vyrovnávací paměť nechť je prázdná. Při prvním provedení dotazu v agendě Bilance podle definice sloupců "pro obchod", si poskytovatel dat načte data dle datového zdroje OP (z objednávek přijatých) a uloží do vyrovnávací paměti. Při dalším provedení dotazu, např. dle definice sloupců "pro kompletaci" si načte už jen data dle dat. zdroje KL materiál a do vyrovnávací paměti je přidá. Data z OP již nenačítá.
Výhoda tohoto chování je v rychlosti (v mnoha případech totiž postačí). Pozor! Nevýhoda je v tom, že pokud mezi dvěma dotazy došlo ke změně v datech, z nichž čerpá již dříve načtený datový zdroj, tato změna se neprojeví (do vyrovnávací paměti se automaticky nedostane). Pokud chcete, aby se projevila, je třeba vyrovnávací paměť vyprázdnit - pak se totiž při dalším načtení znovu načtou všechny dat. zdroje.
Pokud např. v Bilanci vyvoláme funkci Získat záznamy bez vyprázdnění vyrov. paměti dle definice "pro obchod" z předchozího příkladu, načtou se data z dat. zdroje OP (z objednávek). Pokud poté přidáme novou potvrzenou objednávku, smažeme nějakou objednávku nebo v nějaké provedeme opravu a znovu vyvoláme funkci Provést dotaz, změna se v bilanci nijak neprojeví (jelikož dat. zdroj OP pro načítání z objednávek přijatých je již načtený a znovu se tudíž nenačetl). Tj. např. nově přidaná objednávka v zobrazené bilanci zahrnuta není. Pokud ale paměť vyprázdníme, tj. použijeme funkci Provést dotaz s vyprázdněním vyrovnávací paměti nebo funkci Občerstvit, pak se změna projeví, tj. nově přidaná objednávka v zobrazené bilanci již zahrnuta bude.
Dále viz též kap. Často kladené otázky k SCM - otázka V datech Bilance nevidím nevidím nově vystavený (resp. opravený) doklad, jak to?.
Možnosti vyprázdnění vyrovnávací paměti:
Vyprázdnit vyr. paměť lze různými způsoby:
- Z agend SCM - použitím funkce Občerstvit v záložkách Seznam nebo pomocí funkce Získat záznamy s vyprázdněním vyrov. paměti ze záložky Omezení. (Vyprázdní se obsah původní a načte se nový).
- Z jiných agend než SCM - použitím funkce Vyprázdnit vyrovnávací paměť - Ve většině agend, ve kterých jsou k dispozici funkce SCM (např. v objednávkách přijatých), je k dispozici i funkce pro vyprázdnění vyrovnávací paměti poskytovatele dat. (Vyprázdní se celý obsah, nikoli jen selektivně data získaná z dané agendy, z níž byla funkce vyvolána a paměť zůstane prázdná).Poznámka...
Vyvoláním zmíněné funkce se vyprázdní jen dočasné tabulky, vlastní dočasný soubor na disku se maže při zavření ABRA Gen.
Možnosti načtení vyrovnávací paměti:
Jak plyne z textu výše, data do vyrovnávací paměti se načítají vždy, když Funkční agendy SCM, QR funkce nebo OLE rozhraní žádají o příslušná data a ve vyrovnávací paměti není načten potřebný dat. zdroj. Tedy použitím funkce Občerstvit v záložkách Seznam agend SCM nebo pomocí funkce Získat záznamy ze záložky Omezení, použitím QR funkce pro SCM např. ve sloupci v seznamu nějaké agendy, v definovatelném panelu, v tisk. sestavě apod., či voláním příslušných funkcí z OLE rozhraní.
V seznamu objednávek přijatých nechť je sloupec s QR funkcí SCMDocumentCoverage pro zobrazení pokrytí dokladu (viz Použití QuickReports funkce pro zjištění pokrytí dokladů) používající sadu datových zdrojů "Obchod". Zatím jsme žádnou agendu ani funkci SCM nevolali, vyrovnávací paměť je prázdná. Otevřeme agendu objednávek. V tu chvíli QR funkce potřebuje od poskytovatele dat příslušná data pro zobrazení pokrytí, tedy do vyrovnávací paměti se načtou dat. zdroje ze sady datových zdrojů "Obchod". Pokud vyrovnávací paměť vyprázdníme (viz možnosti vyprázdnění vyr. paměti), pak stačí pouhé občerstvení objednávek k jejímu novému načtení (při občerstvení QR funkce znovu žádá o data z dat. zdrojů, které v paměti aktuálně načteny nejsou, čili se data podle nich znovu načtou.
Z toho mj. plyne, že pokud si zobrazujete pokrytí objednávek pomocí zmíněné QR funkce a přidali jste novou objednávku, je třeba provést minimálně vyprázdnění paměti a občerstvení seznamu OP, aby se nová OP dostala do vyrovnávací paměti.
Vnitřní realizace poskytovatele dat:
Pro realizaci takovéto podoby centrálního objektu poskytovatele dat, který spravuje veškerá data SCM, se používá vestavěná open source databáze SQLite. Jedná se o dynamickou dll knihovnu, která implementuje jednoduchý relační databázový systém s dotazovacím jazykem SQL. Načtená data jsou uložena v dočasném souboru na disku (což je vlastně aktuální obsah SQLite databáze), a nad nimi poskytovatel dat sestavuje s využitím paměťových tabulek požadované řezy (různé pohledy na data), které pak vrací místu, které je požadovalo.
K pohledu na obsah SQLite je určena agenda Poskytovatel dat.
Poskytovatel dat existuje jeden pro jedno přihlášení uživatele.
V SCM jsou různé možnosti omezování dat, které lze použít. Lze využít jen některou z nich, nebo je vhodně kombinovat. Omezování dat má výhodu ve větší rychlosti (dotazy nad menší (omezenou) množinou dat jsou rychlejší). Dále omezování dat umožňuje různé pohledy na data. Někdy nás zajímá jen údaj celkový např. za všechny sklady a doklady, jindy naopak jen za vybrané sklady, doklady apod. Jindy chceme vidět údaje oboje a mít vedle sebe v bilanci např. sloupec s objednaným zbožím z OP za všechny sklady a vedle toho sloupce po skladech (pro přehled, modelování apod.)
Kde lze nějakým způsobem definovat omezení pro výsledná zobrazená data:
- omezení dané samotným SQL dotazem v dat. zdroji
- omezení datového zdroje zadané v záložce Omezení v sadě datových zdrojů
- omezení datového zdroje zadané v záložce Omezení v definici sloupců bilance
- omezení zadané v záložce Omezenífunkčních agend SCM
- použití dynamicky filtrovaných sloupců
Možnosti jsou podobné, někdy lze téhož dosáhnout i více způsoby (které se buď vůbec neliší nebo se mohou lišit v rychlosti odezvy). Kterou možnost si vyberete, záleží na tom, čeho chcete docílit, zda lze předpokládat opakovanost takového požadavku nebo zda jde o řídký výskyt atd.
Mějme dva zásobovače, kteří nikdy nebudou pracovat s celým sortimentem najednou, ale zásobovač A pracuje se sortimentem A a zásobovač B se sortimentem B. Jelikož nebudou své sortimenty sdílet, lze toto řešit definicí dvou podobných datových zdrojů s omezením, jeden omezený za sortiment A, druhý za sortiment B. Každý ze zásobovačů by pak pracoval se "svou" definicí sloupců, která by se odkazovala jen na "jeho" datové zdroje. Pokud by ale zásobovač A pracoval občas i se sortimentem kolegy, pak by bylo vhodnější si "jeho" dat. zdroje nechat bez omezení, nechat si vytvářet paměťové tabulky (viz dále) pro celý sortiment a teprve až v záložce Omezení bilance omezovat za jeden nebo druhý sortiment.
Pokud bychom chtěli kromě zobrazených výsledků vidět údaje určitého sloupce nějak omezeny, např. požadavky z OP jen za vybranou řadu OP, můžeme to řešit přidáním dynamicky filtrovaného sloupce. Pokud bychom ale takové údaje chtěli zobrazovat opakovaně, pak by bylo výhodnější si sloupec přidat trvale rovnou do definice sloupců bilance.
Pokud bychom měli část sortimentu, se kterým nebudeme potřebovat v SCM pracovat (např. fiktivní skladové karty typu práce), pak můžeme provést omezení rovnou v SQL dotazu - tj. karty takového typu vůbec nenačítat. Tím se zmenší objem načítaných dat a tím zvýší rychlost odezvy systému.
Odlišnosti v uplatnění omezení podrobněji objasníme na příkladu Bilance:
V Bilanci nechť je zvolena definice sloupců, nastaveno nějaké omezení a proveden dotaz. V ten moment je požadavek na načtení dat předán poskytovateli dat (jak bylo objasněno výše). Poskytovatel podle datových zdrojů obsažených ve zvolené definici (musí tam být alespoň jeden, jak bylo řečeno v kap. Definice sloupců bilance) a podle SQL dotazů v nich zadaných načte všechna data z databáze a uloží do vyrovnávací paměti. (Při tomto se žádné omezení zadané v záložkách Omezení neuplatňuje. Uplatní se jen "omezení" dané samotnými SQL dotazy - např. načítají se data "jen" z potvrzených a nevyřízených OP). Ve vyr. paměti jsou tedy "všechna" data načtená podle SQL dotazů z datových zdrojů ke všem sklad. kartám a skladům, které z těchto použitých datových zdrojů vyplynou.
Nad těmito všemi daty poskytovatel pro každý nadefinovaný sloupec bilance vytváří v paměti dočasnou tabulku (např. jedna tabulka pro sloupec zobrazující množství (Quantity) z OP, druhá pro totéž z OV apod.). Při tvorbě této tabulky se již uplatní omezení datového zdroje zadané v záložce Omezení v definici sloupců bilance.
Pokud bychom v omezení dat. zdroje načítajícího data z OP zadali omezení jen za vybranou řadu objednávek, pak by se tabulka vytvořila jen z údajů OP z této řady.
Na závěr z těchto pomocných dočasných paměťových tabulek sestaví výsledný dataset (dočasná "tmp" tabulka pro danou agendu, přitom se uplatní omezení zadaná v záložce Omezení Bilance). (V agendě Poskytovatel dat by byl viditelný jako dočasná "tmp" tabulka.) Pokud by se poté otevřel např. Vývoj, obdobným způsobem by se nad daty ve vyrovnávací paměti sestavila další "tmp" tabulka.
Mějme dodávanou definici sloupců bilance Obchod, která obsahuje dat. zdroje OP, OV, Požadavky na OV, Stav skladu, Spodní limit). Tu zkopírujeme jako Obchod_x a zadáme v ní omezení u datového zdroje OP jen za řadu OPx). Dále mějme 3 potvrzené nevyřízené objednávky přijaté v různých řadách, např. OP-1 (s kartami A, B, C v počtu 5 ks), OPx-1 (s kartami A, B v počtu 1,1ks) a OPy-1 (s kartami A, B v počtu 3,3ks). Pro jednoduchost žádné jiné OP neexistují.
V bilanci provedeme dotaz s vyprázdněním vyrovnávací paměti s definicí Obchod_x ⇒
Ve vyrovnávací paměti budou v jedné tabulce načteny všechny OP (tedy všechny sklad. karty ze všech potvrzených nevyřízených OP, bez omezení za řadu), v jiné všechny OV, v jiné všechny sklad. karty s nenulovým skladem atd. Nad touto vyrovnávací pamětí se sestaví výsledný dataset (dočasná "tmp" tabulka ), v tomto případě s omezením za řadu OPx a použije se pro zobrazení požadované Bilance ⇒
V Bilanci u karet A a B uvidíme ve sloupci OP pouze počty 1,1ks (tedy počty pouze z OPx, naopak počty z objednávek OP-1, OPy-1 v jiných řadách nebudou zahrnuty). (Přestože ve vyrovnávací paměti jsou načteny údaje ze všech potvrzených nevyřízených objednávek přijatých).
Výsledná bilance nezobrazuje "jen" sklad. karty z OPx-1 (tedy jen karty A, B), ale zobrazuje ještě řadu dalších karet. Proč? Tyto sice nejsou obsaženy v objednávkách přijatých, ale načetly se díky jiným dat. zdrojům z dané definice sloupců. Např. díky datovému zdroji Stav skladu, jelikož mají nějaký nenulový stav, či díky spodnímu limitu, jelikož jej mají nenulový, nebo díky tomu, že jsou obsaženy v OV apod. Tedy omezení datového zdroje OP za řadu OPx neznamená, že se načtou a zobrazí jen sklad. karty z OPx, ale znamená to, že údaj o požadavcích z OP bude zohledňovat pouze požadavky za řadu OPx.
Pokud bychom si poté takovou bilanci chtěli prohlížet po částech, např. zobrazit si ji jen pro sklad. karty A, B, můžeme v záložce Omezení Bilance takové omezení za sklad. karty A, B zadat. ⇒ Původní dočasná "tmp" tabulka se nahradí novou, v tomto případě s omezením jednak za řadu OPx a dále za sklad. karty A, B) a tato se použije pro nové zobrazení Bilance. Pak uvidíme jen řádky se sklad. kartami A, B.
Nezbytnou podmínkou pro provoz SCM je, aby byla tato část systému licencována. SCM je licencováno samostatně - viz Licencované celky (licencované moduly a vlastnosti).
Není-li licencováno SCM, není k dispozici podpora SCM ani v jiných agendách (např. funkce SCM v agendách jednotlivých dokladů apod.).
Dataset sestavený poskytovatelem dat pro danou agendu se interně předává i do tiskových sestav/def. exportů. Pro funkční agendy SCM totiž platí, že se pro ně nedefinují reportingová místa, jejich DynSQL a dílčí zdroje dat (datasety), jako je tomu u jiných dokladových a číselníkových agend ABRA Gen. Dataset, který se nabízí v definici tisk. sestav/def. exportu v těchto agendách je vlastně interně předaný dataset sestavený poskytovatelem dat pro danou agendu. Viz výše Poskytovatel dat - Sestavení výstupních dat z vyrovnávací paměti. Tedy obsah tohoto datasetu je vlastně to, co uživatel v dané funkční agendě SCM právě vidí.