2015-12-30 40 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上设置正确的评估时间(计算时间) –

相关问题