问题的提出: 一个带格线的清单类报表,假设有6行,我们设定的页面纸型能容纳5行,那么数据会分成两页。 如下图(第2页): 解决方法: 清单类的报表,要填充的是最后一页的剩余区域。我们以每页显示5行数据为例。 以有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个2个以上空白行的情况,也就是说,count({雇员.出生日期}) mod 5 的值需要是1、2、3 if count({雇员.出生日期}) mod 5>0 and count({雇员.出生日期}) mod 5 <=3 and onlastrecord then
false else true 继续,后面的“详细资料节d”,第3个空白节,将只出现在count({雇员.出生日期}) mod 5 的值需要是1、2的时候 于是,公式为 if count({雇员.出生日期}) mod 5>0 and count({雇员.出生日期}) mod 5 <=2 and onlastrecord then false else true 继续, 后面的“详细资料节e”,第4个空白节,将只出现在count({雇员.出生日期}) mod 5 的值是1的时候 于是,公式为 if count({雇员.出生日期}) mod 5=1 and onlastrecord then false else true 好设置完毕。 如果是5以外但是数字,假设为N。 那么详细资料节就拆成N个,第一个放数据 ,后面的公式依次类推。 第2个到倒数第2个空白节的公式为: if count({雇员.出生日期}) mod N >0 and count({雇员.出生日期}) mod N <=(N-3) onlastrecord then 这样设置好就可以了。 其他: 如何保证每行的行高是一样的? |