2012-08-06 48 views
0

我有以下問題iReport/JasperReports服務器iReport/JasperReports服務器:子報告返回值null

我使用的主報告有兩個子報表,返回一個計算價格,子報表變量的類型和本地變量是BigDecimal

如果子報表的返回值爲空(未找到行),則主報表中分配的局部變量始終爲空。但我想要「0.00」,因爲我想計算一筆款項。

構造(return_variable == null ? new BigDecimal(0) : return_variable)不利於將局部變量設置爲默認值new BigDecimal(0)。我總是得到,而不是想要的值「0.00」 ;-(

我曾與3.7.6版本進行試驗,直到4.4。的iReport的,沒有什麼幫助。

有沒有人對我有提示?提前謝謝

+0

您是否嘗試在子報表的樂隊中打印出變量值?它仍然說空嗎?當你單獨運行子報表時會發生什麼?你在使用什麼類型的數據庫? – Lisa 2012-08-06 12:30:49

+0

嗨,Lisa,謝謝你的迴應。在子報表(組頁腳)的範圍內,變量是** 0 **(不爲空),在這個band之後,同一個變量是** null **,我運行了一個postgres 9.0數據庫。如果我用這些選項調用子報表,那麼我不會收到任何回報,因爲結果數爲空。這就是爲什麼我想要將null(無值)替換爲0.00€ – 2012-08-06 13:01:18

+0

上面給出的構造是否可能實際上沒有將空值永久設置爲0?我認爲你的子報表中的值也是一個總和(因爲它在你的組頁腳中)。對於你的數據庫,是否有辦法在dtail band的每一行取一個空值並使其爲零?在Oracle中,我將使用COALESCE或DECODE函數,然後總結結果。那麼即使單個值全部爲零,組頁腳值也將爲0。 – Lisa 2012-08-06 13:49:42

回答

0

我有同樣的問題,除了我試圖使用子報表的返回值作爲另一個子報表的參數我成功地得到了結果我要在第二個子報表中使用scriptlet。

我接着這種方式: -in 2報表,我有我的參數p(浮點型),它的值是子報表的返回值1 -in 2報表,我有一個變量v(浮點型),以初始化p -in我的小腳本(在方法beforeDetailEval(),測試我的變量v:如果是空的,我賦值新的浮動(「0.0」)

我的作品確定

的限制。這是如果你想直接在你的主要報告中使用你的子報告的返回值,我試過這樣做,但從來沒有成功

希望這有助於某些人。

Cecilka

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:[email protected]+1 as "ID", @m:=acc as "Account" from tbl_reports) x 
     right JOIN 
    (SELECT if(@m='00',0,@p:[email protected]+1) as "IDU") y 
ON y.IDU = x.ID; 
END 

在iReport的,我宣佈我的變量

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

通過這種方式,它現在顯示0.00,而不是空。