如何在Group Footer 2未显示时抑制Group Header 1的显示?
Crystal Reports:隐藏无有效子组的Group Header 1
需求背景
当Group Footer 2因无记录或全部被抑制而不显示时,自动隐藏对应的Group Header 1。当前已为Group Footer 2设置抑制条件:ISNULL({qty}) OR {@datum} > 90 OR {aantal} = 0(其中{@datum}公式为date('9/1/2022') - {table.date})。
报表结构
IACode Group header #1 [Description] ICode Group header #2 Details | itemcode | date | aantal | qty (suppressed) ICode Group footer #2| itemcode | date | (SUM)aantal | SUM(qty) IACode Group footer *1
当前问题示例
当前输出会显示无有效数据的组页眉:
ABC Company (no data) Helios Corporation xx1001 09/10/2022 200 100 xy2091 09/22/2022 125 099 Super Tech Company yy2222 01/10/2021 100 234 (suppressed as per suppress condition)
期望输出
仅保留有有效子组内容的组页眉:
Helios Corporation xx1001 09/10/2022 200 100 xy2091 09/22/2022 125 099
解决方案步骤
1. 初始化共享变量
在Group Header 1的「抑制(无 Drill-Down)」公式中添加变量初始化代码:
Shared BooleanVar has_valid_footer := False; False; // 暂不主动抑制Group Header 1,后续由变量判断
2. 更新Group Footer 2的抑制公式
修改Group Footer 2的「抑制(无 Drill-Down)」公式,加入变量更新逻辑:
Shared BooleanVar has_valid_footer; // 保留原抑制条件 Local BooleanVar suppress_current := ISNULL({qty}) OR {@datum} > 90 OR {aantal} = 0; // 如果当前Footer不被抑制,标记该Group 1下存在有效内容 If Not suppress_current Then has_valid_footer := True; // 返回原抑制结果 suppress_current;
3. 设置Group Header 1的最终抑制逻辑
回到Group Header 1的「抑制(无 Drill-Down)」公式,修改为:
Shared BooleanVar has_valid_footer; // 若没有任何有效Group Footer 2,就抑制Group Header 1 Not has_valid_footer;
原理说明
通过共享布尔变量has_valid_footer追踪当前Group 1下是否存在未被抑制的Group Footer 2:
- 在Group 1开始时初始化变量为
False - 遍历每个Group 2的Footer,若有未被抑制的Footer则将变量设为
True - 最后根据变量值判断是否隐藏Group Header 1
内容的提问来源于stack exchange,提问作者gzesasaki
相关产品推荐
相关产品推荐

