对于自动补空行或格线的情况,一般出现在以下两种情况:
1:清单类打印,最后一页数据不满时以空行或者格线填满
UPDATE 2005年4月27日
感谢奚彧的提醒,发现这篇文章,刚好是这种情况的说明
http://blog.csdn.net/landlordh/archive/2005/02/05/281590.aspx
幸亏自己没写,呵呵,不然可真是浪费了~~
2:单据类,一般单据格式固定,如每张打印5行数据,不满处则以格线补满5行。
UPDATE 2005年8月1日
感谢bonheur的提醒,原文最后一组时公式错误
我们以第2种情况为例进行说明,因为第2种会了第1种也自然就明白了
在这里我们使用模板公式来实现该功能,而不是用程序代码实现。
该方法并不是很灵活,欢迎大家进行讨论。
非常感谢CSDN的阿土及飞翔的心对本文的贡献
我在这里只担当一个文章整理及讲解的角色,现在开始
我们现在有张单据是这样的,这是我用Word做出来的
对于这种单据,我们一般采用定制纸型的方式,将执行设置为与单据规格一样的纸型
这里我这步就省略了。
构造如下数据
我们在做的时候,以"品牌"进行分组。
本模板中假定每组的数据不超过每张凭证的最大行数。
我们按正常步骤做一个按品牌进行分组的模板
并且设置每页显示一组
Groupnumber mod 1=0
进入节专家,在详细资料节中插入4个空节,
勾上这四节的"抑制显示" ,分别以Crystal语法写入以下公式
详细资料b
If onlastrecord Then
If COUNT({材料采购明细.材料名称},{材料采购明细.品牌})<5 Then
False
Else
True
Else
COUNT({材料采购明细.材料名称},{材料采购明细.品牌})>=5 Or (Next({材料采购明细.品牌})={材料采购明细.品牌})
对该节公式做一下说明
如果当前记录是最后一条记录
判断该组的条数是否>=5 如果符合,则不一致显示(也就是显示);否则,一致显示
如果不是最后一条记录
如果该组条数>=5 或者 下一条记录与本条记录是同一组的,则抑制显示
通俗点说就是这样的
一共有5个节,第一节有数据则填充,没数据当然就不填充了
然后开始判断第2个节
对于第2个节,如果该组的总记录条数大于>=5条,则前面的第一个节就已经填充满了,此处就不必要显示了(True)
同样的,如果下一个记录与本条记录的值一样的话,那么说明后面还有数据,也就不用显示了(True)
但是对于最后一条数据,需要特别处理
最后一条数据的后面就没有数据了
所以如果条数>=5的话,那么前一个节肯定没填充满,所以就显示该节(False)
否则,如果条数不足5条的话,则前面已经处理完了(在前一轮循环中),就不显示该节了(True)
详细资料c
If onlastrecord Then
If COUNT({材料采购明细.材料名称},{材料采购明细.品牌})<4 Then
False
Else
True
Else
COUNT({材料采购明细.材料名称},{材料采购明细.品牌})>=4 Or (Next({材料采购明细.品牌})={材料采购明细.品牌})
详细资料d
If onlastrecord Then
If COUNT({材料采购明细.材料名称},{材料采购明细.品牌})<3 Then
False
Else
True
Else
COUNT({材料采购明细.材料名称},{材料采购明细.品牌})>=3 Or (Next({材料采购明细.品牌})={材料采购明细.品牌})
详细资料e
If onlastrecord Then
If COUNT({材料采购明细.材料名称},{材料采购明细.品牌})<2 Then
False
Else
True
Else
COUNT({材料采购明细.材料名称},{材料采购明细.品牌})>=2 Or (Next({材料采购明细.品牌})={材料采购明细.品牌})
这个时候模板中就增加了4行
在每个新增节的最上面画一条横线来实现表格形式,不然就从上到下的一个大框了
好,看看效果
下载模板文件
https://files.cnblogs.com/babyt/Crystal1.rar
本文写得比较仓促,心里感觉不塌实
可能有不少不足之处,欢迎大家进行讨论
我有时间的话也会静下心来好好再看一下
-------Over------------------
希望这篇文章对你有所帮助。
阿泰 20050414
1:清单类打印,最后一页数据不满时以空行或者格线填满
UPDATE 2005年4月27日
感谢奚彧的提醒,发现这篇文章,刚好是这种情况的说明
http://blog.csdn.net/landlordh/archive/2005/02/05/281590.aspx
幸亏自己没写,呵呵,不然可真是浪费了~~
2:单据类,一般单据格式固定,如每张打印5行数据,不满处则以格线补满5行。
UPDATE 2005年8月1日
感谢bonheur的提醒,原文最后一组时公式错误
我们以第2种情况为例进行说明,因为第2种会了第1种也自然就明白了
在这里我们使用模板公式来实现该功能,而不是用程序代码实现。
该方法并不是很灵活,欢迎大家进行讨论。
非常感谢CSDN的阿土及飞翔的心对本文的贡献
我在这里只担当一个文章整理及讲解的角色,现在开始
我们现在有张单据是这样的,这是我用Word做出来的

