300分!高手请进!如何打印不定长的报表???(300分)

  • 主题发起人 主题发起人 e.com
  • 开始时间 开始时间
E

e.com

Unregistered / Unconfirmed
GUEST, unregistred user!
报表需要打印的列不定(如服装的SIZE:27,28,29,30,31,32,33....),
请问如何根据列的不同设定安排不同的报表打印
(纸张大小设置、自动将打印不下的内容下移到报表的下半页等)???
 
列不定...
 
可以用QuickRep来实现,只是有点麻烦。
如果想在一个QuickRep中实现不定列的打印,需要通过程序控制QuickRep中元素的可见性。对于不需要打印的元素将其隐藏起来。其实也不是很麻烦。
如果根据列数不同,采用不同的报表来打印,那加一个判断语句就可以了。
 
设置尽可能多的列,控制其可见属性
 
这个得自己写代码。做一个通用的打印控件就可以了。
最好是结合dbgrid,它有多少列就打印多少列,也很方便的。
就是要自己计算列的位置。
 
请各位大虾注意:
列不定...
纸张大小为A4
并且要求一定要竖印
 
我曾经遇到类似的问题,记得解决方案是设定列数量选折,用户自己选折打印列数
 
给你推荐以下几种方法:
1。用printers的
begin
doc;
Canvas.TextOut();
.
.
.
Canvas.MoveTo();
Canvas.LineTo();
.
.
enddoc;
语句序列自己画报表。
2。找一个支持直接打印的DBGrid 直接打印,如DBGridEh等;
3。将结果传到Excel后,处理,打印。
我个人推荐用第一种,所有格式均由设计者控制。
 
我遇到类似的问题,解决方案是在用户界面设定所有列,
让用户自己选择打印列数。然后向报表动态添加相应元件,
但当太多时有问题,方法是控制用户选择打印列数量。
不要让用户选择过多。
 
用直接打印驱动行了。
 
附加:
此方法是我现在常用的:多作几张经常用的报表AA,BB,CC等等,在用户界面让用户自己选择AA,BB,CC(单选)。此方法较简单。
Hope it can help!
 

放置足够多个QRLabel和QRText.按A4纸窄行方式分行排好。
判断每一个QRText是否有内容。
有:显示QRLabel和QRText 。

无:不显示QRLabel和QRText。下一个要显示的QRLabel和QRText
代替上一个的位置,主要是Left 和Top 属性。
调整BAND的高度。
 
to:黄耀彰??
todo
oing:第一种方法可有详细例子?
另,问题的重点如下:(应在用一页打印)
物品名称 规格 26 27 28 ..32|
1
2
3
4
.
.
33 34 36 37...... 小计(件数) 重量 包装 ....
 
朋友你的表也太难看了。(是不是客户指定的)
{
物品名称 规格 26 27 28 ..32|
1
2
3
4
.
.
33 34 36 37...... 小计(件数) 重量 包装 ....
}
这样换行后,下面的每一行是属于哪个“物品名称”可是看不清的,特别是行数多了
之后,更加无法看清。不信你看一看下面的这个填了数据的表。

物品名称 规格 26 27 28 ..32|
1 xxxx 100 200 300 50
2 xxxx 0 1000 0 0
3 xxx 50 50 10 1100
4 xxx 121 234 12 500
. xxxx 500 300 0 200
. xx 20 60 50 0
.
.
. xxx 80 100 200 0
33 34 36 37...... 小计(件数) 重量 包装 ....
100 200 20 1000 200 1000 ...
150 0 0 120 800 160 xxx ...
200 10 0 1300 700 250 xxx
300 890 123
0
0
700 12 30 200 2400
.
.
.
.
100 200 300 500 0 90 408 xxx ...
一句话。头昏。不行!绝对不好!
给你个建议,打报表输出格式改为下面样式如何?
物品名称 1 规格 xxxx 小计 1000(件) 重量 200(Kg) 包装 ....
SIZE 26 27 28 29 30 31 32 33 34 35 36 37 38 39 ....
数量 100 200 300 0 0 0 50 100 200 0 20 0 0 0 ...

物品名称 2 规格 xxxx 小计 800(件) 重量 200 (Kg) 包装 ....

SIZE 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
数量 0 100 300 0 0 0 50 100 200 0 20 0 0 0 ....
。。。
。。。
这样也是分行,是否好看多了。也好控制。
只要把它们都有放在同一个rbDetail的 QRBand。就可以了。
如果不想把数量为0的SIZE 打印出来,按我上一次回答的做
就行了。(如果分行后能放下,别删除它。)

如果按你原来的打印格式,有些物品的SIZE的数量为0,有些
不为0。你绝对是不能删除的,因为你无法知道下一种物品有
没有哪种SIZE的东西。删除之后还能对齐吗?
 

1. CreateFile(..'LPT1'...)
2. Write Data to File.
3. CloseFile
 
to:黄耀彰==>
1、所用格式确实是客户指定,不可修改!因为他们以前曾用FOXPRO做过
2、当有些物品的SIZE的数量为0时,以(-)形式显示:
物品名称 规格 26 27 28 ..32|
1 xxxx 100 200 300 50
2 xxxx - 1000 - -
3 xxx 50 50 10 1100
4 xxx 121 234 12 500
. xxxx 500 300 - 200
. xx 20 60 50 -
.
.
. xxx 80 100 200 -
 

说服你的上帝.让他考虑你的更好的方法。
(先做出样板再说,不他会认为你不行)
按你上面所说的,0 -->"-" 那0就不能是数值型了。

 
to:黄耀彰==>
我手上确有他们要求的样板那是他们用FOXPRO编的
0==》‘-’这只是显示问题,No problem
 
我找到解决问题的办法了。
使用ReportBuilder,彻底解决任何报表打印问题(有点夸张)。
http://www.digital-metaphors.com/rbent/rbent5.exe
sn:millennium
 

Similar threads

回复
0
查看
863
不得闲
回复
0
查看
1K
不得闲
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部