Crystal Report按收银员生成子报表及每日总计问题求助
解决Crystal Report中收银员小计重置及日期总计问题
看起来你现在的核心问题是没搭对分组层级,导致小计变成了跨收银员的累计值。咱们通过调整分组结构+用组汇总字段就能搞定,具体步骤一步步来:
1. 先把分组层级理清楚
首先得给报表设置正确的分组顺序:
- 第一级分组:
OrderDate(日期字段) - 第二级分组:
Cashier(收银员字段)
这样每个日期下会单独包含多个收银员组,每个收银员的交易都会被独立归类,小计自然就不会跨收银员/跨日期累计了。
2. 重新创建收银员小计(sub_Total)
别再用累计运行字段算小计了,换成组汇总字段才是正确姿势:
- 在Crystal Report的字段资源管理器里,右键点「汇总字段」→「新建」
- 选要汇总的字段:
{DTtablesales.Amount} - 汇总方式挑「求和」
- 汇总对象选「Cashier组」(也就是刚才设的第二级分组)
- 把这个汇总字段拖到Cashier组的页脚区域,这就是每个收银员的正确小计——它会在每个收银员组结束时自动重置计算,不会带着之前收银员的数值累计。
3. 搞定每日总计(Day_Total)
同样用组汇总字段来做每日总计:
- 再新建一个汇总字段,还是选
{DTtablesales.Amount},汇总方式「求和」 - 这次汇总对象选「OrderDate组」(第一级分组)
- 把这个字段拖到OrderDate组的页脚区域,每个日期下所有收银员的交易结束后,就会显示该日期的总交易额。
4. 保留GrandTotal的设置
你的GrandTotal是整个报表的总和,继续用原来的设置就行,或者也可以新建一个针对「整个报表」的汇总字段,结果是一样的。
调整后的效果验证
做完这些设置后,报表会自动按「日期→收银员」的层级展示:
- 每个收银员的交易列表下方,只显示该收银员自己的交易小计
- 每个日期下所有收银员的交易都展示完后,显示该日期的总计
- 整个报表末尾的GrandTotal还是所有日期的总交易额,完全符合你期望的效果。
另外别忘了检查下数据源有没有按OrderDate和Cashier排序,这样分组后的记录会更规整,不会出现同一日期/收银员的记录分散的情况。
内容的提问来源于stack exchange,提问作者mantics
相关产品推荐
相关产品推荐

