Stanovení výchozí prodejní ceny na dokladech

Jak bylo řečeno v kap. Typy řádků na dokladech, lze na některých dokladech zadávat různé typy řádků. Pro zadávání skladových položek do dokladů existuje typ 3-Skladový řádek. Jedná-li se o doklad, na kterém má smysl i zadání prodejních cen, pak jsou k dispozici i položky Jednotková a Celková cena. Zde budeme mluvit o dokladech, u kterých se jedná o ceny prodejní (tj. např. faktura vydaná, pokladna příjem, objednávka přijatá, ...) a o způsobu výpočtu tzv. výchozí prodejní ceny, tj. ceny, která se předvyplní do vystavovaného dokladu do položky jednotková cena.

Přestože je systém prodejních ceníků, definovatelných cen a kombinace řady slev, které nabízí systém ABRA Gen veliký, může se stát, že není s to uspokojit nějaký specifický požadavek klienta na tvorbu prodejních cen. Proto kromě řešení defaultně dodávaného, nabízí systém ABRA Gen řešení těchto specifických požadavků na stanovení výchozí prodejní ceny pomocí externího DLL přidaného k instalaci systému.

V dalším textu je uvedeno:

Pro pokladní a restaurační prodej viz Stanovení výchozí prodejní ceny v pokladním maloobchodním a restauračním prodeji.

Faktory ovlivňující výchozí prodejní cenu

Na výpočet výchozí prodejní ceny, která se předvyplní do položky jednotková cena skladového řádku, může mít vliv několik faktorů:

Z výše uvedeného vyplývá, že faktorů ovlivňujících výpočet výsledné prodejní ceny je více. V praxi jistě nebudete využívat najednou všechny možnosti, které systém poskytuje (kombinace všech možností by byla nejen zbytečná, ale mohla by být až nesmyslná). Naopak si jistě vyberete ty, které nejlépe vyhoví vašim potřebám, pak se výpočet prodejní ceny popsaný dále, samozřejmě podstatně zjednoduší.

V agendě definice cen můžeme mít nadefinováno přes sto definic cen (můžeme je pro účely dalšího textu nazvat prodejní ceny), ke každé je pak specifikováno, v jaké je měně (viz měna definice ceny). Jedna z prodejních cen je zvolena jako hlavní, ta má pak jisté výsady při použití, viz dále.

Poznámka pro uživatele předchozího systému ABRA Gold: V ABRA Gold se prodejní ceny zadávaly k dílčím kartám. Ke každé dílčí kartě bylo možno definovat maximálně 5 prodejních cen, a pro jednu dílčí kartu nebylo možno kombinovat různé měny u těchto prodejních cen. V ABRA Gen byl zvolen jiný systém: prodejní ceny se nezadávají "na kartách", ale v cenících - viz dále. Pojmy "prodejní cena číslo - až 5" byly nahrazeny pojmy "definice ceny číslo - 1 až 99", je možno jich mít více a lze měny kombinovat.

V agendě ceníky může být nadefinováno teoreticky neomezené množství ceníků. Do ceníku jsou zařazeny vybrané skladové položky - hlavní karty (ceník tedy nemusí nutně obsahovat všechny položky skladu). Pro každou skladovou položku, která je v daném ceníku zařazena, lze zadat konkrétní ceny do jednotlivých definic cen (ale nemusí být nutně zadány všechny nadefinované, dokonce nemusí být zadána žádná). Ceny lze do každé definice cen zadat pro každou jednotku jiné, tj. např. v rámci "definice ceny 1" lze mít jiné ceny pro kusy a jiné pro balení apod. Takto nadefinovaný ceník může mít pak obecnou platnost pro všechny v něm obsažené položky bez ohledu na sklad anebo bez ohledu na firmu, která je uvedena na prodejním dokladu. Nebo naopak může být přiřazen pouze některým firmám, nebo pouze některým skladům, nebo dokonce nemusí být přiřazen nikam (tzn. že daný ceník již vyšel z platnosti a nepoužívá se).

Automatické vyčíslení prodejní ceny tedy spočívá nejdříve ve stanovení toho, která definice ceny má být použita jako výchozí definice ceny (závisí na řadě faktorů, viz dále) a dále v dohledání a příp. dopočtení konkrétní výchozí prodejní ceny pro danou definici ceny v cenících.

Algoritmus stanovení výchozí prodejní ceny

V dalším textu podrobně popíšeme postup, jak program tuto cenu stanoví. Vycházíme z toho, že uživatel vystavuje prodejní doklad, zadal jeho hlavičkové údaje a do řádku dokladu typu 3 - skladový řádek zadá skladovou kartu, sklad a jednotku. Pro úplnost výkladu předpokládejme, že skladová karta má nadefinováno více jednotek. Program jednotkovou cenu předvyplní výchozí prodejní cenou. Jak stanoví, která prodejní cena to bude, je podrobně popsáno dále:

  1. Hlavní body algoritmu:
    1. Stanovení výchozí definice ceny
    2. Hledání v akčních cenících
    3. Hledání v běžných cenících
      1. Ve firemním
      2. Ve skladovém/hlavním
    4. Předvyplněná cena a následná aplikace slev
  2. Příklady

Interně se volá funkce NxGetStorecardUnitPrice, která na základě předaných parametrů výchozí prodejní cenu stanoví tak, jak je popsáno dále.

