Vyčíslení poštovného a použití kontrolních výrazů
V definici ceníků pošty lze dále zadávat výrazy pro výpočet poštovného a dále výrazy kontrolní:
Výraz pro poštovné definuje, jaká má být částka poštovného pro danou zásilku. Sazby poštovného se odvozují od různých veličin, typicky dle hmotnosti zásilky. Pro některé typy zásilek se výsledné poštovné získá sečtením základního poštovného odvozeného (např. sazba za balík podle jeho hmotnosti) a nějakého "příplatku" (např. za zaslání daného balíku doporučeně). Aby v takovém případu nebylo potřeba definovat ceník např. pro balík obyčejný podle hmotnosti a současně tentýž balík zaslaný doporučeně, či definovat složité výrazy pro poštové, lze definovat tzv. "strukturované poštovné". To se definuje tak, že v definici ceníku je krom základního výrazu poštovného možno uvést v sekci komponenty ceníku seznam jiných dílčích ceníků, které definují zmíněné "příplatky". Výsledné poštovné je pak součtem částek získaných vyhodnocením definice ceníků ze seznamu komponent ceníku a částky získané vyhodnocením výrazu v položce Poštovné. Jinými slovy: celkové poštovné se pak získá sčítáním jednotlivých složek poštovného.
Při definici výrazů je možno využívat různých funkcí, které jsou speciálně stavěné na dohledávání sazeb poštovného s ohledem na to, do jakého intervalu spadá zadaná hodnota.
Příklad: Mějme definovaný ceník "Dobírka" zohledňující výši dobírky s výrazem "IF(CashOnDelivery>1000, 10, 7)" tj. pokud je dobírka větší než 1000Kč bude částka za dobírku 10Kč jinak pouze 7kč. Dále ceník "Doporučeně" s výrazem "9", tj. jednorázový příplatek. Nyní si zadefinujeme ceník "Doporučený balík s dobírkou", jehož výraz bude zohledňovat hmotnost, např. "IF(Weight>100, 12, 6)" a k tomuto ceníku připojíme ceníky "Dobírka" a "Doporučeně". Do poštovného na zásilce 90 gr s dobírkou 2000Kč se vypočte 6 + 10 + 9 = 25Kč.
Kontrolní výrazy slouží pro provedení kontroly, zda hodnoty některých položek splňují požadované podmínky. Lze tak zajistit, že poštovné vyčíslené dle daného ceníku bude správně, jelikož jsou správně zadané všechny pro něj potřebné údaje. Lze jím ale i zajistit, že splněna má být jakákoliv jiná podmínka, např. že pro daný typ zásilky byla zvolena určitá firma apod.
Systém výraz vyhodnotí a podle toho, jakou hodnotu výraz vrací, tak reaguje. Pokud výsledek vyhodnotí jako chybný, pak uživateli zobrazí informační hlášení a nepovolí záznam uložit.
Výsledek vyhodnotí jako chybný:
- vrací-li výraz výsledek typu string a je-li string neprázdný (tj. vrací-li neprázdný řetězec)
- vrací-li výraz výsledek typu boolean a je-li hodnota False
- vrací-li výraz výsledek typu numeric a je-li hodnota 0 (tj. vrací-li číslo a je-li nulové)
Informační hlášení je buď obecné (dáno v programu), anebo může být přesnější a obsahovat text uvedený v daném výrazu, příp. pro upřesnění i jméno položky, je-li ve výrazu uvedeno. Závisí na složitosti použitého výrazu a na tom, zda výraz specifikuje, co se má hlásit, či nikoliv. Objasníme na příkladech:
Příklad: Na odeslané poště je položka Dobírečné (CashOnDelivery) pro zadání částky dobírky. Výše poštovného za dobírku závisí na částce dobírky. Proto, aby bylo poštovné za dobírku spočteno správně, musí být pro tento ceník dobírečné zadané. To lze zajistit kontrolním výrazem, který se zobrazí, je-li dobírečné nezadané. Následující tabulka ukazuje, jaká bude odezva systému, v závislosti na tom, jaký výraz je zadán v položce Kontrolní výraz v ceníku:
Výraz: | Není-li dobírečné zadáno: |
---|---|
IF(CashOnDelivery>0,'','Dobírečné musí být nenulové;CashOnDelivery') | Zobrazí se hlášení: "Dobírečné musí být nenulové." a fokus se postaví na položku Dobírečné, aby ji uživatel mohl obratem doplnit. |
IF(CashOnDelivery>0,'','Dobírečné musí být nenulové') | Zobrazí se hlášení: "Dobírečné musí být nenulové." |
CashOnDelivery>0 | Zobrazí se hlášení: Neznámá chyba při kontrole ceny zásilky. |
CashOnDelivery | Zobrazí se hlášení: Neznámá chyba při kontrole ceny zásilky. |
V rámci výrazů pro výpočet poštovného a kontrolu v cenících pošty je použita řada dodávaných funkcí. Každá funkce má svůj význam, vrací určitou hodnotu, může být volána s různými parametry apod. Syntaxi a popis aktuálně dostupných funkcí naleznete přímo v programu v rámci Editoru výrazů, v částech Funkce a Popis funkce. Zde jen zmíníme význam některých často používaných funkcí a uvedeme příklad použití:
Syntaxe: NxWeight(<Num1>:Numeric, <Num2>:Numeric, <Num31,Num32,Num33, ...>:Numeric):Numeric
Popis: Vrátí hmotnost ve vybrané jednotce, kde
- <Num1> hmotnost
- <Num2> zdrojová jednotka 0 = g, 1 = kg, 2 = t
- <Num31,Num32,Num33, ...> cílová jednotka 0 = g, 1 = kg, 2 = t
Syntaxe: NxChoiceBoundary(<Num1>:Numeric, <Num2>:Numeric, <Num31,Num32,Num33, ...>:Numeric, <Num41,Num42,Num43, ...>:Numeric):Numeric
Popis: Vrátí některou z hodnot v parametru <Num41,Num42,Num43, ...> odpovídající nejnižší hranici z <Num31,Num32,Num33, ...>, pro kterou ještě platí, že je hodnota <Num1> nižší nebo rovná dané hranici. Pokud je <Num1> vyšší než nejvyšší hranice, vrací jako výsledek <Num2>.
Pro zadanou hodnotu <Num1> dohledá nejmenší hranici z <Num31,Num32,Num33, ...>, pro kterou je hodnota <Num1> nižší nebo rovná dané hranici. Jako výsledek vrátí jednu z hodnot v parametru <Num41,Num42,Num43, ...> pro danou hranici. Pokud je <Num1> vyšší, vrací jako výsledek <Num2>.
- <Num1> posuzovaná hodnota
- <Num2> výsledek vracený v případě, že posuzovaná hodnota je mimo hranice
- <Num31,Num32,Num33, ...> hranice
- <Num41,Num42,Num43, ...> výsledek odpovídající dané hranici
- Příklad: Funkce, která podle hmotnosti poštovní zásilky uvedené v <Num1>, vrátí cenu poštovného. Pro hmotnost např. 210g, vrátí jako výsledek 28Kč:
NxChoiceBoundary(210, 0.0,
20, 19,
50, 22,
200, 25,
500, 28,
1000, 32,
2000, 38)