You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,匹配时进行累加,但实际效果未达预期,恳请提供解决方案。


解决方案

你的核心问题在于共享变量初始化缺失、分组逻辑冗余错误,以下是修正步骤:

  1. 创建分组初始化公式(放置在CHART_LEVEL1分组的组头)
    用于在每个新分组开始时重置累加变量,避免跨分组数值污染:

    whileprintingrecords;
    shared numbervar sumdr := 0;
    
  2. 优化绿色框公式(保留计算逻辑,提升性能)
    用本地变量存储汇总值,避免重复调用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;
    
  3. 创建分组汇总显示公式(放置在CHART_LEVEL1分组的组尾)
    直接输出当前分组的累加结果,无需多余的分组名对比:

    whileprintingrecords;
    shared numbervar sumdr;
    sumdr;
    
  4. 移除红色框的错误公式
    红色框逻辑存在冗余判断,且未正确处理分组内累加,直接替换为上述组尾汇总公式即可。

关键说明

  • whileprintingrecords确保公式在打印阶段执行,此时分组汇总值已计算完成;
  • 共享变量必须在分组开始时重置,否则会保留上一个分组的累加值;
  • 本地变量可减少重复计算,提升报表运行效率。

内容的提问来源于stack exchange,提问作者TUBLEPOGI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:52:02