Jelikož Ceníky v systému ABRA Gen podporují časové platnosti, pro dále popsaný postup platí: Ve všech místech, kdy se zjišťuje cena z ceníku pro určitou skladovou položku, se zohledňuje i datum, ke kterému se chce cena v ceníku zjistit.

  1. Stanovení výchozí definice ceny

    Pro stanovení výchozí prodejní ceny je nejen důležité určit, v jakém ceníku se cena bude hledat, viz dále, ale též, jaká definice prodejní ceny se bude hledat (tj. je třeba stanovit výchozí definici ceny). Přičemž jedno může ovlivňovat druhé (tj. s ohledem na nastavení se může stát, že není-li dohledána adekvátní prodejní cena v jednom ceníku, může se začít hledat v jiném ceníku, nebo se může začít hledat jiná definice ceny v tomtéž ceníku apod., viz dále).

    Která definice ceny se má v ceníku (cenících) hledat, závisí jednak na tom, zda firma z hlavičky dokladu má v položce Preferovaná definice ceny zadánu vlastní preferovanou definici ceny a dále na nastavení parametrů Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě a Předvolba prodejní ceny ve Firemních údajích (resp. jedná-li se o prodej v hotovosti, pak nastavení adekvátních parametrů Při prodeji v hotovosti - Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě a Při prodeji v hotovosti - Předvolba prodejní ceny). Platí:

    1. Má-li firma zadánu položku Preferovaná definice ceny, pak se tato definice ceny použije přednostně a to buď vždy nebo jen tehdy, vede-li na nenulovou prodejní cenu, a to s ohledem na hodnotu parametru Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě (resp. jedná-li se o prodej v hotovosti, pak adekvátního parametru Při prodeji v hotovosti - Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě). Je-li jeho hodnota:
      1. "Vždy"
        Pak program jako výchozí definici ceny použije preferovanou definici ceny zadanou na firmě a to vždy, tedy bez ohledu na to, vede-li na nulovou prodejní cenu či nikoli. Program bude pracovat pouze s ní, jinou definici ceny hledat nebude.

        Jak bude uvedeno dále, v tomto případě pak platí: Pokud skladová karta v příslušném ceníku existuje, ale pro preferovanou definici prodejní ceny nemá v příslušném ceníku zadánu nenulovou prodejní cenu (ani pro jinou jednotku, měnu, ...), pak:

        1. program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu

          V tomto případě se tedy na rozdíl od bodu 1.A.b. nepokračuje ani pokusem dohledat nenulovou prodejní cenu pro tutéž definici ceny v jiném ceníku ani dalším "kolečkem" hledání pro jinou výchozí definici ceny.

      2. "Jen s nenulovou cenou"
        Pak program jako výchozí definici ceny přednostně použije preferovanou definici ceny zadanou na firmě, ale jen tehdy, pokud tato nevede na nulovou prodejní cenu. Vede-li na nulovou prodejní cenu, pak ji nepoužije a provede druhé "kolečko" hledání pro jinou výchozí definici ceny a to tu, která vyplyne z hodnoty parametru Předvolba prodejní ceny (resp. jedná-li se o prodej v hotovosti, pak z hodnoty adekvátního parametru Při prodeji v hotovosti - Předvolba prodejní ceny). Tzn., že výchozí definice ceny pro druhé "kolečko" hledání bude stanovena stejně, jakoby firma neměla preferovanou definici ceny zadánu (viz bod 1.B).

        Jak bude uvedeno dále, v tomto případě pak platí: Pokud skladová karta v příslušném ceníku existuje, ale pro preferovanou definici prodejní ceny nemá v příslušném ceníku zadánu nenulovou prodejní cenu (ani pro jinou jednotku, měnu, ...), pak:

        1. buď program pokračuje rovnou hledáním jiné definice ceny (dle bodu 1.B) v tomtéž ceníku (tj. v jiných cenících už nehledá)
        2. anebo se nejdříve pokusí dohledat nenulovou prodejní cenu pro preferovanou definici ceny v jiném ceníku (v dalším v pořadí) a teprve poté, je-li i toto neúspěšné, pokračuje hledáním jiné definice ceny (tj. provede druhé "kolečko" hledání pro stejné ceníky, v jakých hledal preferovanou definici ceny)

          Jestli se půjde bodem i. nebo ii., závisí to na tom, v jakém ceníku tato skutečnost nastala, viz dále.

          K postupu dle bodu i. dojde např. v akčním ceníku (viz bod 2.b.ii.III.b.a). K postupu dle bodu ii. dojde např. ve firemním ceníku (viz bod 3.A.b.ii.III.b).

    2. Nemá-li firma zadánu položku Preferovaná definice ceny nebo tato vede na nulovou cenu a s ohledem na předchozí parametr se tudíž nepoužije, viz bod 1.A.b., pak program hledanou definici prodejní ceny stanoví podle nastavení parametru Předvolba prodejní ceny (resp. jedná-li se o prodej v hotovosti, pak nastavení adekvátního parametru Při prodeji v hotovosti - Předvolba prodejní ceny).

      Je-li jeho hodnota:

      1. "Hlavní cena"

        Pak program vybere jako výchozí definici ceny tu, která je v agendě definic cen nadefinována jako hlavní definice ceny.
         

      2. "Podle dealerských tříd z adresáře"

        Pak program vybere jako výchozí definici ceny tu, jejíž kód odpovídá kódu dealerské třídy, přebrané na doklad z adresáře firem. Jestli se bude deal. třída přebírat z údajů firmy nebo provozovny zadané v hlavičce vystavovaného dokladu, závisí na hodnotě parametru Dealerskou třídu přebírat.

        Firmu lze zařadit do dealerské třídy v agendě Adresáře firem, v subzáložce Další údaje v položce Dealerská třída, provozovnu v subzáložce Provozovny v položce Dealerská třída.

        Pokud je firma resp. provozovna zařazena do dealerské třídy, jejíž kód neodpovídá žádnému kódu existujících definic cen, pak se použije existující definice cen s kódem nejbližším nižším. Objasníme na příkladu:

        Mějme definice cen s kódy 1,2,3,6 a 8. Pro dealerskou třídu s kódy 1 a 2 bude vybrána definice ceny 1 resp. 2. Pro dealerské třídy 3, 4 a 5 bude vybrána definice cen 3. Pro dealerské třídy 6 a 7 bude vybrána definice cen 6 a pro dealerskou třídu 8 až 99 by byla vybrána definice cen 8.

        Pokud firma resp. provozovna není zařazena do žádné dealerské třídy, není podle čeho vybrat definici cen, program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu.
         

      3. "Podle tabulky dealerských slev"

        Zde je situace složitější, jelikož oproti předchozí hodnotě parametru vstupuje do hry ještě skladová karta a skutečnost, zda je k této kartě přiřazena nějaká tabulka dealerských slev a jak je tato tabulka nadefinována.

        Ke skladové kartě lze přiřadit tabulku dealerských slev v agendě skladových karet v záložce Seznam funkcí Hromadná oprava anebo v záložce Detail v položce Dealerské slevy.

        Pro tento případ existuje v tabulkách dealerských slev možnost zadat pro jednotlivé dealerské třídy definice cen, které jim mají odpovídat. Každá skladová karta pak může mít přiřazenu nějakou z nadefinovaných tabulek dealerských slev. Program tedy zkontroluje, zda je karta, vybraná v řádku vystavovaného dokladu, přiřazena k nějaké tabulce deal. slev a potom v této tabulce dohledá, jaká definice cen je přiřazena dealerské třídě, přebrané na doklad z adresáře firem. Tuto definici cen pak použije jako výchozí definici cen. Jestli se bude deal. třída přebírat z údajů firmy nebo provozovny zadané v hlavičce vystavovaného dokladu, závisí na hodnotě parametru Dealerskou třídu přebírat.

        Výsledná prodejní cena se tedy v tomto případě může lišit nejen podle toho, do jaké dealerské třídy zákazník patří, ale i podle jednotlivých skladových komodit, tj. pro stejnou dealerskou třídu může být pro každou kartu, resp. skupinu karet se stejnou tabulkou dealerských slev vybrána jiná definice prodejní ceny a tudíž vyčíslena jiná jednotková prodejní cena. Tedy pro skupinu karet ze skladového sortimentu, které mají přiřazenu danou slevovou tabulku, se pro dealerskou třídu X bere Y-tá prodejní cena. Jedná se tedy v podstatě o vylepšenou předchozí variantu, kdy kód dealerské třídy a kód definice prodejní ceny musely být stejné a nezáleželo na typu karty.

        Pokud firma resp. provozovna není zařazena do žádné dealerské kategorie nebo skladová karta není zařazena do žádné tabulky deal. slev, nebo příslušná dealerská třída nemá přiřazenu definici ceny, není podle čeho vybrat definici cen, program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu.
         

      4. "Podle tabulky kusových slev"

        Obdobně jako předchozí volba, ale definici cen vybírá podle příslušnosti skladové karty do tabulky kusových slev a podle definice této tabulky.

        Pro tento případ existuje v tabulkách kusových slev možnost zadat pro jednotlivé hraniční počty kusů definice cen, které jim mají odpovídat. Obdobně jako u předchozí varianty pak každá skladová karta může mít přiřazenu jednu z nadefinovaných tabulek kusových slev. Program tedy zkontroluje, zda je karta, vybraná v řádku vystavovaného dokladu, přiřazena k nějaké tabulce kusových slev a potom v této tabulce dohledá, jaká definice cen je přiřazena počtu kusů zadanému na řádku dokladu. Tuto definici cen pak použije jako výchozí definici cen.

        Vybraná prodejní cena se tedy pak podle zadaného počtu kusů na skladovém řádku dokladu může lišit podle jednotlivých skladových komodit, tj. pro stejný počet kusů může být pro každou kartu, resp. skupinu karet se stejnou tabulkou kusových slev vybrána jiná prodejní cena. Tedy pro skupinu karet ze skladového sortimentu, které mají přiřazenu danou slevovou tabulku, určíte, že pro interval kusů A až B (např. 1-50) se bere Y-tá prodejní cena. Opět je zde závislost vybrané ceny na skupině karet.
         

      5. "Podle sortimentních slev"

        Obdobně jako v předchozím případě vstupuje do hry skladová karta a skutečnost, zda je tato karta přiřazena do nějaké sortimentní skupiny a jaká je nadefinována sleva pro danou sortimentní skupinu u konkrétní firmy v subzáložce Sortimentní slevy v adresáři firem.

        Ke skladové kartě lze přiřadit sortimentní skupinu v agendě skladových karet v záložce Seznam funkcí Hromadná oprava anebo v záložce Detail v položce Sortimentní skupina. Výši slevy pro jednotlivé sortimentní skupiny lze zadat pro každou firmu individuálně v subzáložce Sortimentní slevy v agendě Adresář firem.

        Pro tento případ existuje v adresáři firem v subzáložce Sortimentní slevy možnost zadat pro jednotlivé sortimentní skupiny definice cen, které jim mají odpovídat. Každá skladová karta pak může mít přiřazenu nějakou z nadefinovaných sortimentních skupin. Program tedy zkontroluje, zda je karta, vybraná v řádku vystavovaného dokladu, přiřazena k nějaké sortimentní skupině, a potom dohledá, jaká definice cen je přiřazena této sortimentní skupině v subzáložce Sortimentní slevy pro firmu uvedenou v hlavičce dokladu. Tuto definici cen pak použije jako výchozí definici cen. Zda se použije nadřízená sortimentní skupina, pokud není v subzáložce Sortimentní slevy nadefinována přímo ta sortimentní skupina, která je uvedena na skladové kartě, a nadřízená skupina tam nadefinována je, závisí na hodnotě parametru Použít i nadřízené sortimentní skupiny.

        Výsledná prodejní cena se tedy v tomto případě může lišit jednak podle toho, do jaké sortimentní skupiny je zařazena konkrétní skladová komodita, a jednak podle toho, jakou definici prodejní ceny má zákazník nadefinovánu pro konkrétní sortimentní skupinu. Tj. pro stejnou skladovou kartu, resp. pro karty zařazené do stejné sortimentní skupiny, může být v závislosti na firmě uvedené v hlavičce dokladu vybrána jiná definice prodejní ceny a tudíž vyčíslena jiná jednotková prodejní cena. Tedy pro skupinu karet ze skladového sortimentu, které jsou zařazeny do dané sortimentní skupiny, se pro konkrétního zákazníka bere Y-tá prodejní cena. Opět je zde závislost vybrané ceny na skupině karet a navíc na konkrétním zákazníkovi.

        Pokud firma nemá nadefinovány žádné sortimentní slevy nebo příslušná sortimentní sleva nemá přiřazenu definici ceny nebo skladová karta není zařazena do žádné sortimentní skupiny, není podle čeho vybrat definici cen, program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu.
         

  2. Hledání v akčních cenících

    Pokud je možné stanovit výchozí definice cen (tedy nejedná se o případy popsané v bodech 1.B.b až 1.B.e, kdy není podle čeho vybrat definici cen a hledání se pak ukončí předvyplněním nuly), může se začít hledat odpovídající prodejní cena v cenících.

    Jako první se nejdříve hledá, zda existují akční ceníky, které jsou aktuálně platné (tj. do jejichž časové platnosti spadá datum a příp. i čas vystavovaného dokladu a které platí pro daný den v týdnu). Přitom se kontrolují případná omezení použití daného akčního ceníku zadaná v jeho záložce Omezení použití. Tj. zda je použitelný pro firmu, které se prodává, a pro sklad, z něhož se prodává. Je-li vyhovujících akčních ceníků více, vezmou se postupně od nejvyšší priority k nejnižší a zjišťuje se, zda se v daném akčním ceníku daná skladová položka nachází a má zadanou alespoň pro jednu jednotku nenulovou cenu. (Pokud se v daném místě programu nemá pracovat s časově omezenými akčními ceníky, ignorují se všechny akční ceníky obsahující časové omezení.)

    Pokud se jedná o stanovení ceny pro B2B export skl. karet do dodavatelského ceníku, může být hledání v akčních cenících potlačeno parametrem B2B exportu Zohlednit platné akční ceníky.

     

    1. Pokud NEEXISTUJE žádný akční ceník vyhovující pro danou časovou platnost, sklad a firmu, program pokračuje hledáním v běžných cenících. Tj. bodem 3.
       
    2. Pokud EXISTUJÍ vyhovující akční ceníky, pak program hledá, zda v nich je daná karta obsažena, tedy jinak řečeno, zda daný ceník má mezi položkami dotyčnou kartu (přitom zohledňuje prioritu ceníků):

      1. Pokud skladová karta NENÍ položkou žádného vyhovujícího akčního ceníku, program pokračuje hledáním v běžných cenících. Tj. bodem 3.
      2. Pokud skladová karta JE položkou některého z vyhovujících akčních ceníků, a má-li parametr Akční ceník hodnotu "Vždy", pak v něm hledá tu definici prodejní ceny, která byla stanovena jako výchozí definice ceny, viz bod 1. Vyčíslení jednotkové prodejní ceny tedy pokračuje následovně:
        1. V rámci hledané definice ceny program vybere konkrétní prodejní cenu pro jednotku, zadanou v řádku vystavovaného dokladu. Pokud je tato cena nenulová a má-li parametr Přebírat z ceníku zápornou částku hodnotu:
          1. "Ano"- pak ji program dle potřeby upraví na shodnou měnu/DPH a použije jako výchozí, čímž vyčíslení výchozí prodejní ceny ukončí.
          2. "Ne" - pak ji program bere, jakoby byla nulová, a pokračuje bodem II.
        2. Pokud je prodejní cena dle předchozího bodu nulová, pak se program pokusí dopočítat cenu z nenulové ceny zadané pro jinou jednotku. Pokud je dopočtená cena nenulová, pak ji opět s ohledem na parametr Přebírat z ceníku zápornou částku buď použije jako výchozí nebo pokračuje bodem III.
        3. Pokud se nepodařilo dopočítat nenulovou cenu ani z ceny pro jinou jednotku, program pokračuje takto:

          Má-li parametr Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě (resp. adekvátní parametr při prodeji hotově) hodnotu:

          1. "Vždy" (viz bod 1.A.a), pak program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu.
          2. "Jen s nenulovou cenou" (viz bod 1.A.b) a současně:
            1. je-li výchozí definicí ceny preferovaná definice ceny zadaná na firmě (tj. jedná se o 1.kolečko hledání), pak program provede druhé "kolečko" hledání pro jinou výchozí definici ceny v akčních cenících (tj. provede znovu bod 2 pro definici ceny stanovenou dle bodu 1.B).
            2. není-li výchozí definicí ceny preferovaná definice ceny zadaná na firmě (tj. prefer. definice neexistuje nebo už se jedná o druhé "kolečko" hledání), pak program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu.

            Jinými slovy: pokud prefer. definice neexistuje nebo už se jedná o druhé "kolečko" hledání a cena opět vyjde nulová, pak se hledání ukončí. Tj. pokud vyhovující akční ceník existuje a karta v něm je, hledá se jen v akčním ceníku a hledáním v běžných cenících (tj. bodem 3) se nepokračuje, i když je výsledkem nulová cena. Program to chápe tak, že pokud si uživatel kartu do akčního ceníku dal, ale ponechal u ní nulovou cenu, tak to udělal záměrně a pravděpodobně chce dané zboží v dané akci poskytovat ZDARMA.

            Neboli hledání v akčních cenících jde dle postupu:
            - 1.kolečko = hledá se pref. definice ceny - Kde:  v akčních cenících
            - 2.kolečko (je-li v 1. kolečku nalezena nula a je nechtěná) = hledá se definice ceny dle 1.B - Kde: v akčních cenících

         

      3. Pokud skladová karta JE položkou některého z vyhovujících akčních ceníků a má-li parametr Akční ceník hodnotu "Upřednostnit nižší cenu", pak:
        1. nejdříve provede zkušební výpočet výchozí prodejní ceny z akčního ceníku (tj. podle bodu 2.b.ii)
        2. poté provede zkušební výpočet výchozí prodejní ceny, jakoby by akční ceník neexistoval, tj. podle bodu 3.
        3. na takto zkušebně získanou prodejní cenu aplikuje případnou dealerskou slevu (dle nastavení slev na daném prodejním dokladu) a výsledek porovná s cenou získanou z akčního ceníku (tj. podle bodu 2.b.ii)
        4. vychází-li nižší cena z akčního ceníku podle bodu 2.b.ii, pak tu použije jako výchozí, čímž vyčíslení výchozí prodejní ceny ukončí, v opačném případě použije cenu z běžných ceníků podle bodu 3.

          Pozor! Stanovená výchozí prodejní cena je samozřejmě bez aplikovaných dealerských slev. Případné slevy (ať už dealerské či jiné) se na získanou výchozí prodejní cenu aplikují standardním způsobem až po jejím předvyplnění do dokladu, viz bod 4.

  3. Hledání v běžných cenících

    Při hledání v běžných cenících se podle dodaného data nejprve dohledá nejbližší nižší datum v seznamu časových platností ceníku a k němu se dohledají položky a jejich ceny.

    Pokud v dané časové platnosti nemá hledaná skladová karta zadány ceny, pokusí se systém dohledat cenu pro tuto skladovou kartu ještě postupně ve starších časových platnostech. Pokud ani v žádné ze starších časových platností daného ceníku není položka nalezena, pokračuje se prohledáváním dalšího ceníku. Pokud při prohledávání cen pro dané platnosti je v kterémkoliv kroku nalezeno, že daná položka byla k dané platnosti ukončena (je v záložce Ukončené položky), pak se hledání v tomto ceníku zastaví a má se za to, že cena v tomto ceníku neexistuje a pokračuje se případně v hledání v dalším ceníku.

    Pořadí hledání v běžných cenících: přednostně firemní, poté skladový/hlavní podle nastavení v parametrech ve Firemních údajích.

    1.  Hledání ve firemním ceníku

      Nejdříve se zkontroluje, zda pro firmu, zadanou v hlavičce vystavovaného dokladu existuje její individuální FIREMNÍ ceník.
       

      1. Pokud NEEXISTUJE firemní ceník pro firmu z hlavičky dokladu, pak program pokračuje hledáním v dalších běžných cenících v pořadí podle stavu parametru "Pro prodejní ceny použít ceník", tj. bodem 3.B.
      2. Pokud EXISTUJE firemní ceník, pak program hledá, zda daná karta je v tomto ceníku obsažena, tedy jinak řečeno, zda tento ceník má mezi položkami dotyčnou kartu.
        1. Pokud skladová karta NENÍ položkou firemního ceníku pro danou firmu, program pokračuje tak, jakoby firemní ceník pro danou firmu neexistoval, tj. bodem 3.B.
        2. Pokud skladová karta JE položkou firemního ceníku pro danou firmu, pak v něm hledá tu definici prodejní ceny, která byla stanovena jako výchozí definice ceny, viz bod 1. Vyčíslení jednotkové prodejní ceny tedy pokračuje následovně:
          1. V rámci hledané definice ceny program vybere konkrétní prodejní cenu pro jednotku, zadanou v řádku vystavovaného dokladu. Pokud je tato cena nenulová a má-li parametr Přebírat z ceníku zápornou částku hodnotu:
            1. "Ano"- pak ji program dle potřeby upraví na shodnou měnu/DPH a použije jako výchozí, čímž vyčíslení výchozí prodejní ceny ukončí.
            2. "Ne" - pak ji program bere, jakoby byla nulová, a pokračuje bodem II.
          2. Pokud je prodejní cena dle předchozího bodu nulová, pak se program pokusí dopočítat cenu z nenulové ceny zadané pro jinou jednotku. Pokud je dopočtená cena nenulová, pak ji opět s ohledem na parametr Přebírat z ceníku zápornou částku buď použije jako výchozí nebo pokračuje bodem III.
          3. Pokud se nepodařilo dopočítat nenulovou cenu ani z ceny pro jinou jednotku, program pokračuje takto:

            Má-li parametr Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě (resp. adekvátní parametr při prodeji hotově) hodnotu:

            1. "Vždy" (viz bod 1.A.a), pak program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu.
            2. "Jen s nenulovou cenou" (viz bod 1.A.b), pak se pokusí dohledat nenulovou prodejní cenu pro tutéž výchozí definici ceny v dalších běžných cenících v pořadí (tj. skladovém/hlavním), tj. bodem 3.B.

              Zde tedy obě případná "kolečka" hledání probíhají shodně (jak pro prefer. definici ceny dle bodu 1.A.a a 1.A.b, tak pro jinou definici ceny dle bodu 1.B). Neboli najde-li se cena nulová, tak se buď rovnou použije (s ohledem na výše uvedený parametr) a dál se nepokračuje, nebo se pokračuje pokusem najít nenulovou prodejní cenu pro tutéž definici ceny v ceníku skladovém/hlavním. Pokud se jedná o první kolečko hledání (tj. pro preferovanou definici ceny, je-li taková na firmě zadána) a i hledání ve skladovém/hlavním vede na nechtěnou nulovou cenu, teprve poté se pokračuje dalším kolečkem pro jinou definici ceny dle bodu 1.B, a to opět nejdříve ve firemním ceníku, pak skladovém/hlavním.

              Neboli hledání v běžných cenících jde dle postupu:
              - 1.kolečko = hledá se pref. definice ceny (viz 1.A) - Kde:  ve firemním ceníku -> pak skladovém/hlavním
              - 2.kolečko (je-li v 1. kolečku nalezena nula a je nechtěná) = hledá se jiná definice ceny dle 1.B - Kde: ve firemním ceníku -> pak skladovém/hlavním

              Srovnejte s akčními ceníky, kdy se hledá jen v akčních a hledáním v žádných dalších cenících se nepokračuje.

    2. Hledání ve skladovém/hlavním ceníku

      Pokud neexistuje firemní ceník pro firmu z hlavičky dokladu (viz bod 3.A.a) nebo sklad. karta není položkou tohoto firemního ceníku (viz bod 3.A.b.i) nebo se v něm dohledala nulová prodejní cena a ta je nechtěná (viz bod 3.A.b.ii.III.b.), pak program postupuje podle stavu parametru "Pro prodejní ceny použít ceník" ve Firemních údajích. Tj. hledá tutéž výchozí definici ceny v dalších běžných cenících v pořadí a to takto:

      1. Pokud je hodnota parametru "Pouze skladový" program kontroluje, zda pro sklad zadaný v řádku vystavovaného dokladu existuje individuální SKLADOVÝ ceník, tedy jinak řečeno, zda některý z ceníků je přiřazen danému skladu.
         
        1. Pokud NEEXISTUJE skladový ceník pro daný sklad, pak program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu.
        2. Pokud EXISTUJE skladový ceník pro daný sklad , pak program hledá, zda daná karta je v tomto ceníku obsažena, tedy jinak řečeno, zda tento ceník má mezi položkami dotyčnou kartu:
          1. Pokud skladová karta NENÍ položkou skladového ceníku pro daný sklad, program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu.
          2. Pokud skladová karta JE položkou skladového ceníku pro daný sklad, pak v něm hledá tu definici prodejní ceny, která byla stanovena jako výchozí definice ceny, viz bod 1. Vyčíslení jednotkové prodejní ceny tedy pokračuje následovně:
            1. V rámci hledané definice ceny program vybere konkrétní prodejní cenu pro jednotku, zadanou v řádku vystavovaného dokladu. Pokud je tato cena nenulová a má-li parametr Přebírat z ceníku zápornou částku hodnotu:
              1. "Ano"- pak ji program dle potřeby upraví na shodnou měnu/DPH a použije jako výchozí, čímž vyčíslení výchozí prodejní ceny ukončí.
              2. "Ne" - pak ji program bere, jakoby byla nulová, a pokračuje bodem II.
            2. Pokud je prodejní cena dle předchozího bodu nulová, pak se program pokusí dopočítat cenu z nenulové ceny zadané pro jinou jednotku. Pokud je dopočtená cena nenulová, pak ji opět s ohledem na parametr Přebírat z ceníku zápornou částku buď použije jako výchozí nebo pokračuje bodem III.
            3. Pokud se nepodařilo dopočítat nenulovou cenu ani z ceny pro jinou jednotku, program pokračuje takto:

              Má-li parametr Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě (resp. adekvátní parametr při prodeji hotově) hodnotu:

              1. "Vždy" (viz bod 1.A.a), pak program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu.
              2. "Jen s nenulovou cenou" (viz bod 1.A.b) a současně:
                1. je-li výchozí definicí ceny preferovaná definice ceny zadaná na firmě (tj. jedná se o 1.kolečko hledání), pak program provede druhé "kolečko" hledání pro jinou výchozí definici ceny a to v běžných cenících (tj. provede znovu bod 3 pro jinou definici ceny stanovenou dle bodu 1.B).
                2. není-li výchozí definicí ceny preferovaná definice ceny zadaná na firmě (tj. prefer. definice neexistuje nebo už se jedná o druhé "kolečko" hledání), pak program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu.

             

      2. Pokud je hodnota parametru "Pouze hlavní ceník" program kontroluje, zda existuje HLAVNÍ ceník, tedy jinak řečeno, zda některý z ceníků je nastaven jako hlavní.
        1. Pokud NEEXISTUJE hlavní ceník, pak program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu.
        2. Pokud EXISTUJE hlavní ceník, pak program hledá, zda daná karta je v tomto ceníku obsažena, tedy jinak řečeno, zda tento ceník má mezi položkami dotyčnou kartu:
          1. Pokud skladová karta NENÍ položkou hlavního ceníku, program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu.
          2. Pokud skladová karta JE položkou hlavního ceníku, pak v něm hledá tu definici prodejní ceny, která byla stanovena jako výchozí definice ceny, viz bod 1. Vyčíslení jednotkové prodejní ceny tedy pokračuje obdobně jako v případě existence karty ve skladovém ceníku, tedy body 3.B.I.b.ii.I. až 3.B.I.b.ii.III. s tím, že namísto skladového ceníku pracuje s ceníkem hlavním.

         

      3. Pokud je hodnota parametru "Postupně skladový a hlavní", jedná se o kombinaci dvou předchozích možností, tj. program nejdříve hledá v individuálním SKLADOVÉM ceníku (obdobně jako v bodě 3.B.1) a pokud je hledání v něm neúspěšné, pak pokračuje v HLAVNÍM ceníku.
        1. Pokud NEEXISTUJE skladový ceník pro daný sklad, pak program pokračuje hledáním v dalším běžném ceníku v pořadí, tj. v tomto případě v hlavním ceníku. Postup je shodný jako byl uveden v bodě 3.B.II.
        2. Pokud EXISTUJE skladový ceník pro daný sklad , pak program hledá, zda daná karta je v tomto ceníku obsažena, tedy jinak řečeno, zda tento ceník má mezi položkami dotyčnou kartu:
          1. Pokud skladová karta NENÍ položkou skladového ceníku pro daný sklad, pak program pokračuje hledáním v dalším běžném ceníku v pořadí, tj. v tomto případě v hlavním ceníku. Postup je shodný jako byl uveden v bodě 3.B.II.
          2. Pokud skladová karta JE položkou skladového ceníku pro daný sklad, pak v něm hledá tu definici prodejní ceny, která byla stanovena jako výchozí definice ceny, viz bod 1. Vyčíslení jednotkové prodejní ceny tedy pokračuje následovně:
            1. V rámci hledané definice ceny program vybere konkrétní prodejní cenu pro jednotku, zadanou v řádku vystavovaného dokladu. Pokud je tato cena nenulová a má-li parametr Přebírat z ceníku zápornou částku hodnotu:
              1. "Ano"- pak ji program dle potřeby upraví na shodnou měnu/DPH a použije jako výchozí, čímž vyčíslení výchozí prodejní ceny ukončí.
              2. "Ne" - pak ji program bere, jakoby byla nulová, a pokračuje bodem II.
            2. Pokud je prodejní cena dle předchozího bodu nulová, pak se program pokusí dopočítat cenu z nenulové ceny zadané pro jinou jednotku. Pokud je dopočtená cena nenulová, pak ji opět s ohledem na parametr Přebírat z ceníku zápornou částku buď použije jako výchozí nebo pokračuje bodem III.
            3. Pokud se nepodařilo dopočítat nenulovou cenu ani z ceny pro jinou jednotku, program pokračuje takto:
              Má-li parametr Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě (resp. adekvátní parametr při prodeji hotově) hodnotu:
              1. "Vždy" (viz bod 1.A.a), pak program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu.
              2. "Jen s nenulovou cenou" (viz bod 1.A.b) a současně:
                1. je-li výchozí definicí ceny preferovaná definice ceny zadaná na firmě (tj. jedná se o 1.kolečko hledání), pak program provede druhé "kolečko" hledání pro jinou výchozí definici ceny a to ve všech běžných cenících dle pořadí (tj. provede znovu bod 3 pro jinou definici ceny stanovenou dle bodu 1.B).
                2. není-li výchozí definicí ceny preferovaná definice ceny zadaná na firmě (tj. prefer. definice neexistuje nebo už se jedná o druhé "kolečko" hledání), pak program vyčíslení výchozí prodejní ceny ukončí a do položky jednotková cena předvyplní nulu.
  4. Předvyplněná cena a následná aplikace slev

    Předvyplněnou výchozí cenu lze samozřejmě změnit. Buď můžete zadat libovolnou jinou cenu přímo z klávesnice, případně si můžete vybrat jinou z nabízených prodejních cen. Způsob nabízení prodejních cen používá stejných principů jako byly uvedeny v této kapitole.

    Zda bude možné na dokladu uložit řádek s nulovou prodejní cenou (pokud taková byla předvyplněna a pokud jste ji nezměnili), závisí u některých dokladů na stavu parametru Povolit zadat na řádku dokladu nulovou prodejní cenu.

    Aplikace slev: Na získanou předvyplněnou prodejní cenu se pak mohou aplikovat slevy, je-li jejich použití na daném dokladu nastaveno, standardně tak, jak bylo vysvětleno v samostatné kap. Slevový systém. (Aplikované slevy je možno prohlížet pomocí tlačítka Info v liště Navigátoru ve spodní části záložky Obsah). Cena po slevě se přičte do položky Cena Celkem za daný doklad zobrazované v horní části záložky Detail vystavovaného dokladu.

    Pokud se jedná o stanovzalozka_prilohy.htmení ceny pro B2B export skl. karet do dodavatelského ceníku, pak se slevy nijak neaplikují.

