报表组中如何显示所有 sheet 的总页码

需求描述:

报表组中有多个报表, 报表以分页方式展现,在每个 sheet 中显示报表组中所有报表的总页数。

实现方式:

报表组中有公用数据集功能,在 rpg 中增加数据集,用来求每个 sheet 中数据的总条数,报表组中报表在展现的时候每页最多显示条数,我们可以直接得到,根据总条数和每页最多显示条数,我们就能得到每个 sheet 的总页数。

具体实现:

以设计器下自带的报表组实例来看下具体实现。

在报表组.rpg 文件中增加两个数据集 g1,g2,分别对应两个 sheet 的总记录条数。

g1 的 sql 为 SELECT count(订单. 订单 ID) FROM 订单 where 订单. 订单 ID >=? and 订单. 订单 ID <=?

g2 的 sql 为 SELECT count(订单明细. 订单 ID) FROM 订单明细 where 订单明细. 订单 ID >=? and 订单明细. 订单 ID <=?

在订单.rpx,订单明细.rpx 中两张报表中都追加一行,行属性设置为报表尾,单元格表达式为:

=“报表组中共”+(if(g1.c1%13==0,int(g1.c1/13),int(g1.c1/13+1))+if(g2.c1%13==0,int(g2.c1/13),int(g2.c1/13+1)))+“页”

增加了以上设置后,我们在 web 端看下效果:

订单 sheet 页共 7 页,订单明细共 17 页,总共 24 页,分别在两个 sheet 中都可以显示出总的页数。

总结:上面的例子,为了较小的改动快速实现需求,我们是单独在 rpg 中增加公用数据集求得每个报表的总记录条数,其实完全可以直接将两个 rpx 中的数据集增加到 rpg 中,rpx 中不保留,这样我们在 rpx 里使用总记录条数的时候用 ds1.count() 就可以求得,不需要多次计算数据集取数,在报表组 sheet 较多情况下可以一定程度上提升报表计算的速度。