在列数固定的报表中逐格横向填充数据并折行

在很多需要打印的报表中,受限于纸张的大小,往往会限制行数或者固定列数。我们在《单据类报表的制作》一文中,曾经介绍了限制了行数的情况如何实现,现在,我们再来看一下,在固定了列数的情况下,如果在某些行中,逐格横向填充数据,并在超过列数后自动折行。

我们先看一个例子的效果图:

在这张报表,由上而下其实分成了几个部分:

首先,表头和前两行是简单的描述信息;

然后,实际上是一个4行5列的固定表格,对 “核定”、“实有”、“超空”、“批准使用”这四个项目进行了统计汇总;

再往下, “登记”这一行填充了来自数据库的人员姓名,为了整齐美观,要求按4个项目对应的4列逐格填充,而且人员数量会根据数据库中的实际情况填充,如果,当多于4人时还需要折行后继续按照一行4列进行填充,如图中的蓝色字体部分所示;

最后的两行都是文本描述。

类似的表格其实我们常常会遇到,例如下面这张 “学校公物监护人统计表”:

每一类公物的监护人横向逐格填写,超过4个时,都要折行展现,比如表中的“窗帘、窗户”的监护人。

 

熟悉报表设计的兄弟姐妹都清楚,一个业务字段的取值一般都是定义到一个格子后自动扩展,现在要分别放到4个单元格,这怎么拆开定义?

 

别着急!!下面将结合第一个“使用单”的例子,来了解一个神奇的报表工具。

根据表格本身硬性要求(4列是固定列,不能自动扩展),我们能想到的方法只有用坐标的方式,按照位置号把登记人依次摆到对应单元格。

如果数据库中登记人员的姓名(XM)如下

那么我们就把登记人前4个(张三、李四、王二、王麻子)依次放到对应1~4格子里,下面4个再按照5~8放至第二行,依次类推。。。

至于另一个问题是应该摆几行?其实很简单,总人数除以4,我们就可以判断出来了。

 

下面就是具体的操作过程:

  1. 把“使用单”固定格式的部分先画出来……
  2. 设置数据集,例子里使用润乾报表内建数据集进行模拟,如上图所示;
  3. 按照上面的分析思路完成行数计算及按坐标摆放的工作

其中:

  1. 在“登记”行前增加一行,在B11中定义表达式:ds2.select(XM),把登记人(XM)数据查出来备用,同时B11设置为“不可扩展”,此时为XM字段所有数据以逗号隔开的字符串(如,“张三,李四”)。
  2. 计算行数

在原D列前插入一列,在D12中定义表达式:

=to(1,int(ceil(ds2.count()/4)))

其中,int(ceil(ds2.count()/4))就是可扩展出的总行数

  1. 按坐标摆放:

E12表达式:=split(B11,",")(4*(D12-1)+1)

G12表达式:=split(B11,",")(4*(D12-1)+2)

I12表达式:=split(B11,",")(4*(D12-1)+3)

K12表达式:=split(B11,",")(4*(D12-1)+4)

其中标红的部分即为按位置坐标取数。

  1. 把新增的D列及11行设置为“隐藏”,仅用来辅助存放登记人序列串与生成行数,不需要显示。
  1. 最后效果如我所愿,完美解决!

 

类似的复杂报表还有很多,尤其是带有人工填写痕迹的单据类报表。不过通过这篇文章,我们可以愉快地相信,没有什么报表是在冷静分析后搞不定的,尤其是在掌握了润乾报表这么NB的工具后。当然,如果实在找不到思路……那么不妨找一下润乾最牛的支持团队(QQ:800025723),必定会给您满意的答复!

猜你喜欢

转载自blog.csdn.net/cainiao_M/article/details/81873841
今日推荐