Výrazy a funkce

Výrazy počítají hodnoty polí z jiných polí pomocí vestavěných funkcí.

Kde se výrazy používají

Výrazy fungují i na tenantu, který nepovolil skripty.

Akce „Vypočítat vzorcem“ (setExpression) v detailu pravidla: cílové pole Celkem a vzorec v pravém sloupci, pod tím věta „Čte se jako“

Syntaxe výrazů

Hodnoty a odkazy

ZápisVýznamPříklad
číslodesetinná tečka, záporná čísla, exponent. Číslo s úvodní nulou (04) není platné.42, 3.5, .5, 1e3
textv jednoduchých nebo dvojitých uvozovkách; zpětné lomítko pro \n, \t, \\, \', \""Schváleno"
true, false, nulllogické hodnoty a prázdnoIF([Hotovo], true, false)
[Pole] nebo {Pole}hodnota pole podle interního názvu (písmena, číslice, podtržítko). Obě závorky jsou rovnocenné.[Cena] * [Kusy]
@Todaydnešní datum jako text YYYY-MM-DDDATEDIFF([Termin], @Today)
@Mejméno přihlášeného uživatele (jméno, jinak přihlašovací jméno, jinak e-mail)CONCAT("Schválil ", @Me)

Interní název pole najdete v inspektoru pole. Samotný identifikátor bez závorek (Cena) není pole a vzorec je neplatný; pole vždy pište jako [Cena].

Operátory a priorita

Od nejnižší priority po nejvyšší:

  1. podmíněný výraz podmínka ? a : b (lze vnořovat)
  2. || (nebo), ?? (pravá strana, je-li levá strana bez hodnoty: null, nevyplněné pole, prázdný řetězec nebo text ze samých mezer, stejně jako u ISBLANK a COALESCE; hodnoty 0 a false zůstanou)
  3. && (a)
  4. ==, !=, ===, !==
  5. <, <=, >, >=
  6. +, -
  7. *, /, %
  8. unární -, +, !
  9. volání metody a vlastnosti: .toFixed(2), .length a další (viz níže)

Kulatými závorkami pořadí změníte. Chování operátorů odpovídá JavaScriptu: + s textem spojuje texty ("A" + [Cislo]), s čísly sčítá. Logické operátory vrací jednu z hodnot, ne vždy true/false. Nepravdivé jsou 0, prázdný text, null a false.

[Cena] * [Kusy] * (1 + [DphProcent] / 100)
[Stav] == "Schváleno" ? "Hotovo" : "Čeká"
[Cena] > 0 && [Kusy] > 0

Aliasy JavaScriptu a metody

Pro uživatele, kteří znají JavaScript, fungují tato volání jako aliasy vestavěných funkcí:

ZápisStejné jako
Math.round(x), Math.floor(x), Math.ceil(x), Math.abs(x), Math.sqrt(x)ROUND, FLOOR, CEIL, ABS, SQRT
Math.min(...), Math.max(...), Math.pow(x, y)MIN, MAX, POWER
Number(x), parseFloat(x)VALUE
String(x)TEXT

Povolené jsou jen čtyři metody a jedna vlastnost: .toFixed(n) (číslo jako text s n desetinnými místy, 0 až 20), .toUpperCase(), .toLowerCase(), .trim() a .length (délka textu). Jiné metody jsou chyba (nepovolená metoda). Názvy vestavěných funkcí nerozlišují velikost písmen (round = ROUND), názvy Math.… ano.

([Cena] * 1.21).toFixed(2)   →  "121.00"
[Nazev].trim().toUpperCase()
Math.max([A], [B])

Převod hodnot polí

Hodnota pole se do výrazu dostane takto:

Výsledek výrazu

Textová šablona (záložní chování)

Pokud výraz nejde přečíst jako vzorec, nepovažuje se za chybu, ale za textovou šablonu: tokeny [Pole], {Pole}, @Me a @Today se nahradí hodnotami a zbytek zůstane textem. Díky tomu fungují šablony:

