Generátor sestav
Modul generátor sestav je určen pro zpracování libovolných sestav, které uživatel potřebuje ze skladového systému zjistit. Pro vytváření nových sestav je potřebné znát mnoho věcí z oblasti programování, logiky a zpracování relačních databází.
Proto je nutné konzultovat vytváření sestav s programátory a běžní uživatelé by se měli omezit pouze na úpravu výběrové podmínky a na spuštění vytváření sestavy. Přesto je modul Generátor sestav velmi důležitý, protože umožňuje během pár minut vytvořit značně složité sestavy podle momentálních potřeb uživatele.
Obsah
Spuštění vytvoření sestavy
- Vyberte z nabízeného seznamu skupin sestav skupinu, ve které se nachází vámi požadovaná sestava a stiskněte Enter
- Po zvolení skupiny sestav program nabídne všechny sestavy ze zvolené skupiny. Vyberte si tu, jež vás zajímá. Výběrovou podmínku lze měnit v rámci opravy definice sestavy (klávesa F2) po stisknutí F6 na údaji "Výběrová podmínka" nebo přímo v textu výrazu pro výběrovou podmínku. Výpočet sestavy se spustí stisknutím Enter na požadované sestavě. Vzhledem k tomu, že program může zpracovávat rozsáhlé databáze, může výpočet trvat dlouhou dobu.
Při vytváření sestav je potřeba znát některé důležité vztahy v databázích. Mezi nejsložitější patří způsob vyhodnocování nákupních cen a s tím související způsob vyhodnocování zisku (nebo lépe řečeno marže z prodeje). Připomínáme, že ke každé operaci, která není nákupní, existuje tzv. nákupní operace. Tuto nákupní operaci program vyhledá při evidování dokladu. Cena v nákupní operaci určuje tzv. nákupní cenu operace, která se v globále za více operací označuje jako prodej v NC (spotřeba).
Schéma vyhodnocování nákupní ceny za jednu operaci
| NÁKUPNÍ CENA | ||
| Operace je nákupní | Pokud operace je příjmová | Pokud operace je dodací (dobropis) |
| Operace.Cena | Operace.NakupniCena | |
| Operace není nákupní tzn. exist. odpovídající nákupní operace (platí, pokud se nepoužívá prodej do mínusu) | Pokud nákupní operace je příjmová | Pokud nákupní operace je dodací |
| NakupniOperace.Cena | NakupniOperace.NakupniCena | |
V jazyku generátoru sestav by příslušná položka záhlaví vyjadřující nákupní cenu mohla vypadat takto :
if ( Nakupni, if ( Prijem, Cena, NakupniCena), if ( NAKUP.Prijem, NAKUP.Cena, NAKUP.NakupniCena)
Výraz pro vyhodnocení hodnoty nákupní ceny za prodejní operace (účty/služby mají nulovou hodnotu):
if(TypKarty=0, 0, if(Nakupni, -NakupniCen, if(NAKUP.Autokod=0, KARTAZAS.NakupCena, if(NAKUP.Prijem, NAKUP.Cena, NAKUP.NakupniCen)))*abs(Pocet))
Relační výraz KARTZAS.NakupCena se použije v případě, že k prodejní operaci není definována nákupní operace (obvykle to může vzniknout při povoleném prodeji do mínusu nebo ve skladech s řízeným procesem vyskladňování).
Výraz pro vyhodnocení počtu prodaných měrných jednotek za prodejní operace mimo účty/služby:
if(Nakupni,-1,1)*abs(Pocet)
Výraz pro vyhodnocení hodnoty prodejní ceny za prodejní operace mimo účty/služby:
if(Nakupni,-1,1)*abs(Pocet)*Cena
nebo
if(TYPDOKLA.Dobropis,-1,1)*Pocet*Cena
(tato varianta funguje i pro účty a je shodná i pro vyhodnocení hodnoty příjmových operací)
| Poznámka |
|---|
| V uvedeném příkladě by měl být soubor operací zaveden jako hlavní soubor a zároveň by měl být soubor operací jako relační soubor s alias NAKUP s použitím interního klíče 3 a klíčovou položkou Nakup. Alias KARTAZAS je definován pro relační soubor SKLADZAS.BTR s použitím interního klíče 1 a klíčovou položkou Sklad;DelRight(Kod) |
| U účtů není nákupní cena sledována (NC=0), proto by účty neměly být dle výše uvedeného schématu vypočítávány |
Schéma vyhodnocování zisku za jednu operaci :
| ZISK Z OPERACE | ||
| Operace je nákupní | Pokud operace je příjmová | Pokud operace je dodací (dobropis) |
| - | Operace.NakupniCena-Operace.Cena | |
| Operace není nákupní tzn. exist. odpovídající nákupní operace | Pokud nákupní operace je příjmová nebo operace je příjmová(vrubopis) | Pokud nákupní operace je dodací |
| Operace.Cena-NakupniOperace.Cena | Operace.Cena-NakupniOperace.NakupniCena | |
V jazyku generátoru sestav by příslušná položka záhlaví vyjadřující zisk za jednu operaci mohla vypadat takto :
if ( Nakupni, if ( Prijem, 0, NakupniCena - Cena ), if ( NAKUP.Prijem OR Prijem, Cena - NAKUP.Cena, Cena - NAKUP.NakupniCena)
| Poznámka | ||||
|---|---|---|---|---|
| V uvedeném příkladě by měl být soubor operací zaveden jako hlavní soubor a zároveň by měl být soubor operací jako relační soubor s alias NAKUP s použitím interního klíče 3 a klíčovou položkou Nakup. | ||||
U účtů není nákupní cena sledována (NC=0)
Zisk u účtů by tedy neměl být dle výše uvedeného schematu vypočítáván |
| Poznámka | |
|---|---|
| V definici relace v generátoru sestav je možné použít neúplné definování klíčové hodnoty pro dohledání relačního záznamu (může chybět definice výrazů pro vyhodnocení koncových segmentů indexu) - v tomto případě se provede dohledání prvního záznamu vyhovující počáteční části klíče (využití pro zrychlení výpočtu např. při sestavách z dokladů v průvodkách). | |
| Při definici segmentu klíče v relačních souborech a omezeních dle indexu není nutné pomocí funkce chr() převádět číselné hodnoty na jednoznakové textové klíčové hodnoty - konverze se provede automaticky (např. místo ...;chr(TypDokladu); ... lze použít jen ...;TypDokladu,...) | |
Přenos sestav
Z vybrané skupiny sestav určíme konkrétní sestavu pro přenos
| Položka | Popis |
| Uložit sestavu | |
| Načíst sestavu | |
| Načíst sestavu do nové skupiny |
Kódy a přepínače
V generátoru sestav lze pro exporty do CSV definovat globální výraz CSV_HDRCP, který určuje kódovou stránku pro hlavičku CSV souboru (např. CSV_HDRCP=4 ).
| Kód | Popis |
| 0 | ASCII |
| 1 | Kamenický |
| 2 | ASCII2 |
| 3 | LATIN2 |
| 4 | Windows |
Výchozí hodnotou je kód ASCII. Kódovou stránku v ostatních řádcích CSV souboru lze měnit pomocí funkce conv(s,cp) formou výrazů v definici sestavy.
V generátoru sestav existuje funkce FileExists(f), která vrací hodnotu true, pokud specifikovaný soubor existuje. Vhodné využití této funkce je např. pro tisky ceníků s obrázky pro testování existence souboru s obrázkem.
| Přepínač | Popis |
| Netisknout záhlaví sestav | umožňuje vytvářet textové databáze s pevnou strukturou věty |
| Postupné vytváření indexů | pokud je vypnuto, pak se indexy vytvářejí až na závěr přípravy indexových souborů, což urychlí vytváření sestav se značným objemem vyhledaných dat |
| Povolit používání rozšíř. operací | povolí tzv. extended operace při vytváření hlavního indexového souboru (InsertExtended) |
| Technická poznámka |
| Pro export do CSV lze definovat globální výraz CSV_SEPAR, který určuje oddělovač znaků pro CSV soubor (např. CSV_Separ="/") |
Globální proměnné generátoru sestav
| Proměnná | Popis |
| INI_Jmeno | |
| INI_Jmeno2 | |
| INI_Ulice | |
| INI_Mesto | |
| INI_PSC | |
| INI_ICO | |
| INI_DIC | |
| INI_Ucet | |
| KFG_Datum | aktuální datum |
| G_Vystavil | |
| INI_Sklad | |
| INI_KodSkl | |
| KFG_Datum0 | datum začátku aktuálního roku |
| KFG_Datum1 | datum začátku aktuálního měsíce |
Použití těchto proměnných je stejné jako u jiných ručně definovaných proměnných v sestavě. Redefinováním proměnné v [Texty a proměnné] lze změnit popisky.