我有一份Crystal报告,其子报告位于一个组的页脚中。
此子报告根据传入其中的参数显示计数。
我想在其他计算中使用此值,因此我尝试创建共享数字变量。
但是,当我在主报表中放置带有共享数字变量的公式时 - 在子报表本身旁边 - 它似乎显示上一记录的值。
(删除了特定于业务的信息)
红色方块是子报告,绿色方块是我正在尝试打印的变量
子报告显示正确的值,绿色公式显示上一记录的子报告值。
报告页脚中的一个公式:
我相信这个公式在公式显示时正确设置变量(这可能是我遇到的问题的关键):
Shared numberVar tryit;
tryit :=0;
If IsNull(count({IDNumber})) then
(
0
)
else
(
tryit :=count({IDNumber});
count({IDNumber})
)
Shared NumberVar tryit;
tryit;
Craig建议我将要显示的变量移动到子报告执行位置下方的页脚部分。
我试过这个;但是,我不需要显示子报告,当我禁止它时,由于子报告没有执行,所有共享变量似乎都变为0。
下图:红色框是子报告,橙色是共享变量。只要显示子报告,就可以工作,但我不需要子报告,需要共享变量对父报告进行额外的计算。
答案 0 :(得分:1)
在包含子报表的部分下面插入一个部分 - 它将是组页脚1b。将引用共享变量的公式移动到此新部分。
**编辑**
您将无法取消子报告;这样做会阻止它被生成。我建议缩小它的垂直高度,然后禁用它的'can grow'属性。一般来说,您只需要为要生成的变量显示子报表的ReportFooter部分。考虑将公式的文本设置为白色。
或者,您可以使用SQL表达式而不是子报表。它的SQL将嵌入在'main'报告的SELECT子句中。 SQL Expression需要返回一个标量值。
就处理模型而言,请阅读:Crystal Reports: Report Processing Model。实质上,报表引擎需要在填充共享变量之前生成子报表。在同一部分中引用共享变量的子报表和公式是不可靠的。