Faktura - {Supplier} ({Status})   →  "Faktura - Contoso (Schváleno)"
2026-11-04                         →  "2026-11-04"   (zůstane textem, ne 2011)

Překlep ve vzorci (například SUMM([A], [B])) se proto nezastaví chybou za běhu: místo výsledku se do pole zapíše text šablony. Chybu uvidíte v návrháři pod polem se vzorcem (viz Ověření v návrháři) a v ladicím výpisu.

Dosazují se jen hodnoty, které už jsou v poli. Dosazený text se dál nevyhodnocuje a odkaz na neexistující pole dá prázdný text.

Ověření v návrháři

Pod polem se vzorcem (akce setExpression v pravidle i v tlačítku) kontroluje návrhář syntaxi průběžně. Neplatný vzorec označí červeně zprávou ve tvaru „Neplatný vzorec, pozice 7: neznámá funkce SUMM. Za běhu se text použije jako textová šablona.“ Pozice se počítá od 1. Rozpoznané chyby:

Kontrola ověřuje jen zápis. Neověřuje, zda pole [Pole] existuje, ani zda dává výsledek smysl.

Červená zpráva „Neplatný vzorec, pozice …“ pod polem se vzorcem (zadejte do akce setExpression například SUMM([A]))

Bezpečnost výrazů

Výrazy se nevyhodnocují přes eval ani new Function, ale vlastním analyzátorem:

Souhrn zabezpečení konfigurace najdete na stránce Zabezpečení, pravidla pro skripty na stránce Skripty.

Chyby ve výrazech

Chyby vzorců za běhu formulář nepřeruší a koncovému uživateli se nezobrazí. Zjistíte je takto:

Funkce

Funkce se zapisují velkými i malými písmeny, argumenty se oddělují čárkou. Počet argumentů je pevný nebo rozsah; jiný počet je chyba špatný počet argumentů. Čísla se v argumentech berou podle převodu hodnot, prázdná hodnota jako 0.

IF

IF(podmínka, hodnotaPokudPravda, hodnotaPokudNepravda?), 2 až 3 argumenty. Vrátí druhý argument, je-li podmínka pravdivá, jinak třetí (když chybí, false). Vyhodnotí se jen vybraná větev.

IF([Cena] > 10000, "Vyžaduje schválení", "OK")   →  "Vyžaduje schválení"  (při Cena = 12000)

AND

AND(a, b, …), 1 a více argumentů. Vrátí true, když jsou všechny argumenty pravdivé. Vyhodnocuje se zleva a po první nepravdě se končí.

AND([Cena] > 0, [Kusy] > 0)   →  true

OR

OR(a, b, …), 1 a více argumentů. Vrátí true, když je alespoň jeden argument pravdivý.

OR([Stav] == "Nový", [Stav] == "Koncept")   →  true  (při Stav = "Nový")

NOT

NOT(a), 1 argument. Obrátí pravdivost.

NOT(ISBLANK([Poznamka]))   →  true  (je-li poznámka vyplněná)

ROUND

ROUND(číslo, desetinnáMísta?), 1 až 2 argumenty. Zaokrouhlí na celé číslo, nebo na zadaný počet desetinných míst (půlka nahoru). Záporný počet míst zaokrouhluje na desítky, stovky.

ROUND(2.346, 2)   →  2.35
ROUND(1234, -2)   →  1200

FLOOR

FLOOR(číslo), 1 argument. Zaokrouhlí dolů na celé číslo.

FLOOR(7.9)   →  7

CEIL

CEIL(číslo), 1 argument. Zaokrouhlí nahoru na celé číslo.

CEIL(7.1)   →  8

ABS

ABS(číslo), 1 argument. Absolutní hodnota.

ABS(-15)   →  15

SQRT

SQRT(číslo), 1 argument. Druhá odmocnina. Záporné číslo dá neplatný výsledek a cílové pole se vymaže.

SQRT(81)   →  9

POWER

POWER(základ, mocnitel), přesně 2 argumenty. Mocnina.

