You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Crystal Reports:如何将子组汇总值移至父组页脚并无缝适配表格

嘿,我完全懂你这个需求——把各房间类型的汇总从每组末尾挪到整个表格最后,还要保持表格的连贯样式对吧?Crystal Reports确实能做到,之前你遇到的只显示第一行汇总的问题,是因为直接移组页脚的话,父组页脚只会渲染一次,没法遍历所有类型的汇总。给你一套实操方案:

核心思路

全局数组变量收集每个房间类型的汇总数据,然后在父组(房间号/楼层组)的页脚,通过子报表遍历数组输出汇总行,完美和主表格衔接。

具体步骤

1. 初始化全局数组(存所有类型的汇总)

在报表的报表页眉里新建一个公式(命名为InitGlobalArrays),用来初始化存储汇总的数组:

WhilePrintingRecords;
// 声明全局数组,分别存类型名称和三个面积的汇总
Global StringVar Array type_names;
Global NumberVar Array sum_area1;
Global NumberVar Array sum_area2;
Global NumberVar Array sum_area3;

// 初始化空数组,避免旧数据干扰
type_names := [];
sum_area1 := [];
sum_area2 := [];
sum_area3 := [];

把这个公式拖到报表页眉里,位置随便,只要能执行就行(可以把字体设成白色隐藏它)。

2. 收集每个房间类型的汇总值

房间类型组的页脚里新建一个公式(命名为CollectTypeSummary),把当前类型的汇总数据添加到数组里:

WhilePrintingRecords;
Global StringVar Array type_names;
Global NumberVar Array sum_area1;
Global NumberVar Array sum_area2;
Global NumberVar Array sum_area3;

// 把当前类型的名称和汇总值追加到数组末尾
type_names := type_names + {你的房间类型字段};
sum_area1 := sum_area1 + Sum({面积1字段}, {房间类型字段});
sum_area2 := sum_area2 + Sum({面积2字段}, {房间类型字段});
sum_area3 := sum_area3 + Sum({面积3字段}, {房间类型字段});

然后把这个公式拖到房间类型组的页脚,同时隐藏这个组页脚(在节专家里勾选“Suppress (No Drill-Down)”),因为我们不需要在这里显示汇总了。

3. 在父组页脚用子报表输出汇总行

这一步是关键,让汇总和主表格无缝衔接:

  • 新建一个空白子报表(不要绑定数据源),命名为TypeSummaryFooter
  • 在子报表的报表页眉里新建一个公式,用来读取主报表的全局数组:
    WhilePrintingRecords;
    Global StringVar Array type_names;
    Global NumberVar Array sum_area1;
    Global NumberVar Array sum_area2;
    Global NumberVar Array sum_area3;
    
  • 在子报表的详细节里,创建4个公式分别显示类型名称和三个汇总值:
    • 类型名称公式:
      WhilePrintingRecords;
      Global StringVar Array type_names;
      type_names[CurrentRowIndex];
      
    • 面积1汇总公式:
      WhilePrintingRecords;
      Global NumberVar Array sum_area1;
      sum_area1[CurrentRowIndex];
      
    • 同理创建面积2、面积3的汇总公式。
  • 让子报表的详细节重复对应次数:打开子报表的节专家,选中详细节,点击“Repeat Section”旁边的公式按钮,输入:
    WhilePrintingRecords;
    Global StringVar Array type_names;
    UBound(type_names); // 返回数组的长度,也就是要显示的汇总行数
    
  • 调整子报表的格式:把四个公式和主表格的列对齐,设置和主表格完全一致的边框线条(比如主表格每列有下边框,子报表的列也加相同的下边框),这样看起来就像主表格的一部分。
  • 把这个子报表拖到父组(房间号/楼层组)的页脚里,放在主表格的下方,和列对齐。

注意事项

  • 一定要用Global变量,不能用Local,这样主报表和子报表才能共享数组数据。
  • 确保房间类型的分组是正确的,否则汇总值会出错。
  • 如果数组为空(比如没有数据),可以在子报表里加个条件判断,显示“无汇总数据”之类的提示。

这样操作后,就能实现你想要的效果:先显示所有房间的数据,最后在表格末尾统一列出各类型的汇总,而且完全是表格的一部分,线条连贯。

内容的提问来源于stack exchange,提问作者Apache

火山引擎 最新活动