Формула подавления заголовка группы Crystal Reports не работает

У меня есть отчет, который группируется по двум кодам, мы назовем их Parent и Child.

Вверху каждой страницы, в заголовке страницы, я хочу напечатать имя родителя.

В отчете есть несколько столбцов, и когда группа распадается, я хочу снова отобразить новое имя Child, а также заголовки столбцов. Отчет должен выглядеть примерно так:

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;

Наконец, в каждом разделе заголовка группы 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 <> 1 или nRowCount = 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 при отображении на экране, но не может подавить заголовок группы.

Что, черт возьми, я здесь делаю не так? Есть ли лучший подход, который я мог бы выбрать?


person LittleBobbyTables - Au Revoir    schedule 29.10.2010    source источник


Ответы (1)


Я предлагаю поместить поле «имя родителя» в заголовок группы собственной группы, а не в заголовок страницы. Затем в родительской и дочерней группах установите флажок «Повторять заголовок группы на каждой странице» в диалоговом окне параметров группы.

person Ray    schedule 29.10.2010
comment
Знаете, это действительно смущает - почему-то я никогда не замечал этот флажок в диалоговом окне "Параметры группы". Я искал что-то подобное в опциях Format Group. Это все еще не объясняет, почему код не работал, но я просто счастлив двигаться дальше. Спасибо! - person LittleBobbyTables - Au Revoir; 29.10.2010
comment
Я рад, что это сработало для вас. Я использовал переменные, как и вы, в некоторых случаях, когда встроенные свойства не совсем подходили для этого, и всегда кошмарно заставить его работать должным образом. - person Ray; 29.10.2010