如何在Crystal 14.1.5.1501主报表中汇总两个子报表的总计
解决Crystal Reports 14.1.5中主报表汇总两个子报表总计的问题
我之前在Crystal Reports 14.x版本里也碰到过一模一样的需求,折腾了好一阵才搞定,给你分享两个最靠谱的实现方法:
方法一:用共享变量传递子报表总计(最通用)
这是跨子报表和主报表传递数值的标准方案,不管子报表和主报表有没有数据源关联都能用:
步骤1:在子报表中定义共享变量存储总计
- 打开第一个子报表,找到你已经生成的总计字段(比如是
Sum({订单表.金额})) - 右键点击「字段资源管理器」里的「公式字段」→ 新建,命名为
Shared_Total_子报表1,输入公式:Shared NumberVar SubTotal1; SubTotal1 := Sum({订单表.金额}); // 替换成你实际的总计计算式 - 把这个公式字段拖到子报表的报表页脚(必须放在会被执行到的节,总计一般在页脚生成),可以右键设置「格式字段」→ 勾选「隐藏」,避免显示冗余内容
- 对第二个子报表重复同样操作,公式命名为
Shared_Total_子报表2,内容替换成第二个子报表的总计计算:Shared NumberVar SubTotal2; SubTotal2 := Sum({回款表.金额}); // 替换成你的第二个总计
步骤2:在主报表中调用变量计算总和
- 回到主报表,在需要显示最终总和的位置(比如报表页脚)新建一个公式字段,命名为
主报表总合计,输入:Shared NumberVar SubTotal1; Shared NumberVar SubTotal2; SubTotal1 + SubTotal2; - 重点提醒:主报表里的子报表必须放在报表页眉/页脚或者组页眉/页脚里,绝对不能放在细节节!因为细节节会重复执行,共享变量的值会被多次覆盖,导致结果错误。
方法二:直接在主报表基于数据源汇总(适合有共同关联字段的场景)
如果两个子报表的数据集和主报表有共同的分组/关联字段(比如统一的日期范围、部门ID),而且主报表能直接访问这两个子报表的数据源,那可以跳过子报表的变量传递,直接在主报表计算:
- 在主报表的「字段资源管理器」里新建两个汇总字段:
- 第一个汇总:
Sum({订单表.金额}, {公共表.部门ID})(对应第一个子报表的总计) - 第二个汇总:
Sum({回款表.金额}, {公共表.部门ID})(对应第二个子报表的总计)
- 第一个汇总:
- 再新建一个公式字段,把这两个汇总值相加即可:
Sum({订单表.金额}, {公共表.部门ID}) + Sum({回款表.金额}, {公共表.部门ID})
踩坑提醒
- 先确认子报表的总计本身是正确的:可以临时把子报表的总计字段显示出来,确保数值没问题再进行下一步
- 如果子报表是通过参数链接到主报表的,一定要检查链接字段是否匹配,避免子报表返回空数据集导致总计为0
- 测试共享变量时,可以先不隐藏子报表里的共享变量公式,确认它能正确拿到总计值,再隐藏
内容的提问来源于stack exchange,提问作者Matt Gordon
相关产品推荐
相关产品推荐

