chiname

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  13 随笔 :: 1357 文章 :: 899 评论 :: 107万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
对于自动补空行或格线的情况,一般出现在以下两种情况:
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
posted on 2005-04-15 13:41 阿泰 阅读(2932) 评论(51)  编辑 收藏 收藏至365Key 所属分类: C_水晶报表模板

Feedback

# re: 水晶报表自动补空行,补格线思路 2005-04-15 14:32 bguest
好贴...... 讲解得够详细了。  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-15 14:59 阿泰
1:
增加一个公式叫"自定义数字",把你原来的数字删除,把这个公式放上去
编辑这个公式,具体看里面的代码
2:
按抓Ctrl后选取你需要在一定条件下变粗的字段,右键-->格式字段-->字体
样式下选字体,编辑后面的公式。

模板文件
https://files.cnblogs.com/babyt/Crystal2.rar

OK了  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-15 16:32 bguest
郁闷啊,快给CrystalReport给弄Cry了,同样的代替代码,在你的那个rpt上面就正常,在我的那个rpt死活都没反应。服了....都不知道究竟那里出问题.....哎...艰苦啊  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-15 16:35 阿泰
把你的模板数据保持后发给我看看
你说的不行是哪个不行?格线还是后面格式的?  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-15 17:06 bguest
我发给你了,数字自定义有问题,很奇怪啊...我又重新做了几个模板,有些行有些不行,我都搞不清楚究竟是什么原因了。莫名其妙啊...555~~~  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-15 17:21 阿泰
问题出在数字的格式上:
因为你的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})
==================
就可以了  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-15 17:25 bguest
强,怎么可以调试到程序的? 教一下,呵呵....或者告诉我在那里可以查到资料和教材  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-15 17:30 阿泰
这个不是错误,所以是不能调试的,主要是靠经验。
注意这个
default:
{Command.SB})
因为你的值出不来,所以肯定转换后的值不在1~9之间,那就把这个其他拿出来,相当与VB的Case Else
看到症状,就知道了问题所在,也就可以改了
所有的函数在帮助文件里都有的,不过如果你是用.Net自带的话,看起来比较困难
我用的是单独的水晶报表版本,所以按F1就有了,比如说totext的用法等
  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-15 17:41 bguest
好,明白了....谢谢阿泰,下班了,快回家吃饭去.... 有msn可以直接交流就好了....
不过这样也好,你有无发现你的blog排名在直线上升中,呵呵...都是我们灌水灌出来的。  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-15 17:42 bguest
汗,已经18x名了,昨天还是300左右的....  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-15 17:49 阿泰
我也注意到了,呵呵,都是你的“功劳”啊
我们的留言还是围绕着主题的,而不是漫无边际地瞎侃

我不喜欢用邮件的原因是邮件是单一的,所以很多问题被一问再问
有些疲劳了
留言是面向大家的,所以大家在翻看的时候会有些启示。
可能有些问题就不用我在回答了
而且留言里还可以进行讨论,这个我喜欢。

以后如果和我聊天的时候要发邮件,
如果有技术问题的话就留言吧
最近回复地虽然比较累,但是感觉思维也活络了些

我认真的对待每一个留言,你应该体会得到的。:)
至于排名,我倒不喜欢太靠前,越靠前,越累,你看我这个热心法(^_^)
到时候还真怕自己招架不住

