【问题标题】:iReport subreport return valueiReport 子报表返回值
【发布时间】:2012-10-29 11:36:08
【问题描述】:

我正在使用 iReport 4.0.2,我想在我的主报告中显示结果。例如,在我的主报告中,我们有两列,我想得到这两列的总和,就像这种格式:

A      B     sum
10     5      15

其中 A 是主报表中的一个字段,B 是我的子报表的返回值。 这很好用。但是,关键是有时子报表不会返回任何值,这就是问题所在。在这种情况下,sum的结果是这样的:

A       B      sum
10             NULL

正如我们在这里看到的, B 是子报表返回值,但它的值既不是 NULL 也不是 0 。这就是我们遇到这个问题的原因。

我试图找出当 SQL 没有返回结果时如何从子报表中获取返回值。我知道 iReport 有一个名为“当无数据时”的属性,但它没有帮助。 所以我想知道,我们是否有另一种方法来解决 iReport 中的问题或使用一些 SQL 技巧。

【问题讨论】:

    标签: return-value ireport subreport


    【解决方案1】:

    我认为在您的第二个示例中,B 实际上为空,但您的文本字段可能设置了“空时为空”属性。除了 B 的空白之外,我能够重现您的结果。

    真正的问题是您不能使用空值进行加减运算。 JasperReports 只会打印空值。如果表达式中的变量之一为空,您必须添加一些逻辑来提供默认值。例如

    $F{MAIN_REPORT_FIELD} - ($V{SUB_RESULT} == null ? 0 : $V{SUB_RESULT})
    

    不幸的是,对于在 JasperReports 4.0.2 (Case 0005138) 中使用 Groovy 表达式的报表,这已被破坏,并且将始终返回 null。

    你有几个选择:

    1. 您可以升级到解决此问题的 JasperReports/iReport 4.1.1。
    2. 您可以切换到使用 Java 进行表达式。

      根据您的报告,这要么是无痛的,要么是一件苦差事。任何没有正确表达式类的字段都必须修复,并且您可能必须在对非原始/包装类型执行操作的任何表达式中更加明确。

    【讨论】:

    • 谢谢彼得,你说得对。我已经使用一些 SQL 技能解决了这个问题,在 ireport 中我只是设置了一个 var 来记录行,我给这个 var 一个初始值 0 。所以在这种情况下,当 SQL 什么都不返回时,它的值为 0 。然后我将此 var 返回到我的主报告中,我可以使用逻辑表达式来完成我的要求。另一方面,我正在尝试升级到 4.1.1 版本。谢谢。
    【解决方案2】:
    1. 如果您在主报表中对主字段和子报表字段进行求和,则在求和表达式中(主报表字段 + (subreportfield==null ? 0 : subreportfield)。

    2. 将子报表值返回给主报表变量。

    然后做主报告字段和bareport返回变量的总和。

    执行与上述相同的条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-03
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多