Crystal Reports组标头抑制公式不起作用

时间:2010-10-29 14:29:21

标签: crystal-reports crystal-reports-8.5

我的报告按两个代码分组,我们称之为ParentChild

在每个页面的顶部,在页眉中,我想打印父名称。

报告中有许多列,当组中断时,我想再次显示新的子名称和列标题。报告看起来应该是这样的:

Parent Name
    Child Name
    Col1 Col2 Col3 Col4 Col5 Col6
    XXXX XXXX XXXX XXXX XXXX XXXX
    XXXX XXXX XXXX XXXX XXXX XXXX

    Child Total:             XXXX

    Child Name
    Col1 Col2 Col3 Col4 Col5 Col6
    XXXX XXXX XXXX XXXX XXXX XXXX

但是,如果子组环绕到新页面,我想在再次显示数据之前重新显示子名称和列标题。

为实现这一目标,我创建了一个包含以下对象的页眉:

Parent Name
    Child Name
    Col1 Col2 Col3 Col4 Col5 Col6

在页眉中是变量RowReset,其中包含以下公式:

WhilePrintingRecords;
Shared numberVar nRowCount := 0

然后,在每个详细信息行,以及组页脚1和组页脚2部分中,我有以下RowIncrement公式:

WhilePrintingRecords;
Shared numberVar nRowCount := nRowCount + 1;

最后,在每个Group Header 2部分中,我有以下条件抑制公式:

WhilePrintingRecords;
Shared numberVar nRowCount;
IF (PageNumber <> 1) AND (nRowCount = 0 OR nRowCount = 0.00) THEN
    True
ELSE
    False

如果我们在一个全新的页面上,并且尚未打印任何详细记录,则尝试执行的操作是取消子组标题,以防止发生以下情况:

Parent Name                          ---+
    Child Name                          +-- Page header
    Col1 Col2 Col3 Col4 Col5 Col6    ---+

    Child Name                       ---+-- Group header 2
    Col1 Col2 Col3 Col4 Col5 Col6    ---+

由于某些原因,我无法弄清楚,报告中大约有40页,但我确实得到了这一点;页眉标记,后跟组标题2记录。如果我创建一个包含条件抑制公式的公式,它会显示TRUE,但组标题仍然不会被抑制。

如果我分解代码以便它只检查其中一个条件(PageNumber <> 1nRowCount = 0),那么组头2就会正确抑制。

我甚至试图解决这个问题:

WhilePrintingRecords;
Shared numberVar nRowCount;
booleanVar bSuppress:= False;

IF PageNumber <> 1 THEN bSuppress:= True;
IF (bSuppress) THEN (IF nRowCount = 0 THEN True ELSE False);

当屏幕上显示时,它也会显示True,但无法取消组标题。

我到底在做什么?我能采取更好的方法吗?

1 个答案:

答案 0 :(得分:3)

我建议将“父名称”字段放在其自己组的组标题中,而不是放在页眉中。然后,在父组和子组中,选中“组选项”对话框中的“在每页上重复组标题”复选框。