最近睡得比平时晚多了  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-15 21:52 阿泰
上得快下得也快,就吃饭的工夫就掉出200了,真有趣,哈哈.  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-18 11:57 bguest
这种补空行的方法用在行数少的页面还挺好的,可是.... 如果行数一多,似乎就有点郁闷了。我现在做的这个页面,一页有27行,不会也分27个节来判断吧?-_-!  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-18 11:59 阿泰
呵呵,多行暂时无办法。
要不就照着老思路填充Dataset吧  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-18 12:06 bguest
呵呵呵.........现在的报表已经填充了很多空白的DataRaw了,这种做法,令我想起一些不雅而又流行的东西,笑死,不说也罢。  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-23 16:29 delbrueck
多行可以考虑先分组再使用count  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-27 22:24 奚彧
http://blog.csdn.net/landlordh/archive/2005/02/05/281590.aspx
这里也有个方法  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-04-27 22:39 阿泰
谢谢奚彧,这个文章就是我所说的第一种情况的处理.
我更新了文章 :)  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-06-10 09:22 wing
阿泰~~
你的例子里面是有有分组的,但我的报表不需要分组~所以groupnumber mod 1 =0这句我放了很多地方还是不行~~~其实我只要求前面可以连续下去,到最后一页的时候不足才补。目前就是怎么补,它都给我补14行空行(我一页显示14行~)能帮我想想吗,在线等候,谢谢~~  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-06-10 14:36 阿泰
如果没有分组,那么groupnumber mod 1 =0就可以不需要了
其实你只要限定每页显示14条recordnumber mod 14 =0,那么肯定只有最后一页才会需要补空格的情况啊  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-06-10 15:20 wing
阿泰~还在线吗?
要在最后一页补充空行的话要要怎么操作呢,要在公式里面写什么呢,试了一天了,看到你的回复很有动力,谢谢  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-06-10 15:45 wing
我认真看了你以上的资料,里面函数是用count //返回一个字段出现的次数 我曾用多个其他函数用不同的组合判断。但总是不理想。如:DistinctCount 与 recordnumber 试过很多判断。帮我写个公式让我试下吗? 在线等候~~(其实一直在线,忘记刷新,提醒其他朋友,若你在线,不忘刷新)
  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-06-10 17:08 阿泰
你看一下这篇吧,就是我在这篇日志的开始提到的那种情况
http://www.cnblogs.com/babyt/archive/2005/06/10/172034.html  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-06-10 17:16 wing
好的,我看看~~~(再不行我明天再做,下班很久了~) 谢谢。  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-06-10 17:32 wing
这个地址我今天早上就有看过了,但是复制进去,就是死活表格就不出来,不管什么情况下,什么状态下都不显示~郁闷~~~好了,回去了,吃饭~~~  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-06-11 16:56 wing
各位兄弟姐妹们~~~小妹鼠标点得手都快麻木了,终于得出结果。共享给大家:
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
同时也感谢阿泰的帮助,谢谢  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-06-13 09:53 阿泰
恭喜wing ,不过你到底是小弟还是小妹? 好象经常更换性别的说。  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-06-23 11:13 wing
我看了一下,我没有说我是小弟呀~:)  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-07-31 16:44 bonheur
阿泰,我发现一个问题,当品牌E的记录数为4个的时候,表格的数量不再是5个了,而是7,不知你们有没有发现这个问题?  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-08-01 10:34 bonheur
我这边如果分组的话,最后一个组的表格可能会出现问题,阿泰你试试看有没有我这样的问题?  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-08-01 11:06 阿泰
把模板和数据库文件发给我看看吧
babyt#mail.csdn.net  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-08-01 12:42 bonheur
我就是在使用你提供的模板的时候发现的这个问题,麻烦你看一下。  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-08-01 14:11 阿泰
修改了一下,重新下模板看一下 :)  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-08-02 20:27 bonheur
现在好了 ,谢谢阿泰,
才开始用水晶报表,以后还请多多关照,呵呵。  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-08-10 21:38 maggie
阿泰,
我做的报表是第一种情况的,每页显示20行,最后一夜不足20行,不足空行,可是我用上面的方法,为什么不好用呢?有一个问题,就是最后页的补行数总是不对。如果最后页是9行,自动不足8行;最后也是12行,自动补足空行11行。自动补足的行数总是显示行数-1,我不知道为什么。你帮我看一下,很着急。
你的邮箱是多少,要不我把文件发给你,你给我看一下问题出在那里了。
谢谢了阿~~~~  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-08-11 00:13 阿泰
babyt#mail.csdn.net  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-08-16 10:45 wangjian01881
Groupnumber mod 1=0
放在哪里啊?  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-08-16 13:35 阿泰
http://babyt.cnblogs.com/archive/2005/03/13/118091.html  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-08-30 09:33 mapeiting
阿泰,我按照你的方法做了一个报表,按敬称分组,组变即换页,每页显示12行。当一组的内容不能在一页中显示时,该组的最后一页如果不足12行,并没有补格。请问这是为什么啊?  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-09-09 21:33 追风
阿泰,我现在按你的方法已基本实现,唯一的一点就是中间的那些竖线会一竖到底,这该怎样解决!!!!!及啊  回复
  

