我对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)
答案 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
。