对于这种单据,我们一般采用定制纸型的方式,将执行设置为与单据规格一样的纸型
这里我这步就省略了。
构造如下数据

我们在做的时候,以"品牌"进行分组。
本模板中假定每组的数据不超过每张凭证的最大行数。
我们按正常步骤做一个按品牌进行分组的模板
并且设置每页显示一组
Groupnumber mod 1=0
进入节专家,在详细资料节中插入4个空节,

勾上这四节的"抑制显示" ,分别以Crystal语法写入以下公式
详细资料b







对该节公式做一下说明
如果当前记录是最后一条记录
判断该组的条数是否>=5 如果符合,则不一致显示(也就是显示);否则,一致显示
如果不是最后一条记录
如果该组条数>=5 或者 下一条记录与本条记录是同一组的,则抑制显示
通俗点说就是这样的
一共有5个节,第一节有数据则填充,没数据当然就不填充了
然后开始判断第2个节
对于第2个节,如果该组的总记录条数大于>=5条,则前面的第一个节就已经填充满了,此处就不必要显示了(True)
同样的,如果下一个记录与本条记录的值一样的话,那么说明后面还有数据,也就不用显示了(True)
但是对于最后一条数据,需要特别处理
最后一条数据的后面就没有数据了
所以如果条数>=5的话,那么前一个节肯定没填充满,所以就显示该节(False)
否则,如果条数不足5条的话,则前面已经处理完了(在前一轮循环中),就不显示该节了(True)
详细资料c







详细资料d







详细资料e







这个时候模板中就增加了4行
在每个新增节的最上面画一条横线来实现表格形式,不然就从上到下的一个大框了
好,看看效果


