0

我对iReport/JasperReports 服务器有以下问题。

我正在使用带有两个子报表的主报表,它们返回计算出的价格,子报表变量的类型和局部变量是BigDecimal

如果子报表的返回值为空(未找到行),则主报表中分配的局部变量始终为空。但我想要“0.00”,因为我想计算一个总和。

(return_variable == null ? new BigDecimal(0) : return_variable)除了将局部变量设置为默认值之外,该构造也无济于事new BigDecimal(0)。我总是得到null而不是想要的值“0.00”;-(

我已经测试了 3.7.6 到 4.4 版本。iReport,没有任何帮助。

有人对我有提示吗?先感谢您。

4

2 回答 2

0

我遇到了同样的问题,除了我尝试使用子报表的返回值作为另一个子报表的参数。通过在第二个子报告中使用 scriptlet,我成功获得了我想要的结果。

我是这样进行的: -in subreport 2,我有我的参数 p(Float),它的值是 subreport 1 的返回值 -in subreport 2,我有一个变量 v(Float),在我的 scriptlet 中用 p 初始化(在方法 beforeDetailEval() 中,我测试我的变量 v :如果它为空,我将值赋值为 new Float("0.0")

我工作正常。

这样做的限制是,如果您想直接在主报告中使用子报告的返回值。我尝试这样做,但从未成功。

希望有一天这会对某人有所帮助。

塞西尔卡

于 2013-01-04T16:09:47.463 回答
0

雅虎!靠着上帝的恩典,我为自己的问题找到了一个很好的答案。发布它,因为它可能会在将来帮助某人。

1) I changed my Simple SQL Query with a MySQL stored procedure as.

我的存储过程为

BEGIN
SET @p = 0;
SET @n = 0;
SET @m = '00';
SELECT x.*, y.* FROM 
     (select @n:=@n+1 as "ID", @m:=acc as "Account" from tbl_reports) x
        right JOIN 
     (SELECT if(@m='00',0,@p:=@p+1) as "IDU") y
ON y.IDU = x.ID;
END

在 IReport 中,我将变量声明为

$F{IDU}>0?$F{Amount}:0

这样,它现在显示 0.00 而不是 null。

于 2013-11-01T19:18:55.197 回答