共享子报表变量显示上次记录的值

时间:2012-07-23 16:44:02

标签: crystal-reports crystal-reports-2008

我有一份Crystal报告,其子报告位于一个组的页脚中。

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

我想在其他计算中使用此值,因此我尝试创建共享数字变量。

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

主要报告的屏幕截图

(删除了特定于业务的信息)

红色方块是子报告,绿色方块是我正在尝试打印的变量

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

Screenshot

子报告的屏幕截图

报告页脚中的一个公式:

Screenshot

子报告显示的公式

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

Shared numberVar tryit;
tryit :=0;

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

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

Shared NumberVar tryit;
tryit;

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

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

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

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

red box is sub-report, orange is shared variable. Works as long as sub-report is also displayed

1 个答案:

答案 0 :(得分:1)

在包含子报表的部分下面插入一个部分 - 它将是组页脚1b。将引用共享变量的公式移动到此新部分。

**编辑**

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

或者,您可以使用SQL表达式而不是子报表。它的SQL将嵌入在'main'报告的SELECT子句中。 SQL Expression需要返回一个标量值。

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