Proměnné (Variables)
Pořadí
Změny proměnných jsou vyhodnocovány v pořadí od shora dolů:
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
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}