Vyčíslenie poštovného a použitie kontrolných výrazov
V definícii cenníkov pošty je možné zadávať aj výrazy na výpočet poštovného a kontrolné výrazy:

Výraz na výpočet poštovného definuje, aká má byť suma poštovného pre danú zásielku. Sadzby poštovného sa odvodzujú z rôznych veličín, typicky podľa hmotnosti zásielky. Pre niektoré typy zásielok sa výsledné poštovné získava sčítaním základného poštovného odvodeného (napr. sadzba za balík podľa jeho hmotnosti) a nejakého "príplatku" (napr. za zaslanie daného balíka doporučene). Aby v takom prípade nebolo potrebné definovať cenník napr. pre balík obyčajný podľa hmotnosti a súčasne ten istý balík zaslaný doporučene, alebo definovať zložité výrazy pre poštovné, je možné definovať tzv. "štruktúrované poštovné". To sa definuje tak, že v definícii cenníka je okrem základného výrazu poštovného možné uviesť v sekcii komponenty cenníka zoznam iných čiastkových cenníkov, ktoré definujú spomínané "príplatky". Výsledné poštovné je potom súčtom súm získaných vyhodnotením definície cenníkov zo zoznamu komponentov cenníka a sumy získanej vyhodnotením výrazu v položke Poštovné. Inými slovami: celkové poštovné sa získa sčítaním jednotlivých zložiek poštovného.
Pri definovaní výrazov je možné využívať rôzne funkcie, ktoré sú zostavené špeciálne na dohľadávanie sadzieb poštovného s ohľadom na to, do ktorého intervalu spadá zadaná hodnota.

Kontrolnými výrazmi sa kontroluje, či hodnoty niektorých položiek spĺňajú požadované podmienky. Je tak možné zaistiť, že poštovné vyčíslené podľa daného cenníka bude vyčíslené správne, pretože všetky preň potrebné údaje sú zadané správne. Dá sa nimi zaistiť aj to, že splnená musí byť akákoľvek iná podmienka, napr. že pre daný typ zásielky sa má zvoliť určitá firma apod.
Systém výraz vyhodnotí a podľa toho, akú hodnotu výraz vráti, reaguje. Ak výsledok vyhodnotí ako chybný, užívateľovi zobrazí informačné hlásenie a nepovolí záznam uložiť.
Výsledok vyhodnotí ako chybný:
- ak výraz vracia výsledok typu string a ak string nie je prázdny (tzn. ak vracia neprázdny reťazec)
- ak výraz vracia výsledok typu boolean a ak je hodnota False
- ak výraz vracia výsledok typu numeric a ak je hodnota 0 (tzn. ak vracia číslo a je nulové)
Informačné hlásenie je buď všeobecné (dané v programe), alebo môže byť presnejšie a obsahovať text uvedený v danom výraze, príp. kvôli spresneniu aj meno položky, v prípade, že je vo výraze uvedené. To závisí od zložitosti použitého výrazu a na tom, či výraz špecifikuje, čo sa má hlásiť. Objasníme na príkladoch:
Príklad: Na odoslanej pošte je položka Dobierkové (CashOnDelivery) na zadanie sumy dobierky. Výška poštovného za dobierku závisí od sumy dobierky. Preto, aby sa poštovné za dobierku spočítalo správne, musí byť pre tento cenník dobierkové zadané. To je možné zaistiť kontrolným výrazom, ktorý sa zobrazí, ak dobierkové nie je zadané. Nasledujúca tabuľka ukazuje, aká bude odozva systému, v závislosti od toho, aký výraz je zadaný v položke Kontrolný výraz v cenníku:
Výraz: | Ak nie je dobierkové zadané: |
---|---|
IF(CashOnDelivery>0,'','Dobierkové musí byť nenulové;CashOnDelivery') | Zobrazí sa hlásenie: "Dobierkové musí byť nenulové." a fokus sa postaví na položku Dobierkové, aby ho užívateľ mohol hneď doplniť. |
IF(CashOnDelivery>0,'','Dobierkové musí byť nenulové') | Zobrazí sa hlásenie: "Dobierkové musí byť nenulové." |
CashOnDelivery>0 | Zobrazí sa hlásenie: Neznáma chyba pri kontrole ceny zásielky. |
CashOnDelivery | Zobrazí sa hlásenie: Neznáma chyba pri kontrole ceny zásielky. |

V rámci výrazov na výpočet poštovného a kontrolu v cenníkoch pošty sa používa množstvo dodávaných funkcií. Každá funkcia má svoj význam, vracia určitú hodnotu, môže byť volaná s rôznymi parametrami a pod. Syntax a popis aktuálne dostupných funkcií nájdete priamo v programe v rámci Editora výrazov, v častiach Funkcie a Popis funkcie. Tu spomenieme len význam niektorých často používaných funkcií a uvedieme príklad použitia:

Syntax: NxWeight(<Num1>:Numeric, <Num2>:Numeric, <Num31,Num32,Num33, ...>:Numeric):Numeric
Popis: Vráti hmotnosť vo vybranej jednotke, kde
- <Num1> hmotnosť
- <Num2> zdrojová jednotka 0 = g, 1 = kg, 2 = t
- <Num31,Num32,Num33, ...> cieľová jednotka 0 = g, 1 = kg, 2 = t

Syntax: NxChoiceBoundary(<Num1>:Numeric, <Num2>:Numeric, <Num31,Num32,Num33, ...>:Numeric, <Num41,Num42,Num43, ...>:Numeric):Numeric
Popis: Vráti niektorú z hodnôt v parametri <Num41,Num42,Num43, ...> príslušnú najnižšiu hranicu z <Num31,Num32,Num33, ...>, pre ktorú ešte platí, že hodnota <Num1> je nižšia alebo sa rovná danej hranici. Ak je <Num1> vyššia ako najvyššia hranica, vracia ako výsledok <Num2>.
K zadanej hodnote <Num1> dohľadá najmenšiu hranicu z <Num31,Num32,Num33, ...>, pre ktorú je hodnota <Num1> nižšia alebo rovnaká ako daná hranica. Ako výsledok vráti jednu z hodnôt v parametri <Num41,Num42,Num43, ...> pre danú hranicu. Ak je <Num1> vyššia, vracia ako výsledok <Num2>.
- <Num1> posudzovaná hodnota
- <Num2> výsledok, ktorý sa vracia v prípade, že posudzovaná hodnota je mimo hranice
- <Num31,Num32,Num33, ...> hranica
- <Num41,Num42,Num43, ...> výsledok zodpovedajúci danej hranici
- Príklad: Funkcia, ktorá podľa hmotnosti poštovej zásielky uvedenej v <Num1>, vráti cenu poštovného. Pre hmotnosť napr. 210g vráti ako výsledok 0,93 EUR (28SK):
NxChoiceBoundary(210, 0.0,
20, 19,
50, 22,
200, 25,
500, 28,
1000, 32,
2000, 38)