《水晶报表自动补空行,补格线思路》 修正版 兼答Richard lee
写在文章之前
在2005年4月的 《水晶报表自动补空行,补格线思路》一文中的最后,我有这么一句话
本文写得比较仓促,心里感觉不塌实
可能有不少不足之处,欢迎大家进行讨论
时隔近3年后,这个不踏实终于体现出来(其实之前可能已经有人提出来了,只是有相当长的时间我没有去关注。。。)
在Richard lee的留言中
http://www.cnblogs.com/babyt/archive/2008/01/27/138214.html#1054868
提到
我最近碰到财务的凭证报表问题
你的那个模板好用,可是每组的条数小于每张凭证的最大行数
假如一组的记录数大于每张凭证的最大行数,该如何处理?
我实际做了一下,我之前提供的方法对确实无法解决这种情况
而造成这种情况的原因,是我之前的文章中构造的数据不完备造成的
因为数据没有涵盖所有的情况
我是以5为分隔单位,但是我实质上全部构造了每组数据都小于5,但是对大于5,等于5的数据却没有构造
这也再次验证了测试不充分的害处
在本文中,我使用了与之前的方法不同的另外一种方法,相比之前的方式来说,更容易理解些
原来是靠多个详细资料节来实现的补充空格,现在,我们用组页脚的方式来补充,相比来说,这样是更合理的
本文,务必配合《水晶报表自动补空行,补格线思路》一文使用,虽然那个方案可以说是不对的
之前我在原来的基础上构造了数据,现在A组数据有8条数据,B是10条,C,D均少于5条,E刚好5条
1、首先我们画出模板,假设你也是显示5行,那么,就用一个详细资料节,然后,将组页脚拆分成4个
本例中,因为使用了一个固定的页脚显示合计,所以是拆分成5个的,最后一个节固定显示
这里使用了一个运行时总计字段 ,用以跟踪每条记录在组中的序号,组变更时,记录重新编号,用途在后面的说明。
为了直观些,我把这个字段拖到了界面上,实际操作时,你可以将这个字段抑制显示掉
模板中的红字是为了显示得更直观加上去的,实际使用时删除掉即可。
思路是这样的,如果一组数据,除以5剩余的部分,肯定是1、2、3、4,分别处理这几种情况
当剩余4条的时候,显示组页脚a,3的时候显示b,2的时候显示c,1的时候显示d,补满。
对于刚好5条的情况,在后面说明
特别注意:画线的问题。如果你不注意此接,你会注意到,你的线可能会乱七八糟
请注意!在出现分组的情况,或者需要根据需要进行运行时抑制显示控制时,务必将竖线,控制在一个节内,不可跨接。
注意竖线的节点只能出现在自己所在节的两个边界内,不可出现在边界外!
本文中的例子我偷了点懒,因为我知道什么时候会出问题什么时候不会,如果你不确定,请依照以上规则
2、分页控制
本例子有两种分页控制,一种是组分页,一种是一组数据大于5条时,每5条的分页
组分页可以在组页眉和组页脚上设置,本文中组页脚承担了另外的补空格任务,所以分页在组页眉上
增加一个公式
即每一个分组都换页
然后在详细资料节上设置公式,使每5条分一页
//因为我们在分组上已经加了一个分页了,这里是组内的辅助分页
//
//如果记录是5的倍数,则是分页时机,但是要另外注意
if {#RTotal0} mod 5 =0 then
//如果此时是组内的最后一条记录,则此处不进行分页,因为会有一个组分页替换该
if Count ({材料采购明细.材料名称}, {材料采购明细.品牌}) ={#RTotal0} then
false
else
true
else
false
Count ({材料采购明细.材料名称}, {材料采购明细.品牌}) 表示按组品牌分组后每组的记录个数
{#RTotal0} 表示当前的记录需要
用以跟踪每组的最后一条记录,用以处理如果刚好是5的倍数的时候,出现详细资料节与组出现重复分页的情况
3、设置补充行显示,以组页脚a为例子,当之前显示4条,需要补充1个空行时,此节显示
if Count ({材料采购明细.材料名称}, {材料采购明细.品牌}) mod 5>0 and Count ({材料采购明细.材料名称}, {材料采购明细.品牌}) mod 5<=4 then
false
else
true
其余各节依此类推
请在此处下载示例模板及数据库文件,将目录解压到E盘即可完整使用,CR9
https://files.cnblogs.com/babyt/20080128Crystal1.rar
本文从试验到最后成文花了我近两个小时的时间,不过对我来说也是个教训了,
另外,几年前的不踏实,也希望就此解决之
-EOF-
20070127