Proměnné (Variables)

Last modified by Jan Šimeček on 2024/08/02 12:08

Pořadí

Změny proměnných jsou vyhodnocovány v pořadí od shora dolů:

1722593306704-227.png

Hodnota Null

Vždy je potřeba v proměnné kontrolovat jestli nemůže být vstupní hodnota NULL:

Výstup se i bez toho může zdát plně funkční a většinou to Jaspersoftu nevadí, ale někdy může docházet k anomáliím, které se projeví až ve vysokém počtu dat. (pozorováno až u zákazníka s 500 000 svazky, doteď si toho nikdo na běžně velkých datech nevšiml).

Třeba tato chybějící kontrola způsobovala problém, kdy se svazky seskupovali do jiné lokace

1722593311051-553.png

Součet desetinných čísel (Kč)

Vždy používat BigDecimal.

Nepoužívat Jasperreport funkce jako je třeba SUM, ale vybírat No Calculation Function - jinak dochází k mezizaokrouhlování, které zkreslí celkový součet. (ne vždy k tomu musí dojít - záleží na datech)

Nastavit počáteční hodnotu pomocí BigDecimal.ZERO.

Sčítání provádět ručně v Expression:

Na příkladu níže k navýšení probíhá pokud je svazek COMMON a není periodikum - jinak je zachována původní hodnota price_summary viz konec.

Pokud svazek podmínku splňuje, tak je proměnná price_summary navýšená pomocí ADD, kde k navýšení dojde pouze pokud je cena vyplněna jinak se přičte pouze nula BigDecimal.ZERO.

(($F{_THIS}.getItem().getType().name().equals("COMMON"))  && ($F{_THIS}.getItem().isPeriodical() == false))?
$V{price_summary}.add($F{_THIS}.getItem().getPrice() != null ? $F{_THIS}.getItem().getPrice() : BigDecimal.ZERO) : $V{price_summary}

1722593317049-783.png