Crystal Reports V14:如何实现公式间值传递以计算运行总计
Crystal Reports V14 运行总计计算问题解决方法
问题分析
原方案中@Notional无法传递值到Details B的@NotionalRunning,核心原因是Details A和Details B是独立的细节行实例:@Notional仅在满足{events.comments}='Notional'的Details A行中有值,Details B的行无对应匹配记录,直接引用会返回$0.00。需要通过全局变量跨行传递起始金额,再构建正确的运行总计逻辑。
具体解决步骤
1. 用全局变量存储起始金额
- 新建公式
@InitializeNotional,放置在Report Header(确保报表初始化时仅执行一次):Global NumberVar starting_notional := 0; - 修改Details A的
@Notional公式,将起始金额同步存入全局变量:
此公式会在Details A显示起始金额的同时,把值持久化到全局变量中,供后续行调用。Global NumberVar starting_notional; if {events.comments}='Notional' then ( starting_notional := {events.amount}; {events.amount} )
2. 构建Details B的运行总计公式
新建公式@RunningNotionalTotal,放置在Details B中:
Global NumberVar starting_notional; Global NumberVar running_total; // 首次执行时,用起始金额初始化运行总计 if running_total = 0 then running_total := starting_notional; // 扣除当前还款金额({events.amount}为负数,相加等价于扣除正数) running_total := running_total + {events.amount}; running_total;
3. 保留原有抑制条件
Details B的抑制条件保持不变:
{@notionalsum} = $0.00 or {events.comments} <> 'repay notional'
确保仅在"Repay Notional"行显示运行总计结果。
4. (可选)多组报表的变量重置
如果报表包含分组统计,需在Group Header中添加公式@ResetRunningTotal,确保每组重新初始化运行总计:
Global NumberVar running_total := 0;
验证效果
- Details A正常显示起始金额(如258,805,000)
- Details B首行计算结果为
起始金额 + 首个Repay金额(即258,805,000 + (-238,000) = 258,567,000) - 后续行基于上一次的运行总计继续扣除对应Repay金额,得到连续的累计结果
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

