Crystal Reports新手求助:用Running Total Field列非空RFI Reference并按需重置
实现Crystal Reports中带条件重置的非空RFI Reference汇总
作为Crystal Reports的新手,要搞定这个需求其实不难——核心是利用报表变量来追踪被抑制行的非空值,再结合条件触发重置。下面是一步步的实操方案:
一、核心思路
Crystal Reports里的「行抑制」只是隐藏显示,并不会跳过数据处理,所以我们可以用字符串变量来逐行拼接非空的RFI Reference,再在你设定的特定条件下清空变量,最后输出汇总结果。
二、分步实现
1. 创建用于拼接的报表变量
首先我们需要一个变量来存储所有符合要求的RFI值:
- 打开「Field Explorer」(如果没显示,按
Ctrl+Alt+T调出),右键点击Formula Fields → 「New」,命名为RFI_Concat_Var。 - 输入以下公式(记得替换成你自己的字段和条件):
✅ 注意:必须加WhilePrintingRecords; StringVar rfi_list; // 仅处理非空且被抑制的行:替换成你的RFI字段和行抑制条件 If Not IsNull({你的数据表.RFI Reference}) And {你的行抑制条件公式} Then rfi_list := rfi_list + ", " + {你的数据表.RFI Reference}; // 触发重置条件:替换成你的重置判断逻辑(比如组切换、特定字段值) If {你的重置触发字段} = "需要重置的标记值" Then rfi_list := ""; rfi_listWhilePrintingRecords,因为变量需要和行的抑制状态同步计算。
2. 设置变量的初始化/重置时机
如果你的重置条件是「组切换」(比如每个新组开始时清空变量),可以额外加一个组头公式:
- 创建一个新的公式
Reset_RFI_Var,内容:WhilePrintingRecords; StringVar rfi_list := ""; "" // 输出空字符串,避免在组头显示多余内容 - 把这个公式拖到组头节里,这样每次进入新组时,变量就会自动清空。
3. 显示最终的汇总结果
最后我们需要一个公式来格式化并显示拼接好的RFI列表:
- 创建公式
Display_RFI_List,内容:WhilePrintingRecords; StringVar rfi_list; // 去掉开头多余的逗号和空格,空的话显示提示文本 If Length(rfi_list) > 2 Then Mid(rfi_list, 3) Else "无符合条件的非空RFI Reference" - 把这个公式拖到你需要显示结果的位置(比如组尾节、报表尾节)即可。
三、关键注意事项
- 行抑制条件的准确性:一定要确保
RFI_Concat_Var里的抑制条件和你实际用来隐藏行的条件完全一致,不然会漏处理或者多处理行。 - 公式放置位置:
RFI_Concat_Var必须放在细节节里(哪怕细节节被抑制,公式依然会执行),这样每一行都会被遍历处理。 - 变量计算顺序:Crystal Reports是按节的顺序执行公式的,所以要保证
Reset_RFI_Var在RFI_Concat_Var之前执行(比如组头在细节节之前,自然满足)。
内容的提问来源于stack exchange,提问作者George Legault
相关产品推荐
相关产品推荐

