[如果一个或多个记录包含特定数据,则在Crystal报表中显示对象

问题描述 投票:0回答:1

我有一个Crystal报表(CR Developer v11.5.12.1838),如果其中一个或多个明细记录包含特定的部分,则我只想在Report Footer中显示某些总计。信息。为此,我在报告中创建了三个公式:

  • InitDisplayLIATotals-放置(并隐藏)在Report Header部分
Global BooleanVar LIA := False;
  • SetDisplayLIATotals-放置在(禁止显示的)Group Header中(报告中唯一的组标题)注意:我也尝试将其放置在Detail部分
Global BooleanVar LIA;

WhilePrintingRecords;

If LIA = False Then
    If Not IsNull({mydata.liamp}) And Not (Trim({mydata.liamp}) = "") Then
        LIA := True;
  • DisplayLIATotals-放置在Report Footer中,并在总计“标签”对象的抑制公式中使用。
Global BooleanVar LIA;

LIA;

意图是,如果当前数据集中的一个或多个记录在True字段中具有非NULL值(无论记录位置如何),则公式应ONLY返回mydata.liamp。如果数据集中的所有记录在此字段中都为NULL值,则应返回False

但是,我似乎无法正常工作。我将公式放在Report Footer中作为可打印字段进行确认,即使我知道它应该返回False,它也始终打印True。当我将公式放在Detail部分中(并使它可见)时,我看到它在第一条记录上返回True,但是所有后续记录都将其显示为False,从而得出False值在报告页脚

我还没有掌握Crystal Reports中编写公式的技巧,所以我确定我只是在这里漏掉/忽略了一些东西,但是我不确定那会是什么。有人可以帮我弄清楚为什么我不能可靠地使它返回正确的值吗?

crystal-reports global-variables formula
1个回答
0
投票

感谢@heringer在问题评论中的建议,我能够通过反复试验找到解决方案。该键显然在Crystal Reports公式编辑器使用的WhilePrintingRecords;指令中。为了使报表在整个报表中始终正确地评估条件,以使其返回Report Footer部分的“正确”值,<的公式都需要此伪指令集。

我在SAP Community forums中找到了这个解释:

WhileReadingRecords

强制程序在读取数据库记录数据时对公式求值。

如果尝试在此公式中包含组,则会收到错误消息。

WhilePrintingRecords

强制程序在打印数据库记录数据时对公式求值。

不是非常描述性的,但是我的理解是WhilePrintingRecords;指令使公式等待评估每个数据元素,直到生成报告[[actually

(打印机,显示,导出等)为止。 ,因此所有数据均已加载到报告的每个字段中。

如果更熟悉Crystal Reports的人可以对这些指令和“多通道引擎”提供更好或更详细的解释,我认为这不会错。

最终结果如下:

InitDisplayLIATotals-放置(抑制)在

    Report Header

部分
  • WhilePrintingRecords; Global BooleanVar LIA := False;
  • SetDisplayLIATotals-放置(抑制)在
      Group Header
    中(
  • Detail部分
  • WhilePrintingRecords; Global BooleanVar LIA; If LIA = False Then If Not IsNull({mydata.liamp}) And Not (Trim({mydata.liamp}) = "") Then LIA := True;
    DisplayLIATotals-放在
      Report Footer
    中和/或在抑制公式中使用。
  • WhilePrintingRecords; Global BooleanVar LIA; LIA;
  • 我希望这对可能正在努力使这项技术奏效的其他人有所帮助。

    注意事项


    我实际上

    was能够通过使用

    Running Total Field在一定程度上“解决”该问题。我创建了mydata.liamp字段的COUNT摘要,该摘要显然只计算非NULL值。由于我的测试数据集中的数据,在抑制公式DID中使用此摘要字段起作用,但这是不完善的解决方案。

    “问题”是字段[[可能
    包含空字符串值(我假设)将包含在计数中。对于我的用例场景,我想确定只有非NULL

    不为空的值才能转换为该值。 “ three-formula trick”(供参考的TechRepublic“ QuickTip”文章)允许我测试两种可能性。
    © www.soinside.com 2019 - 2024. All rights reserved.