【问题标题】:Create summary in report footer by omitting suppressed records通过省略隐藏的记录在报表页脚中创建摘要
【发布时间】:2012-05-05 01:51:32
【问题描述】:

我在报告中有一个组标题部分,它显示来自名为 Personal 的公式字段的汇总,

if not IsNull({AirBilling.BillingCode}) and {AirBilling.BillingCode} = 'P' then
    {AirBilling.Gross}
else
    0

现在,在报告页脚的报告末尾,我显示了在组标题部分中计算的所有个人总计的汇总总计。现在我有一个过滤某些记录的子报表,根据子报表返回的计数,我在主报表中隐藏记录。我的问题是,我的主要报告也在页脚总数中考虑了被抑制记录的计数。当我尝试在上面的公式字段逻辑中放置一个条件时,如果 RowCount>0 则..(如果不是 IsNull..),但是当我尝试运行报告时,它给了我一个错误,上面写着“摘要有在非经常性字段上指定'。有没有办法可以省略要在页脚部分计算的抑制记录。 RowCount 是子报表返回的共享变量值,我用它来过滤主报表中的记录。

【问题讨论】:

  • 这听起来很可怕——你能不能退后一步解释一下子报表在做什么,我们可以建议你如何在没有它的情况下实现相同的结果?对这类任务使用共享变量确实会使最琐碎的任务变得复杂
  • 实际上,子报表正在比较数据库中的屏蔽数据和允许用户在报表中输入的参数。没有不使用子报表的解决方法,因为这是为取消屏蔽数据创建存储过程的方式。因此,如果除了不使用子报表之外还有其他方法可以解决此问题,那就太好了。
  • not IsNull({AirBilling.BillingCode}) 条件在上面的表达式中是多余的——如果{AirBilling.BillingCode}'P',那么根据定义它不为空。
  • 在 Crystal Reports 中,他可能编写了“not IsNull”first,因为典型的 C# 例程在尝试评估 {AirBilling 时会抛出“Object not set...” .BillingCode} 为空。即使水晶在评估空值时没有失败,我也能理解他为什么这样做。

标签: crystal-reports crystal-reports-2008


【解决方案1】:

据我了解,您正在尝试运行子报表以确定是否应排除主报表中的某些行(从显示和总计中)。您可以使用两种方法来解决此问题:

  • 在主报表的查询/存储过程中复制子报表中的逻辑,以便相关记录在到达 Crystal 之前被排除。不需要子报告。
  • 交换子报表和主报表(假设当前子报表中不需要来自当前主报表的数据,除了用户输入的参数)并传递来自现在主报表的相关数据主报告到已成为子报告的内容,作为参数。

我推荐前一种方法,因为 Crystal 作为格式化数据的工具比操作数据更好 - SQL 通常是更好的数据操作工具。

【讨论】:

    【解决方案2】:

    是否有可能让另一个字段保持隐藏状态,运行一个公式来确定该行是否被抑制。基于此,它显示 0 或 1。然后您可以统计该字段的行数。

    或者,您可以从一个存储过程构建该子报表,该存储过程生成一个已经为您完成工作的列。然后你可以使用它返回的数据列来帮助解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 2021-05-08
      • 2013-05-30
      相关资源
      最近更新 更多