Ve výše uvedeném algoritmu se některé postupy opakují, proto je popíšeme zde a z popisu výše se na ně pouze budeme odvolávat:

Dopočtení ceny z nenulové ceny zadané pro jinou jednotku

  1. Pokud je v daném ceníku pro vybranou časovou platnost ceníku prodejní cena pro hledanou definici ceny a hledanou jednotku nulová (tj. v daném ceníku u hledané definice ceny není pro danou jednotku zadána nenulová prodejní cena), pak se program pokusí dopočítat cenu z nenulové prodejní ceny zadané pro jinou jednotku (pokud nějaká taková jednotka existuje) a to podle převodního vztahu jednotek. K tomu použije první jednotku v pořadí jejich zadání u skladové karty, která má zadánu prodejní cenu pro danou definici cen.

    Tento přepočet platí nejen pro hlavní definici ceny, ale pro všechny zbývající zadané definice cen, jak bylo uvedeno v kap. Typy řádků na dokladech u popisu výběru jednotkové ceny z nabídky, včetně příkladů, se kterými doporučujeme se seznámit.

Úprava získané nenulové prodejní ceny na shodnou měnu/DPH

  1. Pokud program získal nenulovou prodejní cenu pro hledanou výchozí definici ceny (viz bod 1) a jednotku, pak dále zkontroluje měnu zadané prodejní ceny (viz měna definice ceny) oproti měně zadané v hlavičce dokladu. Pokud se měny liší, program prodejní cenu automaticky přepočítá na měnu dokladu. Jakým kurzem, je objasněno na příkladu v popisu položky jednotková cena skladového řádku dokladu. Konkrétní způsob přepočtu mezi cizími měnami samozřejmě závisí na tom, z jaké měny na jakou měnu se převod provádí.
     
  2. Dále program zkontroluje, zda daná definice prodejní ceny je s DPH či nikoli (viz popis položky "s DPH" u dané definice ceny) a porovnává s nastavením zadaným v hlavičce dokladu (zda ceny v řádcích mají být uvedeny s DPH či nikoli, viz popis položky "s DPH" v hlavičkách dokladů). Pokud je to potřeba, pak ceny s DPH převede na cenu bez DPH, případně naopak.
     
  3. Takto získanou cenu předvyplní do položky jednotková cena jako Výchozí prodejní cenu.

