【问题标题】:Summations of values and showing result in the same row in iReport值的总和并在 iReport 的同一行中显示结果
【发布时间】:2016-04-04 20:08:44
【问题描述】:

我正在使用 iReport 设计器。我在报告中有四列。一列的值将通过对其他列进行求和和减法来计算。

我的结果公式如下所示:

($V{cust_amount} == null ? new BigDecimal(0) : $V{cust_amount}).subtract( ($V{airlines_amount} == null ? new BigDecimal(0) : $V{airlines_amount}).subtract(($V{indi_amount} == null ? new BigDecimal(0) : $V{indi_amount}) ) )

但是结果就在预期的下一行。我也附上一张图片。

这里的金额 -15100 应该出现在第一行。但是每个值都在右行下方,并且第一行始终为空。

【问题讨论】:

    标签: jasper-reports


    【解决方案1】:

    您的三元表达式似乎很好 - 问题在于您正在使用的变量的值分配。这些值是在评估第一行之后分配的,并且永远不会更改,或者它们被一遍又一遍地分配相同的值。

    您可以修复变量的值分配,但我建议放弃变量并使用表达式中的实际字段,如 $F{cust_amount} - 这样您将在打印行之前保证正确的值分配。

    【讨论】:

    • 谢谢。如果我使用实际的字段表达式,它会在所有行中给出正确的值。但在底行是一个汇总行,它根据一个组汇总金额。它没有给出实际值。它没有添加最后一行。我已经创建了一个变量,并且在该组中设置了它的重置类型,计算为 Sum,变量表达式在表达式中给出了实际字段。你可以看看这里。 s17.postimg.org/nnqj711vj/irpeort.png
    • 在这种情况下,您将不得不使用一个额外的变量来保存您的三元表达式的值(我们称之为 rowTotal)。 MARKUP 下的 Total 必须评估为 +=rowTotal 并在组中重置。
    • 请原谅我的无知。我将三元表达式的值保存在变量中。但我没有得到文本字段表达式。像这样:$V{rowTotal}.add( $V{rowTotal} ) 请注意,我使用的是 BigDecimal 数据类型。并且它的评估时间设置在Group。
    • 您不需要指定求和表达式 - Jasper 会为您完成。只需设置 Calculation=Sum, ResetType=Group, VariableExpression=$V{rowTotal} - 这意味着该组内所有 rowTotals 的总和。
    • 它仍然没有添加组的最后一行。它总是在下次评估时添加计算中的最后一行。并且总是忽略最后一行。你可以看看这里。 s27.postimg.org/xy4pppy9v/markup_total.png 你可以看到它在第二组评估计算中添加了第一个评估的最后一行-5000,而忽略了第二组的最后一行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多