# 求助Jbuilder與水晶报表的連接問題 2005-10-27 15:29 羅秋萍
阿泰你好,我現在做的專案是使用Jbuilder開發,水晶報表10,數據庫是Oracle 9i,我想知道在Jbuilder中如何設置才能將報表連上,並以Excel 和Pdf兩种格式導出?我的Msn是lqtoaigh_9@hotmail.com 真心希望得到您的幫助!!謝謝!  回复
  

# 導出報表問題 2005-10-27 15:33 羅秋萍
還有一個問題,就是我在水晶報表中做好一個表格式的報表,我選擇Pdf導出時是正常的,但如果我選擇Excel導出,報表綫框就不見了,也就是失真了,不知這是什麽原因,希望幫我解決,謝謝!!  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-10-31 15:11 xxx
gaoshou a  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-12-15 10:39 jinmi
我想请问,怎么样才能在水晶报表中让每一页只显示五条记录,然后再换页,谢谢赐教.  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-12-22 14:29 Cliffleeway
请教
在一个表中
名称 规格 数量 单位
aa 12cm 100 m
bb pc
cc pc
ee r
dd 24m/c 500 c
其中,规格中,aa,dd 能画出格线,但是bb,cc,ee都是空白,一个表格在规格数量列出现断行断列(断线)情况。
请问,如何在空值的地方也画出和aa、dd同样的方格线。
谢谢
  回复
  

# re: 水晶报表自动补空行,补格线思路 2005-12-23 09:51 Cliffleeway
请教
在一个表中
————————————————————————————————————
品号 名称与规格 | 数量 | | 单价 | 金额 |
______________________________________________________________
| | | 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
以上表格画线对我来说难度很大,请多多帮助。
谢谢
  回复
  

# 阿泰,不好意思,请你帮忙 2006-03-03 11:52 leonely
我打算在VB6环境中,通过水晶报表控件CRViewer9,来向水晶报表(9.2)传递VB6程序中的变量,我看了好多文章,是这样写的:crystalReportViewer1.ParameterFieldInfo = paramFields
可是我在VB6中,引用crystalReportViewer1.时,根本就没有ParamenterFieldInfo这个方法,请问这是什么原因?
我的开发环境是:XP + VB6 + 水晶报表9.2
  回复
  

# re: 水晶报表自动补空行,补格线思路 2006-03-17 17:25 jmwys
阿泰你好,很早拜读过你的文章,已经使用你提供的思路实现了补空格线,现在想麻烦你的是另外一个问题:我把你的模板文件下载了,在vs.net2003中的一个任务添加进去,然后使用CrystalReportView预览是没有问题的,但我把CrystalReportView的border和BackColor设一下,发现在预览中显示的纸张区域是A4的设置,当然跟阁下在PRT文件中设置的一样,我的问题是如果使用连续走纸的话,该怎样控制纸张的分页呢?因为我需要打的单据格式不是标准的,使用自定义的方法后,在预览是看到纸张的宽度已经起效了,可纸张的高度却没反应,我使用的尺寸是21.6*14.8,我看到你的模板是只有五行的小单据,如果也需要用小张的纸来练习打印的话,该怎样解决呢?非常热切期望你的答复,谢谢!  回复
  

# re: 水晶报表自动补空行,补格线思路 2006-03-20 09:24 金色約定
但是有一個問題,當字段內容非常多的時候換行後,第二頁就出現空白頁。
希望高人能解決這一問題.  回复
  

# re: 水晶报表自动补空行,补格线思路 2006-03-20 14:50 金色約定
還有一個問題,就是同一組裡面的內容很多,分兩頁顯示.
比如:每頁顯示5條。
第一組中有8條記錄,第一頁顯示5條,第二頁顯示3條。
用你的方法,第三頁就不會補上2條記錄.
希望能解決,多謝!  回复
  

# re: 水晶报表自动补空行,补格线思路 2006-03-21 14:46
你的贴子看了。
不知道能不能这样:
(汇总组:RecordNumber + RecordNumber ) mod 10 =0 达到每页指定行数的目的.
上面的语法肯定不对  回复
  
posted on   把我的欢乐带给你  阅读(3805)  评论(1编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示