S jakou přesností se zobrazují prodejní ceny ovlivňuje parametr Počet desetinných míst pro zadání částky na řádcích dokladů.

Příklady

Stanovení výchozí ceny s ohledem na různě nastavené parametry a existenci preferované definice ceny pro firmu objasníme na příkladech:

 

Příklad 1: Příklad demonstruje hledání v běžných cenících (dle bodu 3.) a vliv nastavení parametru Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě.

Mějme několik skladových karet (s kódy 01, 02 atd. dle tabulky), 3 definice ceny (def1 až def3, přičemž def2 nechť je hlavní) a 3 ceníky (hlavní (HLAV), skladový (SKL) přiřazený hlavnímu skladu, z něhož budeme v našem příkladu prodávat, a Firemní (FIR) přiřazený firmě ABC. Pro jednoduchost nechť neexistují akční ceníky a ceny nechť jsou zadány pro jednotku, v níž se karta prodává a v lokální měně a shodně, co se týče nastavení s DPH/bez DPH. Dále nechť karta má jen jednu jednotku (tj. má-li v ceníku 0, je to definitivní, nelze dopočítat nenulovou cenu z nenulové ceny od jiné jednotky). Vystavujeme FV na firmu ABC z hlavního skladu. Firma ABC nechť má nastavenu preferovanou definici ceny na 03. Ceny nechť jsou pro aktuální platnost ceníků zadány následovně:
 

Skl.karta 01 02 03 04 05 06 07
Ceník
Definice ceny
HLAV SKL FIR HLAV SKL FIR HLAV SKL FIR HLAV SKL FIR HLAV SKL FIR HLAV SKL FIR HLAV SKL FIR
def1 10000 9999 9500 1000 999 950 100 99 - 10 9,9 - 5 4,9 - 5 - - 10000 9999 9500
def2 (hlavní) 9900 8888 9400 990 888 940 90 88 - 9 8,8 - 4 0 - 4 - - 9900 8888 9400
def3 9800 7777 0 980 0 930 80 77 - 8 0 - 0 0 - 0 - - 9800 0 0

Nechť je v parametrech nastaveno:
- Pro prodejní ceny použít ceník = Postupně skladový a hlavní
- Předvolba prodejní ceny = Hlavní ceny

a) Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě = Vždy (tj. i tehdy, vede-li na nulovou prodejní cenu)