下载模板文件
https://files.cnblogs.com/babyt/Crystal1.rar
本文写得比较仓促,心里感觉不塌实
可能有不少不足之处,欢迎大家进行讨论
我有时间的话也会静下心来好好再看一下
-------Over------------------
希望这篇文章对你有所帮助。
阿泰 20050414
Feedback
增加一个公式叫"自定义数字",把你原来的数字删除,把这个公式放上去
编辑这个公式,具体看里面的代码
2:
按抓Ctrl后选取你需要在一定条件下变粗的字段,右键-->格式字段-->字体
样式下选字体,编辑后面的公式。
模板文件
https://files.cnblogs.com/babyt/Crystal2.rar
OK了 回复
你说的不行是哪个不行?格线还是后面格式的? 回复
因为你的SB字段默认出来为1.00/2.00/3.00
导致转换出来不对了,你把公式改成这样
=======================
select cstr(totext(({Command.SB}),0))
case "1":
"一"
case "2":
"二"
case "3":
"三"
case "4":
"四"
case "5":
"五"
case "6":
"六"
case "7":
"七"
case "8":
"八"
case "9":
"九"
default:
{Command.SB})
==================
就可以了 回复
注意这个
default:
{Command.SB})
因为你的值出不来,所以肯定转换后的值不在1~9之间,那就把这个其他拿出来,相当与VB的Case Else
看到症状,就知道了问题所在,也就可以改了
所有的函数在帮助文件里都有的,不过如果你是用.Net自带的话,看起来比较困难
我用的是单独的水晶报表版本,所以按F1就有了,比如说totext的用法等
回复
不过这样也好,你有无发现你的blog排名在直线上升中,呵呵...都是我们灌水灌出来的。 回复
我们的留言还是围绕着主题的,而不是漫无边际地瞎侃
我不喜欢用邮件的原因是邮件是单一的,所以很多问题被一问再问
有些疲劳了
留言是面向大家的,所以大家在翻看的时候会有些启示。
可能有些问题就不用我在回答了
而且留言里还可以进行讨论,这个我喜欢。
以后如果和我聊天的时候要发邮件,
如果有技术问题的话就留言吧
最近回复地虽然比较累,但是感觉思维也活络了些
我认真的对待每一个留言,你应该体会得到的。:)
至于排名,我倒不喜欢太靠前,越靠前,越累,你看我这个热心法(^_^)
到时候还真怕自己招架不住
最近睡得比平时晚多了 回复
要不就照着老思路填充Dataset吧 回复
这里也有个方法 回复
我更新了文章 :) 回复
你的例子里面是有有分组的,但我的报表不需要分组~所以groupnumber mod 1 =0这句我放了很多地方还是不行~~~其实我只要求前面可以连续下去,到最后一页的时候不足才补。目前就是怎么补,它都给我补14行空行(我一页显示14行~)能帮我想想吗,在线等候,谢谢~~ 回复
其实你只要限定每页显示14条recordnumber mod 14 =0,那么肯定只有最后一页才会需要补空格的情况啊 回复
要在最后一页补充空行的话要要怎么操作呢,要在公式里面写什么呢,试了一天了,看到你的回复很有动力,谢谢 回复
回复
http://www.cnblogs.com/babyt/archive/2005/06/10/172034.html 回复
if not onlastrecord then
FORMULA = TRUE
else
if (RecordNumber mod 14 <= 13 and RecordNumber mod 14 >0 ) then
FORMULA =FALSE
else
FORMULA =TRUE
end if
end if
同时也感谢阿泰的帮助,谢谢 回复
babyt#mail.csdn.net 回复
才开始用水晶报表,以后还请多多关照,呵呵。 回复
我做的报表是第一种情况的,每页显示20行,最后一夜不足20行,不足空行,可是我用上面的方法,为什么不好用呢?有一个问题,就是最后页的补行数总是不对。如果最后页是9行,自动不足8行;最后也是12行,自动补足空行11行。自动补足的行数总是显示行数-1,我不知道为什么。你帮我看一下,很着急。
你的邮箱是多少,要不我把文件发给你,你给我看一下问题出在那里了。
谢谢了阿~~~~ 回复
放在哪里啊? 回复
在一个表中
名称 规格 数量 单位
aa 12cm 100 m
bb pc
cc pc
ee r
dd 24m/c 500 c
其中,规格中,aa,dd 能画出格线,但是bb,cc,ee都是空白,一个表格在规格数量列出现断行断列(断线)情况。
请问,如何在空值的地方也画出和aa、dd同样的方格线。
谢谢
回复
在一个表中
————————————————————————————————————
品号 名称与规格 | 数量 | | 单价 | 金额 |
______________________________________________________________
| | | FOB | |
1 239-53451 女上衣 | 134 pcs |加工费 | 800.00 |107,200.00 |
2 239-56453 女裙 | |成品价| 3,187.00 |427,058.00 |
用率暂定 | 307 pcs | 加工费| 800.00 |245,600.00 |
... | | 成品价| 3,041.00 |933,587.00 |
... | | | | |
———————————————————————————————————— |加工费总值: 644,300.00|
|料件总值: 1,644,958.00|
|成品总金额: 2,289,258.00|
______________________________________________________________
______________________________________________________________|
以上均要竖线,成品总金额下为双线。以下不要任何线格。
全部面料
2005年 12月30日 以前由买方无偿提供. 面料如下所列, 辅料祥见辅料清单
纯毛面料 148-150cm w100% 1033.00 米 1,050.00 1,084,650.00
MADE IN JAPAN DELIVERY FROM JAPAN
以上表格画线对我来说难度很大,请多多帮助。
谢谢
回复
可是我在VB6中,引用crystalReportViewer1.时,根本就没有ParamenterFieldInfo这个方法,请问这是什么原因?
我的开发环境是:XP + VB6 + 水晶报表9.2
回复
希望高人能解決這一問題. 回复
比如:每頁顯示5條。
第一組中有8條記錄,第一頁顯示5條,第二頁顯示3條。
用你的方法,第三頁就不會補上2條記錄.
希望能解決,多謝! 回复
不知道能不能这样:
(汇总组:RecordNumber + RecordNumber ) mod 10 =0 达到每页指定行数的目的.
上面的语法肯定不对 回复