博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]水晶报表自动补空行及格线(无分组版)
阅读量:7008 次
发布时间:2019-06-28

本文共 2041 字,大约阅读时间需要 6 分钟。

问题的提出:

一个带格线的清单类报表,假设有6行,我们设定的页面纸型能容纳5行,那么数据会分成两页。

第1页显示5行,占满1页,而第2页则只显示1行,后面是一片空白区域。
怎么能根据数据的多少,自动填满后面的空白区域呢?

如下图(第2页):

解决方法:

清单类的报表,要填充的是最后一页的剩余区域。我们以每页显示5行数据为例。

那么对于最后一页只有五种情况。
1:最后一页刚好有5条数据,不需要填充。
2:最后一页有4条,需要填充1个空行;有3条,需要填充2个空行;有2条,需要填充3个空行;有1条,需要填充4个空行。

以有1条数据为例子,最大加4个空行。于是,加上原来的数据行,那么详细资料节上应该有5个小节。

设计出来的模板如下:

将详细资料节拆分成5个节,最上面的一个放数据,设置为显示,其余的4个节全部抑制显示,我们用公式来控制它的显示与否

画线方法:在页眉和页脚画个框,框的下边沿紧贴在页眉的上边沿。

然后在每个详细资料节的上边沿下面都画一条横线。

字段间画竖线,注意竖线的下边的这个顶点要顶在页脚这个节的线上。 

下面我们来控制显示,

以下公式使用Crystal语法

1:编辑“详细资料节b” (也就是第一个空白节,我在上面放了一个字段做标记,实际使用时不需要)抑制显示后面的公式 

count({雇员.出生日期}) mod 5 表示最后一页上剩余的数目。这个值是0、1、2、3、4

0表示已经塞满,大于0表示需要填充

 

//注意这2个and条件//1:count({雇员.出生日期}) mod 5>0  说明记录数不是5的倍数,也就是说需要补空行//对于这个节来说,只要需要补,就显示//2:onlastrecord 这个条件是“是否是最后一条记录”,说明这个节只出现在最后一条记录之后//也就是会出现在最后一页上if count({雇员.出生日期}) mod 5>0   and onlastrecord then
false //外面勾选了抑制显示,那么false的意思就是不抑制显示。也就是这个节在这个条件下会显示else    true

 

那么好,只要count({雇员.出生日期}) mod 5 >0 ,那么这个空白节就显示了。

2:现在来设置“详细资料节c”,第2个空白节。因为第一个详细资料节b之前已经显示了。

那么这个节,将只出现在需要2个2个以上空白行的情况,也就是说,count({雇员.出生日期}) mod 5 的值需要是1、2、3

于是公式就变成了。

 

if count({雇员.出生日期}) mod 5>0 and count({雇员.出生日期}) mod 5 <=3 and onlastrecord then  falseelse  true

 

继续,后面的“详细资料节d”,第3个空白节,将只出现在count({雇员.出生日期}) mod 5 的值需要是1、2的时候

于是,公式为

 

if count({雇员.出生日期}) mod 5>0 and count({雇员.出生日期}) mod 5 <=2 and onlastrecord then  falseelse  true

继续, 后面的“详细资料节e”,第4个空白节,将只出现在count({雇员.出生日期}) mod 5 的值是1的时候

于是,公式为

 

if count({雇员.出生日期}) mod 5=1 and onlastrecord then  falseelse  true

 

好设置完毕。

如果是5以外但是数字,假设为N。

那么详细资料节就拆成N个,第一个放数据 ,后面的公式依次类推。

第1个空行条件为 :
if count({雇员.出生日期}) mod N >0  and onlastrecord then

第2个到倒数第2个空白节的公式为:

if count({雇员.出生日期}) mod N >0  and count({雇员.出生日期}) mod N <=(N-2)  onlastrecord then

if count({雇员.出生日期}) mod N >0  and count({雇员.出生日期}) mod N <=(N-3)  onlastrecord then

...
if count({雇员.出生日期}) mod N >0  and count({雇员.出生日期}) mod N <=2  onlastrecord then
最后一个空行公式为:
if count({雇员.出生日期}) mod 5=1 and onlastrecord then
...

这样设置好就可以了。

 

其他:

如何保证每行的行高是一样的?

首先做好第一行,然后在在节专家中拆出其余的行。新增的行比第一行都要矮。复制数据行上的一个字段。粘贴到下面的各行,此时行高会自动调整到这个字段的高度。

转载于:https://www.cnblogs.com/karsase/p/3284699.html

你可能感兴趣的文章
Centos 下安装vsftp
查看>>
第 4 章 容器 - 022 - 如何运行容器?
查看>>
jqurey datatables属性
查看>>
新手上路--linux命令基础
查看>>
lvs之keepalived
查看>>
关于微信小程序横竖屏手机端及平板
查看>>
【蜕变之路】第10天 基本数据类型 (2019年2月28日)
查看>>
关于硬盘的一切!
查看>>
MYSQL5.7基于SSL的主从复制
查看>>
思科拓扑--小型公司案例实施和思路。
查看>>
淘宝搜索框的实现
查看>>
oracle 11g在linux的安装
查看>>
Django静态图片参数解析
查看>>
Java常用的日志框架对比和深入分析
查看>>
主流MPP解决方案Postgres-XL集群修炼之路视频课程
查看>>
使用layui前端框架实现简单的博客
查看>>
人工智能落地之路:从概念验证到产品
查看>>
人工智能专业如此火爆,在我国已有35所大学开设,一篇文章帮你全汇总
查看>>
【实例】offline temporary表空间三剑客之一
查看>>
linux 开启独立iptables日志
查看>>