Crystal Report:如何按CHART_LEVEL1组汇总自定义公式
按CHART_LEVEL1分组生成自定义汇总数据的问题
我正尝试基于自定义公式,按CHART_LEVEL1分组生成汇总数据(附报表布局图)。
绿色框现有代码
whileprintingrecords; shared numbervar sumdr; if sum ({tblgeneralledger.dramount}, {tblgeneralledger.chart_level4_code}) > sum ({tblgeneralledger.cramount}, {tblgeneralledger.chart_level4_code}) then ( sumdr := sumdr + sum ({tblgeneralledger.dramount}, {tblgeneralledger.chart_level4_code}) - sum ({tblgeneralledger.cramount}, {tblgeneralledger.chart_level4_code}); sum ({tblgeneralledger.dramount}, {tblgeneralledger.chart_level4_code}) - sum ({tblgeneralledger.cramount}, {tblgeneralledger.chart_level4_code}); ) else ( sumdr := sumdr + 0; 0; )
红色框现有代码
Shared StringVar previousGroupName := ""; Shared NumberVar sumdrx; IF GroupName ({tblGeneralLedger.CHART_lEVEL1_CODE}) <> previousGroupName THEN ( previousGroupName := GroupName ({tblGeneralLedger.CHART_lEVEL1_CODE}); if GroupName ({tblGeneralLedger.CHART_lEVEL1_CODE}) = previousGroupName then sumdrx := sumdrx + Sum ({tblGeneralLedger.DRAmount}, {tblGeneralLedger.CHART_lEVEL4_CODE}); sumdrx; )
原本计划通过对比当前与上一个CHART_LEVEL1_CODE,匹配时进行累加,但实际效果未达预期,恳请提供解决方案。
解决方案
你的核心问题在于共享变量初始化缺失、分组逻辑冗余错误,以下是修正步骤:
创建分组初始化公式(放置在CHART_LEVEL1分组的组头)
用于在每个新分组开始时重置累加变量,避免跨分组数值污染:whileprintingrecords; shared numbervar sumdr := 0;优化绿色框公式(保留计算逻辑,提升性能)
用本地变量存储汇总值,避免重复调用sum函数:whileprintingrecords; shared numbervar sumdr; local numbervar dr_total := sum({tblgeneralledger.dramount}, {tblgeneralledger.chart_level4_code}); local numbervar cr_total := sum({tblgeneralledger.cramount}, {tblgeneralledger.chart_level4_code}); local numbervar diff := dr_total - cr_total; if diff > 0 then ( sumdr := sumdr + diff; diff; ) else 0;创建分组汇总显示公式(放置在CHART_LEVEL1分组的组尾)
直接输出当前分组的累加结果,无需多余的分组名对比:whileprintingrecords; shared numbervar sumdr; sumdr;移除红色框的错误公式
红色框逻辑存在冗余判断,且未正确处理分组内累加,直接替换为上述组尾汇总公式即可。
关键说明
whileprintingrecords确保公式在打印阶段执行,此时分组汇总值已计算完成;- 共享变量必须在分组开始时重置,否则会保留上一个分组的累加值;
- 本地变量可减少重复计算,提升报表运行效率。
内容的提问来源于stack exchange,提问作者TUBLEPOGI
相关产品推荐
相关产品推荐