POWER(2, 10)   →  1024

MIN

MIN(a, b, …), 1 a více argumentů. Nejmenší z čísel.

MIN([A], [B], 100)   →  nejmenší z hodnot A, B a 100

MAX

MAX(a, b, …), 1 a více argumentů. Největší z čísel.

MAX([Cena], 0)   →  0  (při záporné ceně)

SUM

SUM(a, b, …), 1 a více argumentů. Součet. Prázdné hodnoty se berou jako 0.

SUM([Q1], [Q2], [Q3], [Q4])

AVG

AVG(a, b, …), 1 a více argumentů. Aritmetický průměr všech argumentů; prázdná hodnota se počítá jako 0 (neignoruje se).

AVG(10, 20, 30)   →  20

CONCAT

CONCAT(a, b, …), 1 a více argumentů. Spojí hodnoty do jednoho textu; prázdná hodnota dá prázdný text.

CONCAT([Prijmeni], ", ", [Jmeno])   →  "Novák, Jan"

LEN

LEN(text), 1 argument. Počet znaků (stejné jako .length).

LEN("Praha")   →  5

UPPER

UPPER(text), 1 argument. Velká písmena.

UPPER("abc-1")   →  "ABC-1"

LOWER

LOWER(text), 1 argument. Malá písmena.

LOWER("ABC")   →  "abc"

TRIM

TRIM(text), 1 argument. Odstraní mezery na začátku a na konci.

TRIM("  ahoj ")   →  "ahoj"

TODAY

TODAY(), bez argumentů. Dnešní datum v místním čase jako text YYYY-MM-DD (stejné jako @Today).

TODAY()   →  "2026-11-08"

NOW

NOW(), bez argumentů. Aktuální datum a čas v místním čase jako text YYYY-MM-DDTHH:mm:ss.

NOW()   →  "2026-11-08T14:30:05"

YEAR

YEAR(datum), 1 argument. Rok z data ve tvaru YYYY-MM-DD (volitelně s časem). Cokoli jiného dá neplatný výsledek a cílové pole se vymaže.

YEAR("2026-11-04")   →  2026

MONTH

MONTH(datum), 1 argument. Měsíc 1 až 12.

MONTH("2026-11-04")   →  11

DAY

DAY(datum), 1 argument. Den v měsíci.

DAY("2026-11-04")   →  4

DATEDIFF

DATEDIFF(datum1, datum2), přesně 2 argumenty. Rozdíl datum1 − datum2 ve dnech (čas se ignoruje, přechod na letní čas výsledek neovlivní). Je-li datum1 později, výsledek je kladný.

DATEDIFF([Termin], @Today)   →  14   (termín je za 14 dní)
DATEDIFF("2026-12-24", "2026-12-01")   →  23

ISBLANK

ISBLANK(hodnota), 1 argument. true, když je pole nevyplněné (nic, prázdný text nebo jen mezery, prázdný seznam). U odkazu na pole se kontroluje skutečná hodnota pole, nikoli převedená na 0.

IF(ISBLANK([Termin]), "Bez termínu", [Termin])

COALESCE

COALESCE(a, b, …), 1 a více argumentů. Vrátí první argument, který není prázdný (null, prázdný text, nevyplněné pole). Pokud jsou všechny prázdné, vrátí null a cílové pole se vymaže.

COALESCE([Mobil], [Telefon], "bez kontaktu")

VALUE

VALUE(text), 1 argument. Převede text na číslo; z textu přečte číslo na začátku ("12abc" je 12). Text bez čísla dá neplatný výsledek a cílové pole se vymaže. Alias: Number(x), parseFloat(x).

VALUE("42.5") + 1   →  43.5

TEXT

TEXT(hodnota), 1 argument. Převede hodnotu na text (prázdná hodnota na prázdný text). Alias: String(x). Pro pevný počet desetinných míst použijte .toFixed(n).

CONCAT("Číslo ", TEXT([Poradi]))   →  "Číslo 7"