Skl.karta Výchozí cena Komentář
01 0 Hledá se def3 (coby preferovaná pro fy ABC) a to přednostně ve firemním ceníku FIR. Karta 01 v něm je, ale cenu def3 v něm má nulovou. Ale jelikož je parametr Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě nastaven na "Vždy", tj. použít tuto definici ceny, i když vede na nulovou prodejní cenu, nulová prodejní cena nalezená v def3 se vybere coby výchozí a v jiném ceníku ani jiná definice ceny se nehledá.
02 930 Opět se hledá def3 a to přednostně z ceníku FIR. Karta 02 v něm je, cenu def3 v něm má nenulovou, tudíž se tato vybere coby výchozí.
03 77 Opět se hledá def3 a to přednostně z ceníku FIR. Karta 03 v něm ale není. Tudíž se cena def3 hledá v dalších cenících a to nejdříve ve skladovém (jelikož parametr Pro prodejní ceny použít ceník = Postupně skladový a hlavní). Karta 03 v ceníku SKL je, cenu def3 v něm má nenulovou, tudíž se tato vybere coby výchozí.
04 0 Opět se hledá def3 a to přednostně z ceníku FIR. Karta 04 v něm ale není. Tudíž se cena def3 hledá v dalších cenících a to opět nejdříve ve skladovém. Karta 04 v ceníku SKL je, ale cenu def3 v něm má nulovou. Ale ze stejného důvodu jako u karty 01 se tato nulová prodejní cena vybere coby výchozí a jiná definice ceny se nehledá.
05 0 Jedná se o stejný případ jako u karty 04. Opět se hledá def3 a to přednostně z ceníku FIR. Karta 05 v něm ale není. Tudíž se cena def3 hledá v dalších cenících a to opět nejdříve ve skladovém. Karta 05 v ceníku SKL je, ale cenu def3 v něm má nulovou. Ale ze stejného důvodu jako u karty 01 se tato nulová prodejní cena vybere coby výchozí a jiná definice ceny se nehledá.
06 0 Opět se hledá def3 a to přednostně z ceníku FIR. Karta 06 v něm ale není. Tudíž se cena def3 hledá v dalších cenících a to opět nejdříve ve skladovém. Karta 06 v ceníku SKL ale rovněž není. Tudíž se hledá v ceníku HLAV. Karta 06 v ceníku HLAV je, ale cenu def3 v něm má nulovou. Ale ze stejného důvodu jako u karty 01 se tato nulová prodejní cena vybere coby výchozí.
07 0 Opět se hledá def3 a to přednostně z ceníku FIR. Karta 07 v ceníku FIR je, ale cenu def3 v něm má nulovou. Ale ze stejného důvodu jako u karty 01 se tato nulová prodejní cena vybere coby výchozí.

b) Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě = Jen s nenulovou cenou

Skl.karta Výchozí cena Komentář
01 7777 Přednostně se hledá def3 (coby preferovaná pro fy ABC) a to přednostně ve firemním ceníku FIR. Karta 01 v něm je, ale cenu def3 v něm má nulovou. Jelikož je parametr Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě nastaven na "Jen s nenulovou cenou", tak se tato nulová cena v def3 z tohoto ceníku nepoužije. Tudíž se cena def3 hledá v dalších cenících a to nejdříve ve skladovém (jelikož parametr Pro prodejní ceny použít ceník = Postupně skladový a hlavní). Karta 01 v ceníku SKL je, cenu def3 v něm má nenulovou, tudíž se tato vybere coby výchozí.
02 930 Opět se přednostně hledá def3 a to přednostně z ceníku FIR. Karta 02 v něm je, cenu def3 v něm má nenulovou, tudíž se tato vybere coby výchozí a nic dalšího se neřeší.
03 77 Opět se přednostně hledá def3 a to přednostně z ceníku FIR. Karta 03 v něm ale není. Tudíž se cena def3 hledá v dalších cenících a to nejdříve ve skladovém (jelikož parametr Pro prodejní ceny použít ceník = Postupně skladový a hlavní). Karta 03 v ceníku SKL je, cenu def3 v něm má nenulovou, tudíž se tato vybere coby výchozí.
04 8,8

Opět se hledá přednostně def3 a to přednostně z ceníku FIR. Karta 04 v něm ale není. Tudíž se cena def3 hledá v dalších cenících a to opět nejdříve ve skladovém (jelikož parametr Pro prodejní ceny použít ceník = Postupně skladový a hlavní). Karta 04 v ceníku SKL je, ale cenu def3 v něm má nulovou. Ze stejného důvodu jako u karty 01 se tato nulová cena v def3 z tohoto ceníku nepoužije. (V ceníku HLAV se už v tomto případě nehledá.)

Tudíž se hledá nenulová prodejní cena znovu pro jinou definici ceny a to pro def2 (jelikož def2 je hlavní a jelikož je v parametrech nastaveno Předvolba prodejní ceny = Hlavní ceny) a to opět přednostně v FIR, pak ve SKL. Karta 04 v FIR není. V ceníku SKL je, cenu def2 v něm má nenulovou, tudíž se tato vybere coby výchozí.

05 0

Opět se hledá přednostně def3 a to přednostně z ceníku FIR. Karta 05 v něm ale není. Tudíž se cena def3 hledá v dalších cenících a to opět nejdříve ve skladovém. Karta 05 v ceníku SKL je, ale cenu def3 v něm má nulovou. Ze stejného důvodu jako u karty 01 se tato nulová cena v def3 z tohoto ceníku nepoužije. (V ceníku HLAV se už v tomto případě nehledá.)

Tudíž se hledá nenulová prodejní cena znovu pro jinou definici ceny a to pro def2 a to opět přednostně v FIR, pak ve SKL. Karta 05 v FIR není. V ceníku SKL je, ale i cenu def2 v něm má nulovou. Tato cena se použije coby výchozí. (V ceníku HLAV se už v tomto případě nehledá.)

06 4

Opět se hledá přednostně def3 a to přednostně z ceníku FIR. Karta 06 v něm ale není. Tudíž se cena def3 hledá v dalších cenících a to opět nejdříve ve skladovém. Karta 06 v ceníku SKL není. (V ceníku HLAV se už v tomto případě nehledá.)

Tudíž se hledá nenulová prodejní cena znovu pro jinou definici ceny a to pro def2 a to opět přednostně v FIR, pak ve SKL. Karta 05 v FIR není. V ceníku SKL rovněž není, tudíž se hledá dál v HLAV. Karta 06 v ceníku HLAV je, cenu def2 v něm má nenulovou, tudíž se tato vybere coby výchozí.

07 9400

Opět se hledá přednostně def3 a to přednostně z ceníku FIR. Karta 07 v ceníku FIR je, ale cenu def3 v něm má nulovou. Tudíž se cena def3 hledá v dalších cenících a to opět nejdříve ve skladovém. Karta 06 v ceníku SKL je, ale cenu def3 v něm má rovněž nulovou. (V ceníku HLAV se už v tomto případě nehledá.)

Tudíž se hledá nenulová prodejní cena znovu pro jinou definici ceny a to pro def2 a to opět přednostně v FIR, pak ve SKL. Karta 07 v ceníku FIR je, cenu def2 v něm má nenulovou, tudíž se tato vybere coby výchozí.

 

Příklad 2: Příklad demonstruje hledání při existenci akčního ceníku (dle bodu 2.) a vliv různého nastavení parametru Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě.

Mějme obdobně jako v předchozím příkladu několik skladových karet, 3 definice ceny (def1 až def3, přičemž def2 nechť je hlavní) a 3 ceníky (hlavní (HLAV), skladový (SKL) přiřazený hlavnímu skladu, z něhož budeme v našem příkladu prodávat, a Firemní (FIR) přiřazený firmě ABC. Dále nechť nyní existuje akční ceník (AKC), který nechť je v době prodeje aktuálně platný a v Omezení použití má zadánu firmu ABC a obsahuje zmíněné skladové karty. Pro jednoduchost nechť jsou ceny zadány pro jednotku, v níž se karta prodává a v lokální měně a shodně, co se týče nastavení s DPH/bez DPH. Dále nechť karta má jen jednu jednotku (tj. má-li v ceníku 0, je to definitivní, nelze dopočítat nenulovou cenu z nenulové ceny od jiné jednotky).

Ceny nechť jsou pro aktuální platnost ceníků zadány následovně:

Skl.karta 01 02 03
Ceník
Definice ceny
AKC HLAV SKL FIR AKC HLAV SKL FIR AKC HLAV SKL FIR
def1 0 10000 9999 9500 0 1000 999 950 70 100 99 -
def2 (hlavní) 6000 9900 8888 9400 700 990 888 940 0 90 88 -
def3 5000 9800 7777 0 0 980 0 930 0 80 77 -

Nechť je v parametrech nastaveno:
- Pro prodejní ceny použít ceník = Postupně skladový a hlavní
- Předvolba prodejní ceny = Hlavní ceny
- Akční ceník = Uplatňovat vždy

Vystavujeme FV na firmu ABC z hlavního skladu. Firma ABC nechť má nastavenu preferovanou definici ceny na 03.

a) Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě = Vždy (tj. i tehdy, vede-li na nulovou prodejní cenu)

