Благодаря предложению @heringer в комментариях к вопросу я смог найти решение путем проб и ошибок. Ключ, очевидно, находится в директиве WhilePrintingRecords;
, используемой редактором формул Crystal Reports. Чтобы отчет правильно оценивал условие по всему отчету, чтобы он возвращал «правильное» значение для раздела Нижний колонтитул отчета , для всех трех формул требуется этот набор директив.
Я нашел это объяснение на форумах сообщества SAP :
whileReadingRecords
Заставляет программу вычислять формулу во время чтенияданные записи базы данных.
Если вы попытаетесь включить группу в эту формулу, вы получите сообщение об ошибке.
WhilePrintingRecords
Принудительно запускает программуоценить формулу, пока она печатает данные базы данных.
Не очень описательно, но я понимаю, что директива WhilePrintingRecords;
заставляет формулу ждать, чтобы оценить каждый элемент данных, покаотчет фактически генерируется (принтер, дисплей, экспорт и т. д.), поэтому все данные были загружены в каждое из полейreport.
Не думаю, что будет плохо, если кто-то, более знакомый с Crystal Reports, сможет предоставить более подробное или более подробное объяснение этих директив и «многопроходного механизма».
РЕДАКТИРОВАТЬ - Я нашел вопрос, который может помочь лучше объяснить использование этих директив:
зачем использовать перед чтением записей/ Во время чтения записей / Во время печати записей в отчетах Crystal?
Конечным результатом является следующее:
InitDisplayLIATotals
- Помещено (подавлено) в Заголовок отчета раздел
WhilePrintingRecords;
Global BooleanVar LIA := False;
SetDisplayLIATotals
- размещен (подавлен) в заголовке группы ( или Detail section )
WhilePrintingRecords;
Global BooleanVar LIA;
If LIA = False Then
If Not IsNull({mydata.liamp}) And Not (Trim({mydata.liamp}) = "") Then
LIA := True;
DisplayLIATotals
- помещается в нижний колонтитул отчета и / или используется в формуле подавления.
WhilePrintingRecords;
Global BooleanVar LIA;
LIA;
Я надеюсь, что это полезно для всех, кто может столкнуться с трудностями при использовании этой техники.
SIDE NOTE
На самом деле смог в некоторой степени «обойти» проблему, используя Running Total Field . Я создал COUNT сводку поля mydata.liamp
, которая, по-видимому, учитывает только ненулевые значения. Использование этого итогового поля в формуле подавления DID работает из-за данных в моем наборе данных тестирования, но это несовершенное решение.
"Проблема" заключается в том, что поле может содержит пустые строковые значения, которые ( я предполагаю ) будут включены в счет. Для моего сценария использования я хотел быть уверенным, что только значения, отличные от NULL и , не являются пустыми, считая при переключении этого значения. " трюк с тремя формулами " ( a TechRepublic "QuickTip" статья для справки ) позволяет мне проверить обе возможности.