【问题标题】:Shared Sub-report variable displays last record's value共享子报表变量显示最后一条记录的值
【发布时间】:2012-07-24 01:39:27
【问题描述】:

我有一个水晶报表,其子报表位于组的页脚。

此子报告根据传入的参数显示计数。

我想在其他计算中使用这个值,所以我尝试创建一个共享数字变量。

但是,当我将带有共享数字变量的公式放在主报表中时 - 在子报表本身旁边 - 它似乎显示了前一条记录的值。。 p>

主要报告的屏幕截图

(已删除业务特定信息)

红色方块是子报表,绿色方块是我要打印的变量

子报表显示正确值,绿色公式显示上一条记录的子报表值。

子报告截图

一个公式,在报表页脚中:

子报表显示的公式

我相信这个公式在显示公式时正确设置了变量(这可能是我遇到问题的关键):

Shared numberVar tryit;
tryit :=0;

If IsNull(count({IDNumber})) then
(
0
)
else
(
tryit :=count({IDNumber});
count({IDNumber})
)

在主报表上显示共享变量的公式

Shared NumberVar tryit;
tryit;

尝试 1:将变量移动到子报告下方(不成功)

Craig 建议我将要显示的变量移动到执行子报表下方的页脚部分。

我试过这个;但是,我不需要显示子报表,当我抑制它时,由于子报表未执行,所有共享变量似乎都变为 0。

下图:红色框为子报表,橙色为共享变量。只要子报表也显示就可以工作,但我不需要子报表,需要共享变量对父报表进行额外计算。

【问题讨论】:

    标签: crystal-reports crystal-reports-2008


    【解决方案1】:

    在包含您的子报告的部分下方插入一个部分——它将是组页脚 1b。将引用共享变量的公式移至此新部分。

    ** 编辑 **

    您将无法取消子报告;这样做会阻止它的生成。我建议缩小它的垂直高度,然后禁用它的“可以增长”属性。一般来说,您只需要让子报表的 ReportFooter 部分可见,即可生成要生成的变量。考虑将公式的文本设置为白色。

    或者,您可以使用 SQL 表达式代替子报表。它的 SQL 将嵌入到“主”报告的 SELECT 子句中。 SQL 表达式需要返回一个标量值。

    就处理模型而言,请阅读:Crystal Reports: Report Processing Model。实质上,报表引擎需要生成子报表才能填充共享变量。在同一部分中包含引用共享变量的子报表和公式是不可靠的。

    【讨论】:

    • 嗨克雷格,这似乎修复了内容中的故障。我想我需要将子报表放在页脚 1a 中,抑制它,然后将页脚信息和共享变量放在页脚 1b 中使用。此外,您能否解释为什么会发生这种情况?子报告/变量的执行生命周期有时对我来说是个谜。
    • 更新:不幸的是,如果所有变量都显示为零,我似乎无法取消子报告;我想如果子报告被抑制,它根本不会执行。如何从组页脚的子报表中完成共享变量?我将尝试更新我的问题以显示结果。
    • 感谢编辑/更新;现在很有意义!另外,感谢您提供有关处理模型的其他信息。一直在寻找类似的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多