Skl.karta Výchozí cena Komentář
01 5000 Hledá se def3 (coby preferovaná pro fy ABC). Platný akční ceník existuje a pro firmu ABC platí, tudíž se hledá nejdříve v něm. Karta 01 v něm je a cenu def3 v něm má nenulovou. Prodejní cena nalezená v def3 se vybere coby výchozí.
02 0 Opět se hledá def3 a to nejdříve z ceníku AKC. Karta 02 v něm je, ale cenu def3 v něm má nulovou. Ale jelikož je parametr Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě nastaven na "Vždy", tj. použít tuto definici ceny, i když vede na nulovou prodejní cenu, nulová prodejní cena nalezená v def3 se vybere coby výchozí a v jiném ceníku ani jiná definice ceny se nehledá.
03 0 Opět se hledá def3 a to nejdříve z ceníku AKC. Karta 03 v něm je, ale cenu def3 v něm má nulovou. Ale ze stejného důvodu jako u karty Y se tato nulová prodejní cena vybere coby výchozí a v jiném ceníku ani jiná definice ceny se nehledá.

b) Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě = Jen s nenulovou cenou

Skl.karta Výchozí cena Komentář
01 5000 Hledá se def3 (coby preferovaná pro fy ABC). Platný akční ceník existuje a pro firmu ABC platí, tudíž se hledá nejdříve v něm. Karta 01 v něm je a cenu def3 v něm má nenulovou. Prodejní cena nalezená v def3 se vybere coby výchozí.
02 700 Opět se hledá def3 a to nejdříve z ceníku AKC. Karta 02 v něm je, ale cenu def3 v něm má nulovou. Jelikož je parametr Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě nastaven na "Jen s nenulovou cenou", tak se tato nulová cena v def3 z tohoto ceníku nepoužije.
Tudíž se hledá nenulová prodejní cena znovu pro jinou definici ceny a to pro def2 a to opět v AKC. Karta 02 v něm má cenu def2 nenulovou, tudíž se tato vybere coby výchozí.
03 0

Opět se hledá def3 a to nejdříve z ceníku AKC. Karta 03 v něm je, ale cenu def3 v něm má nulovou. Ale ze stejného důvodu jako u karty 02 se tato nulová prodejní cena nepoužije.
Tudíž se hledá nenulová prodejní cena znovu pro jinou definici ceny a to pro def2 a to opět v AKC. Karta 02 v něm má ale i cenu def2 nulovou. Tato cena se použije coby výchozí.

Tedy tato cena se použije, i když je nulová - nicméně program to chápe tak, že je tato nula chtěná. (Odběratel má dostat dané zboží zdarma tak, jak je uvedeno v platném akčním ceníku, viz poznámka u bodu 2.b.ii.III.b.b. (Neboli v běžných cenících se už v tomto případě nehledá. Viz bod 2.b.ii.III.b.b.)

 

Příklad 3: Příklad demonstruje hledání při existenci akčního ceníku (dle bodu 2.) a vliv nastavení parametru Akční ceník = Upřednostnit nižší cenu, kdy se pak navíc porovnává, zda cena z akčního ceníku vyjde nižší než z běžných (viz bod 2.b.iii).

Mějme obdobně jako v předchozím příkladu několik skladových karet, 3 definice ceny (def1 až def3, přičemž def2 nechť je hlavní) a 3 ceníky (hlavní (HLAV), skladový (SKL) přiřazený hlavnímu skladu, z něhož budeme v našem příkladu prodávat, a Firemní (FIR) přiřazený firmě ABC. Dále nechť nyní existuje akční ceník (AKC), který nechť je v době prodeje aktuálně platný a v Omezení použití má zadánu firmu ABC a obsahuje zmíněné skladové karty. Pro jednoduchost nechť jsou ceny zadány pro jednotku, v níž se karta prodává a v lokální měně a shodně, co se týče nastavení s DPH/bez DPH. Dále nechť karta má jen jednu jednotku (tj. má-li v ceníku 0, je to definitivní, nelze dopočítat nenulovou cenu z nenulové ceny od jiné jednotky).

Ceny nechť jsou pro aktuální platnost ceníků zadány následovně:

Skl.karta 01 02 03
Ceník
Definice ceny
AKC HLAV SKL FIR AKC HLAV SKL FIR AKC HLAV SKL FIR
def1 0 10000 9999 9500 0 1000 999 950 70 100 99 -
def2 (hlavní) 6000 9900 8888 9400 700 990 888 940 0 90 88 -
def3 5000 9800 7777 0 0 980 0 930 0 80 77 -

Nechť je v parametrech nastaveno:
- Pro prodejní ceny použít ceník = Postupně skladový a hlavní
- Předvolba prodejní ceny = Hlavní ceny
- Akční ceník = Upřednostnit nižší cenu

Vystavujeme FV na firmu ABC z hlavního skladu. Firma ABC nechť má nastavenu preferovanou definici ceny na 03. Dealerské procento nechť má 30% a na FV nechť je zapnuto použití dealerských slev procentem z adresáře. Akční ceník AKC nechť je z deal. slev vyloučen (ceny v něm jsou již akční a uživatel si nepřeje na ně aplikovat ještě nějaké další slevy).

a) Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě = Vždy

Skl.karta Výchozí cena Komentář
01 0

Platný akční ceník existuje a pro firmu ABC platí, tudíž se hledá nejdříve v něm. Karta 01 v něm je a cenu def3 v něm má nenulovou. Jelikož parametr Akční ceník má hodnotu "Upřednostnit nižší cenu" provede se nejdříve zkušební zjištění, která z cen (zda z akčního či běžných ceníků po aplikaci příp. dealerské slevy) vychází nižší a ta se pak použije:

  • Prodejní cena nalezená v akčních cenících za téhož nastavení vychází 5000 (viz Příklad 2a) pro kartu 01), z deal. slev je AKC vyloučen, tudíž žádné další snížení díky deal. slevě nenastává.
  • Prodejní cena nalezená v běžných cenících za téhož nastavení vychází 0 (viz Příklad 1a) pro kartu 01).

    5000 > 0 => Koncová cena z akčních ceníků NEvychází nižší, tudíž se jako výchozí prodejní cena použije cena dohledaná v běžných cenících, tj. 0.

02 0

Opět se hledá nejdříve z ceníku AKC. Karta 02 v něm je. Opět se nejdříve provede porovnání, z kterého ceníku vyjde nižší výsledná koncová cena:

  • Prodejní cena nalezená v akčních cenících za téhož nastavení vychází 0 (viz Příklad 2a) pro kartu 02).
  • Prodejní cena nalezená v běžných cenících za téhož nastavení vychází 930 (viz Příklad 1a) pro kartu 02), po aplikaci 30% deal. slevy je to pak 651.

    0 < 651 => Koncová cena z akčních ceníků vychází nižší, tudíž se jako výchozí prodejní cena použije cena dohledaná v akčních cenících, tj. 0.

03 0

Opět se hledá nejdříve z ceníku AKC. Karta 03 v něm je. Opět se nejdříve provede porovnání, z kterého ceníku vyjde nižší výsledná koncová cena. Situace je zde shodou okolností úplně stejná jako u karty 02:

  • Prodejní cena nalezená v akčních cenících za téhož nastavení vychází 0 (viz Příklad 2a) pro kartu 03).
  • Prodejní cena nalezená v běžných cenících za téhož nastavení vychází 77 (viz Příklad 1a) pro kartu 03), po aplikaci 30% deal. slevy je to pak 53,9.

    0 < 53,9 => Koncová cena z akčních ceníků vychází nižší, tudíž se jako výchozí prodejní cena použije cena dohledaná v akčních cenících, tj. 0.

b) Předvolba prodejní ceny - upřednostnit definici prodejní ceny na firmě = Jen s nenulovou cenou

Skl.karta Výchozí cena Komentář
01 5000

Platný akční ceník existuje a pro firmu ABC platí, tudíž se hledá nejdříve v něm. Karta 01 v něm je a cenu def3 v něm má nenulovou. Jelikož parametr Akční ceník má hodnotu "Upřednostnit nižší cenu" provede se nejdříve zkušební zjištění, která z cen (zda z akčního či běžných ceníků po aplikaci příp. dealerské slevy) vychází nižší a ta se pak použije:

  • Prodejní cena nalezená v akčních cenících za téhož nastavení vychází 5000 (viz Příklad 2b) pro kartu 01), z deal. slev je AKC vyloučen, tudíž žádné další snížení díky deal. slevě nenastává.
  • Prodejní cena nalezená v běžných cenících za téhož nastavení vychází 7777 (viz Příklad 1b) pro kartu 01), po aplikaci 30% deal. slevy je to pak 5443,9.

    5000 < 5443,9 => Koncová cena z akčních ceníků vychází nižší, tudíž se jako výchozí prodejní cena použije cena dohledaná v akčních cenících, tj. 5000.

