Crystal Reports:组页脚汇总Sold Qty并取On Hand Qty最后值
嗨,我来帮你搞定这个组页脚的显示需求!其实Sold Qty的求和很简单,重点是用变量实现On Hand Qty取组内最后一个值,我一步一步给你讲:
一、Sold Qty列的总和(快速实现)
这个Crystal Reports自带功能就能轻松搞定:
- 直接把
Sold qty字段拖到组页脚对应的位置 - 右键点击这个字段,选择「插入汇总」
- 在弹出的窗口里,汇总类型选「求和」,汇总依据选你的分组字段,确定就完事了!
这样组页脚里就会自动显示该组所有Sold qty的总和,和你示例里的3、9完全对应。
二、On Hand Qty列取组内最后一个值(用变量实现)
这个需要借助Crystal的变量来实时记录每一行的On Hand Qty,最后在组页脚输出最后一次更新的值,步骤如下:
1. 初始化变量(组页眉)
首先在组页眉里创建一个公式(右键组页眉→插入→公式字段),命名为Initialize_OnHand,输入以下代码:
WhilePrintingRecords; NumberVar Last_OnHand := 0; // 这里类型要和你的On Hand Qty匹配,比如是字符串就用StringVar
小贴士:
WhilePrintingRecords必须加,它告诉Crystal在打印阶段处理这个变量,而不是更早的读取阶段,这样才能正确记录每一行的动态值。
创建好后把这个公式拖到组页眉里(可以右键它→格式化字段→公共→勾选「抑制显示」,这样它不会显示出来,但会默默执行初始化操作)。
2. 实时更新变量(细节节)
接下来在细节节里创建另一个公式,命名为Update_OnHand,输入代码:
WhilePrintingRecords; NumberVar Last_OnHand; Last_OnHand := {你的数据表名.On Hand Qty}; // 替换成你实际的字段名
同样把这个公式拖到细节节里,也可以设为隐藏(抑制显示),这样每打印一行细节,变量就会被更新为当前行的On Hand Qty值,到组的最后一行时,变量里存的就是我们要的最后一个值了。
3. 在组页脚显示最后值
最后在组页脚里创建一个公式,命名为Display_Last_OnHand,输入代码:
WhilePrintingRecords; NumberVar Last_OnHand; Last_OnHand;
把这个公式拖到组页脚对应On Hand Qty的位置,这样就会显示该组最后一行的On Hand Qty值啦!比如你示例里第一个组最后是3,第二个组最后是7,完美匹配效果。
最终效果验证
按照上面的步骤设置后,你的报表就会和示例完全一致:
| On Hand Qty |
|---|
| 1 |
| 2 |
============================================
GF Total | 3 | 3details | 6 | 10
details | 3 | 7GF Total | 9 | 7
内容的提问来源于stack exchange,提问作者Fraser Kelly

