如何在文本字段和变量之间执行减法

时间:2015-12-30 07:41:20

标签: jasper-reports

我对ireport-5.6.0很新。

我有一个文本字段( Sanctioned_intake )和一个声明变量( ROPORT_COUNT .Sanctioned_intake 只是学生总数部门和 REPORT_COUNT 是返回报告中的行总数

例如:

认可摄入量:140(每个部门的学生总数)

实际录取:10(实际录取)

应该是差异:

空缺:130(剩余空缺)

现在我的问题是如何区分这两个

我宣布一个变量

并设置以下属性

变量class = java.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) 

2 个答案:

答案 0 :(得分:0)

$ V {REPORT_COUNT}的数据类型是整数。

检查每个字段和变量的数据类型。

或者,如果数据类型为$ F {sanctioned_intake} == BigDecimal,则将变量表达式更改为

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

答案 1 :(得分:0)

该错误与$F{sanctioned_intake}声明为java.lang.String有关。

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

但是我不认为你会将你的例外结果更改为java.math.BigDecimal,因为jasper报告的内容为EvalutationTime$V{REPORT_COUNT}将从0开始并达到报告总数仅在显示所有记录时。

要显示2个字段的差异,将它们声明为Integer(如果不能,则需要在计算差异之前解析它们),然后使用文本字段。

示例考虑$ F&#39}是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上设置正确的评估时间(以便变量有时间计算)

例如

<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",或许您希望在language="java"代码上使用jasperReport