02 930

Opět se hledá nejdříve z ceníku AKC. Karta 02 v něm je. Opět se nejdříve provede porovnání, z kterého ceníku vyjde nižší výsledná koncová cena:

  • Prodejní cena nalezená v akčních cenících za téhož nastavení vychází 700 (viz Příklad 2b) pro kartu 02), z deal. slev je AKC vyloučen, tudíž žádné další snížení díky deal. slevě nenastává.
  • Prodejní cena nalezená v běžných cenících za téhož nastavení vychází 930 (viz Příklad 1b) pro kartu 02), po aplikaci 30% deal. slevy je to pak 651.

    700 > 651 => Koncová cena z akčních ceníků NEvychází nižší, tudíž se jako výchozí prodejní cena použije cena dohledaná v běžných cenících, tj. 930.

03 0

Opět se hledá nejdříve z ceníku AKC. Karta 03 v něm je. Opět se nejdříve provede porovnání, z kterého ceníku vyjde nižší výsledná koncová cena:

  • Prodejní cena nalezená v akčních cenících za téhož nastavení vychází 0 (viz Příklad 2b) pro kartu 03).
  • Prodejní cena nalezená v běžných cenících za téhož nastavení vychází 77 (viz Příklad 1b) pro kartu 03), po aplikaci 30% deal. slevy je to pak 53,9.

    0 < 53,9 => Koncová cena z akčních ceníků vychází nižší, tudíž se jako výchozí prodejní cena použije cena dohledaná v akčních cenících, tj. 0.

 

Ceny odkazem:

Výše popsaný algoritmus platí i pro případ, kdy se jedná o Objednávku přijatou, kde jsou prodejní ceny zadávány pouze odkazem. Pak se samozřejmě nevyčísluje konkrétní výchozí jednotková prodejní cena konkrétním číslem, ale jen výchozí definice cen, tj. odkaz na jednu z definic cen. Automatické vyčíslení a předvyplnění výchozí definice cen podle tohoto algoritmu však lze na objednávce potlačit v položce Předvyplňovat prodejní cenu.

Při importu objednávky do následného prodejního dokladu se k zadané definici cen dohledá konkrétní prodejní cena v cenících obdobně, jak bylo uvedeno výše - tj. přednostně ve firemním ceníku pro firmu, poté ve skladovém resp. hlavním ceníku. A příp. se upraví pro zadanou jednotku, měnu atd. dle stejných pravidel.

Řešení specifických požadavků stanovení výchozí ceny (řešení "cenotvorby na míru")

Aby bylo možné ošetřit i specifické požadavky klientů na stanovení prodejních cen, je k dispozici funkce, která umožňuje na řádek prodejního dokladu dosazovat cenu definovanou v externí aplikaci. Tj. tvorba prodejních cen je otevřená tak, že je možné ji libovolně určovat pomocí algoritmu ve formě externí funkce v dynamicky linkované knihovně DLL připojené k instalaci systému ABRA Gen. Potom na všech místech, kde systém ABRA Gen určuje prodejní cenu na základě globálního nastavení a tabulek předvoleb prodejních cen z prodejních ceníků atd. tak, jak je dáno defaultně v systému ABRA Gen, se tato externí funkce zavolá a její implementace může navrhovanou prodejní cenu změnit. Jedná se v zásadě o řešení "cenotvorby na míru".

Uživatel si objedná u oddělení zakázkového programování cenotvorbu, své požadavky specifikuje např. takto: pokud je na řádku dokladu použita zakázka začínající kódem A, všechny skladové karty se budou prodávat za nákupní ceny. Autor DLL implementuje požadovanou funkčnost a soubor DLLHooks.dll předá zákazníkovi. Zákazník pouze tento soubor zkopíruje do instalačního adresáře ABRA Gen a po dalším spuštění se mu ceny automaticky upravují.

Prodejní cena zboží se automaticky zjišťuje např. na následujících místech systému:

  • během vystavování prodejních dokladů FV, PP, OP (s cenami absolutními nebo i odkazem) a NV při zadávání jejich řádků (výběr skladu, skladu, sklad. karty), příp. po vyvolání funkce Aktualizace prodejních cen, která je dostupná v editaci takových dokladů
  • při prodeji přes pokladní prodej či restaurační prodej
  • při vyvolání funkce pro zjištění jedn. prodejní ceny sklad. karty z tiskových sestav a jiných výstupů, tj. volání z QuickReports funkce NxGetStoreCardUnitPrice

V těchto místech se stanoví jednotková prodejní cena postupem popsaným výše. Poté systém zjistí, jestli v adresáři instalace ABRA Gen existuje soubor DLLHooks.dll, a pokud ano, zavede jej do paměti a vyhledá v něm entrypoint GetStoreCardUnitPrice. Pokud DLL nepůjde zavést nebo nebude obsahovat požadovaný entrypoint, popřípadě se během zavolání této externí funkce vyskytne výjimka, DLL se uvolní a až do ukončení programu se budou blokovat další pokusy o totéž. Dále se vytvoří instance objektu Class_AbraOLEWrapper, která se inicializuje kontextem a požádá se pomocí GetAbraOLEApplication o IDispatch rozhraní na běžící ABRA Gen. Toto rozhraní (interface) se bude předávat do externí funkce jako její parametr.

DLL s funkcí je možné vytvářet ve všech vývojových prostředích, které umožňují překlad do této formy, avšak výrobcem je doporučen nástroj Borland Delphi. Tento nástroj je považován za referenční v případě řešení problémů s touto funkcionalitou.

Knihovna DLL se zavede do paměti běžícího procesu ABRA Gen při prvním požadavku na cenotvorbu a od té doby se neuvolní až do ukončení ABRA Gen.

Trvalé zavedení DLL do paměti je výhodné, protože se informace v DLL mohou přidržovat. Pozor, toto může vést v případě špatně napsané knihovny k nestabilitě ABRA Gen.

Externí funkce má řadu parametrů:

  • APrice: navrhnutá cena (vstup i výstup)
  • ACurrency: kód měny
  • APricesWithVat: příznak, zda je cena s DPH nebo bez (pouze vstup)
  • AXMLData: XML řetězec s tzv. neuloženým kontextem. (V případě DLL háčku volaného zevnitř Business objektu, tj. např. z prodejního dokladu FV, PP, ..., to jsou data hlavičky daného dokladu a právě zpracovávaného řádku uložená do XML (aby měla volaná funkce v DLL nějaký "kontext", je jí předán v XML aktuální stav objektu, který ji vyvolal (tedy hlavička a právě zpracovávaný řádek)). V místech, kde se nejedná o volání zevnitř Business objektu (např. volání z QR funkce nebo z pokladního prodeje), a kde se tudíž nepředávají důležité údaje, jako např. množství z daného objektu, se "vymyslí" XML se základními údaji, které jsou v daném místě známé (např. množství).
  • AAbraOLE: IDispatch interface na interní ABRA OLE rozhraní (viz iAbraOLE) aj.).

V případě zavolání si z dat ve formátu XML z právě editovaného dokladu zjistí údaje, které potřebuje pro stanovení prodejní ceny (kód skladu, kód skladové karty, jednotku, ale třeba i obchodní případ aj. (podle toho, z jakých údajů uživatel ceny stanovuje)). Může rovněž využít kontakt na běžící aplikaci (viz napojení přes iAbraOLE), pokud potřebuje zjistit nějaké dodatečné informace potřebné pro výpočet ceny. Vypočítá prodejní cenu a nastaví ji, zároveň vrátí jako návratovou hodnotu integer. Pokud je návratová hodnota nenulové číslo, převezme si ABRA Gen novou jednotkovou prodejní cenu a pracuje s ní stejně jako kdyby byla stanovena bez volání DLL. V případě, že externí aplikace individuální cenu nedohledá, dosadí se na řádek cena dle standardních pravidel ABRA Gen.

Bezchybné vytvoření požadovaného DLL vyžaduje hloubkovou znalost systému. Proto podrobnější popis aktuálně platných parametrů funkce GetStoreCardUnitPrice a jejího dalšího použití není předmětem tohoto helpu! V případě zájmu o tuto funkcionalitu kontaktujte servisní síť výrobce.