Crystal Reports 2016:手动运行总计数值错误问题求助
Crystal Reports 2016 手动运行总计求和错误的问题分析与解决
核心问题点
计数迭代公式逻辑错误
你当前的计数迭代公式是累加1,这是在统计{@TotalTestsPerformed}非0的记录条数,而非对字段值求和。另外else 0的写法会在字段值为0时强制清空累加变量,直接破坏了求和逻辑。公式计算时机不匹配
{@TotalTestsPerformed}依赖的SpecReceived和Unsat/Reject是运行总计字段,这类字段默认在WhilePrintingRecords(打印阶段)计算。如果{@TotalTestsPerformed}公式未显式设置WhilePrintingRecords,它会默认在WhileReadingRecords(读取记录阶段)执行,此时运行总计还未生成正确的逐记录值,导致公式结果异常,后续求和自然出错。重置逻辑的执行位置可能有误
若Reset公式未放在正确的节(比如报表头部或目标组的头部),会导致累加变量未在统计开始前被正确重置,出现重复累加的情况。
修复步骤
1. 修正手动运行总计的计数迭代公式
将原迭代公式替换为:
whileprintingrecords; Shared numberVar SumTotalTestPerf; if {@TotalTestsPerformed} <> 0 then SumTotalTestPerf := SumTotalTestPerf + {@TotalTestsPerformed};
- 去掉
else 0,避免字段值为0时清空累加变量 - 把
+1改成+ {@TotalTestsPerformed},实现真正的求和逻辑
2. 确保{@TotalTestsPerformed}的计算时机正确
编辑{@TotalTestsPerformed}公式,在开头添加WhilePrintingRecords;,确保它和依赖的运行总计字段在同一阶段计算:
whileprintingrecords; if {SpecReceived} <> 0 then {Unsat/Reject} - {SpecReceived} else 0;
3. 检查Reset公式的放置位置
把Reset公式放在报表头部(Report Header),或者你需要重置求和的组的头部(Group Header),确保每次统计周期开始时,累加变量都被重置为0。
4. 更简单的替代方案:使用内置运行总计
手动运行总计容易出错,推荐直接用Crystal内置的运行总计字段:
- 右键点击“字段资源管理器”中的“运行总计字段”,选择“新建”
- 选择
{@TotalTestsPerformed}作为“要汇总的字段” - 汇总类型选择求和
- 评估条件选择对于每条记录
- 重置条件选择报表结尾(或你需要的组结尾)
内容的提问来源于stack exchange,提问作者deLa
相关产品推荐
相关产品推荐

