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

Crystal reports 如果一个或多个记录包含特定数据,则在Crystal Report中显示对象,crystal-reports,global-variables,formula,Crystal Reports,Global Variables,Formula,我有一个Crystal报告(CR Developer v11.5.12.1838),其中我只想在报告页脚中显示某些总计,如果一个或多个详细记录包含特定信息。为此,我在报告中创建了三个公式: InitDisplayLIATotals-放置(并抑制)在报告标题部分 Global BooleanVar LIA:=False; SetDisplayLIATotals-放置在(抑制的)组标题中(报告中唯一的组标题)注意:我还尝试将其放置在详细信息部分 全局布尔值; 打印记录时; 如果LIA=Fa

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

  • InitDisplayLIATotals
    -放置(并抑制)在报告标题部分
Global BooleanVar LIA:=False;
  • SetDisplayLIATotals
    -放置在(抑制的)组标题中(报告中唯一的组标题)注意:我还尝试将其放置在详细信息部分
全局布尔值;
打印记录时;
如果LIA=False,则
如果Not IsNull({mydata.liamp})和Not(Trim({mydata.liamp})=“”),则
LIA:=真;
  • DisplayLIATotals
    -放置在报告页脚中,并在总计“标签”对象的抑制公式中使用
全局布尔值;
LIA;
其目的是,如果当前数据集中的一个或多个记录在
mydata.liamp
字段中具有非空值,则公式应仅返回
True
(无论记录位置如何)。如果数据集中的所有记录在此字段中都有空值,则应返回
False

然而,我似乎无法让它正常工作。我将公式作为可打印字段放在报告页脚中进行确认,它总是打印
False
,即使我知道它应该返回
True
。当我将公式放置在详细信息部分(并使其可见)时,我看到它在第一条记录上返回
True
,但所有后续记录都将其显示为
False
,从而在报告页脚中产生
False


我还没有掌握在Crystal Reports中编写公式的艺术,所以我肯定我只是错过了/忽略了一些东西,但我不确定那会是什么。有人能帮我找出为什么不能可靠地让它返回正确的值吗?

多亏了@heringer在问题评论中的建议,我通过一些尝试和错误找到了解决方案。打印记录时,钥匙显然在
中指令。为了使报表在整个报表中正确评估条件,以便返回报表页脚部分的“正确”值,所有三个公式都需要设置此指令

我在以下文件中找到了这一解释:

阅读记录 强制程序在读取数据库记录数据时计算公式

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

打印记录时 强制程序在打印数据库记录数据时计算公式

这里没有太多描述,但我的理解是,
在打印记录时指令使公式等待计算每个数据元素,直到实际生成报告(打印机、显示、导出等),因此所有数据都已加载到报告的每个字段中

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


编辑-我发现了一个问题,可能有助于更好地解释这些指令的使用:


最终结果如下:

  • InitDisplayLIATotals
    -放置(抑制)在报告标题部分
打印记录时;
全局BooleanVar LIA:=False;
  • SetDisplayLIATotals
    -放置(抑制)在组标题中(或详细信息部分)
打印记录时;
全局布尔型;
如果LIA=False,则
如果Not IsNull({mydata.liamp})和Not(Trim({mydata.liamp})=“”),则
LIA:=真;
  • DisplayLIATotals
    -放在报告页脚中和/或在抑制公式中使用
打印记录时;
全局布尔型;
LIA;
我希望这对其他可能正在努力让这项技术发挥作用的人有所帮助


旁注 实际上,通过使用运行总字段,我能够在一定程度上“解决”这个问题。我创建了
mydata.liamp
字段的COUNT摘要,它显然只统计非空值。由于测试数据集中的数据,在抑制公式中使用此摘要字段确实有效,但这是一个不完美的解决方案


“问题”是该字段可能包含空字符串值(我假设)将包含在计数中。对于我的用例场景,我想确定只有非NULL且非空的值才能用于切换该值。“”(供参考的TechRepublic“QuickTip”文章)允许我测试这两种可能性。

您是否尝试删除WhilePrintingRecords?@heringer-我的第一次尝试不包括
WhilePrintingRecords
指令,但导致在报表页脚部分返回
False
值。我补充说,希望它能正确评估这些价值。然而,你的评论确实让我想到了这一点。也许我需要将该指令添加到所有公式中,以使其正确工作。@heringer-似乎包括
whileprinting记录指令都是关键,尽管在我预览报告时仍然有点“奇怪”。我还有