研讨存折打印度问题!
我做了个公司内部银行软件,存折打印大伤脑筋,我的解决方法是:
在帐户基本信息表中设置三个字段,用以记忆已经打印业务记录,dyyh(打印页号), dyhh(打印行号),dyzh(打印折号),打印时定位到客户已经打印的最后一条记录,从尚未打印的第一条记录开始打印,按记忆的打印页号.打印行号.打印折号已经打印的业务定位存折,再续打业务记录,打印代码全部使用 @ i,j say 来进行,
想请教高手,是否有更好的方法,处理存折打印??
问题点数:20、回复次数:9Top
1 楼apple_8180(十豆三)回复于 2006-03-17 10:44:45 得分 0
你的办法不错呀Top
2 楼sdsthgt(老菜)回复于 2006-03-17 10:53:43 得分 0
@ say 语句,不用考虑打印机类型,不用考虑,纸张类型,只要有打印机,就能打印,想打那行就打那行,灵活性很强,实验报表设计器,就没有@ say 好用。
可是
程序在在win2000下打印带底纹,而调试时,同样的语句,用command窗口执行,没有底纹,
还有,用@ say怎么来控制字体类型,行间距?
Top
3 楼apple_8180(十豆三)回复于 2006-03-17 11:09:14 得分 2
底纹不太清楚,因为现在自WINDOWS ME 以后就不用@ say 语句了。
行间距不是问题,如:
@1,5 SAY ... &&第一行
@3,5 SAY ... &&第三行
语法:
@ <行,列> [SAY <表达式>] [PICTURE <格式符>] [COLOR <颜色对>]
功能:在屏幕指定坐标位置上输出显示结果。
PICTURE描述码和意义
A:只允许字母
L:只允许逻辑数据
N:只允许字母和数字
X:允许任意字符
Y:只允许Y、N、y、n,而且y,n分别被转化为Y,N
9:对字符数据只允许数字,对数值数据只允许数字和正负号
#:允许数字、空格、正负号
!:转换小写字母转化为大写字符
$:显示货币号
*:显示在数字值的前面
.:指出小数点的位置
,:放在小数点的左边,用于数字的分隔
Top
4 楼apple_8180(十豆三)回复于 2006-03-17 11:18:59 得分 5
如果用报表也是可以的,如:设报表文件名“Prn.frx”
1、不要把报表文件Prn.frx添加到项目中,或添加项目后,然后设为排除。
2、把报表文件Prn.frx与程序一齐发布。
2、每次打印前,计算出要打印行和打印次数,用USE 打开报表文件
USE Prn.frx
然后修改要打印的域控件的VPOS字段(行座标)和HPOS字段(列座标 ),再执行
USE &&关闭
最后执行打印语句即可。
Top
5 楼sdsthgt(老菜)回复于 2006-03-17 15:21:27 得分 0
我用过这种方法,不好用,
USE Prn.frx
然后修改要打印的域控件的VPOS字段(行座标)和HPOS字段(列座标 ),再执行
USE &&关闭Top
6 楼sdsthgt(老菜)回复于 2006-03-17 15:30:04 得分 0
存折的样式一般是上下两页,,
首页是帐户基本信息,如果是新折,将打印此页,
第1页在存折的下半部,
第2页在存折的上半部,
第3页在存折的下半部,
第4页在存折的上半部,
第5页在存折的下半部,
第6页在存折的上半部,
末页 为“注意事项”印刷,,不打印,,
用USE Prn.frx
然后修改要打印的域控件的VPOS字段(行座标)和HPOS字段(列座标 ),再执行
USE &&关闭
的方法,
当客户来打印存折时,(未打印记录较多)第一页尚有未打印记录,应先打印第一页,然后打印第2页,,第3页。。。。
用这个方法好像不行,!
Top
7 楼sdsthgt(老菜)回复于 2006-03-21 10:42:26 得分 0
没人对这个感兴趣么?Top
8 楼dfwxj(清风)回复于 2006-03-22 22:54:23 得分 0
本人认为的一种比较简单有效的方法:
用VFP的报表,报表的数据源用一个表,在打印之前先组织数据,将需要打印的数据添加到报表的数据表里,根据记录的已打印行数,预先添加空白记录,我来找一个例子Top
9 楼dfwxj(清风)回复于 2006-03-23 00:08:36 得分 13
思路:
1、存折翻开后是两页,奇数页在下,偶数页在上下
2、每一页打印的行数是固定的,例如是10
3、每本存折的页数是固定的,例如9
4、设计一个报表prncz,数据源为pdata,设计时页标头带区设置为0
5、将未打印的数据拷贝到临时表t1,对已打印的数据怎么处理请大家自行发挥
use jcxx in 0
use pdata in 0
use t1 in 0
do while recc('t1')#0
go top in t1
sele pdata
zap
for i=1 to jcxx.dyhh
appe blan
endf
appe from t1 next 10-jcxx.dyhh
use prncz.frx in 0 alia prn
repl height with iif(mod(jcxx.dyyh+1,2)=0,0,n) for objtype=9 and objcode=0 &&这里的n是奇数页的页标头高度
use in prn
repo form prncz to prin noco &&直接打印,在这里可以加入判断是否打印成功的代码,假设一次性打印成功
sele t1
go top
dele next 10-jcxx.dyhh
pack
sele jcxx
repl dyyh with iif(dyyh=9,0,dyyh+1),dyhh with mod(recc('pdata'),10),dyzh with iif(dyyh=0,dyzh+1,dyzh)
flush
endd
代码看了挺乱,其实很简单,根据基础信息中记载的页号设置报表的页标头,根据已打印的行数添加相应的空白记录,然后将要打印的数据添加到报表中打印Top




