2015-12-30 64 views
0

我對ireport-5.6.0非常新。如何執行文本字段和變量之間的減法

我有一個文本字段(Sanctioned_intake)和一個我聲明變量(ROPORT_COUNT.Sanctioned_intake不過每部學生和REPORT_COUNT的總數是總回報沒有行是進入到報告

例如:

被制裁的攝入量:140(每部共有學生)

實際錄取:10(實際錄取服用)

所以差額:

空缺:130(剩餘的空缺)

現在我的問題是,如何讓這兩

之間的差異我聲明單變量

和設置下列屬性

變量類= JA va.math.BigDecimal
運算量
復位類型報告
變量表達式:$ F {} sanctioned_intake .substract($ V {} REPORT_COUNT)

但我得到這個錯誤

Error filling print... Error evaluating expression :      Source text : $F{sanctioned_intake}.substract$V{REPORT_COUNT} 
     net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression :       
    Source text : $F{sanctioned_intake}.substract$V{REPORT_COUNT}  
    at net.sf.jasperreports.engine.fill.JREvaluator.evaluateEstimated(JREvaluator.java:327)  
Caused by: groovy.lang.MissingMethodException:  
No signature of method: java.lang.String.substract() is applicable for argument types: (java.lang.Integer) values: [1] 
Possible solutions: substring(int), substring(int, int)  

回答

0

數據$ V {REPORT_COUNT}的類型是整數。

檢查每個字段和變量的數據類型。

,或者如果$ F {sanctioned_intake}數據類型==的BigDecimal然後改變可變表達至低於

$ F {sanctioned_intake} .substract(新的BigDecimal($ V {REPORT_COUNT}))

+0

但我如何檢查字段類型。 ,在xml字段名稱和類中給出。字段類型不存在我怎麼能檢查這個?我試着改變類類class =「java.math.BigDecimal」和我聲明要採取差異的變量也保留類類型=「java.math.BigDecimal」和在變量表達式我設置$ F {sanctioned_intake} .substract(new BigDecimal($ V {REPORT_COUNT}))現在我得到這個錯誤「方法減法(大十進制)是未定義的類型BigDecimal – Anwar

+0

你可以從字段中看到它 –

0

誤差與$F{sanctioned_intake}宣佈爲java.lang.String有關。

<field name="sanctioned_intake" class="java.lang.String"/> 

不過,我不認爲你會實現你的除外結果將其更改爲java.math.BigDecimal因爲碧玉報告中有一種叫做EvalutationTime,該$V{REPORT_COUNT}會從0開始,而且已顯示所有記錄只達到總報告數。

要顯示2個字段的差異,將它們聲明爲Integer(如果不能,則需要在計算差異之前解析它們),然後使用文本字段。

例如,考慮$ F的是java.lang.Integer

<textField> 
    <reportElement x="163" y="16" width="100" height="20" uuid="4196bd23-306b-44f6-8e3e-4d637facacf6"/> 
    <textFieldExpression><![CDATA[$F{sanctioned_intake}.intValue()-$F{actual_admitted.intValue()}]]></textFieldExpression> 
</textField> 

如果一個需要計算使用一個變量,計算(算)和復位它的需求,然後設置正確的評估時間在你的文本框(這樣變量必須計算時間)

例如

<textField evaluationTime="Report"> 
    <reportElement x="163" y="16" width="100" height="20" uuid="4196bd23-306b-44f6-8e3e-4d637facacf6"/> 
    <textFieldExpression><![CDATA[$F{sanctioned_intake}.intValue()-$V{actual_admitted}.intValue()]]></textFieldExpression> 
</textField> 

注意:您正在使用language="groovy"也許你喜歡在jasperReport標籤上使用language="java"

+0

我宣佈sanctioned_intake文本字段和變量REPORT_COUNT爲java.lang.Integer並將計算設置爲(count)並使用language ='java'獲得0(零)值,但是上面提到的「然後使用文本字段」。我沒有得到這個我們必須添加這個領域我有一個文本字段sanctioned_intake和一個變量REPORT_COUNT和一個更多的變量來存儲最終結果 – Anwar

+0

@Anwar變量REPORT_COUNT是一個jasper報告變量記錄,因爲它填補了細節帶)...使用textField意味着你,如果你正在使用iReport,將該變量拖入帶...然後根據評估時間(見textfield屬性),你將得到不同的結果ES。如果你現在設置,REPORT_COUNT將爲0,如果你設置的頁面將隨頁面上的記錄數增加,如果你設置了報告,它將是所有的記錄)....這就是我想說的...可以使用變量,但是您還必須在textField上設置正確的評估時間(計算時間) –

相關問題