天下無雙
阿龍 --质量是流程决定的。

现在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条的分页
组分页可以在组页眉和组页脚上设置,本文中组页脚承担了另外的补空格任务,所以分页在组页眉上
增加一个公式

groupnumber mod 1=0


即每一个分组都换页

然后在详细资料节上设置公式,使每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

posted on 2008-10-15 11:28  阿龍  阅读(407)  评论(0编辑  收藏  举报