研讨存折打印度问题!

sdsthgt 2006-03-17 10:27:53
我做了个公司内部银行软件,存折打印大伤脑筋,我的解决方法是:
在帐户基本信息表中设置三个字段,用以记忆已经打印业务记录,dyyh(打印页号), dyhh(打印行号),dyzh(打印折号),打印时定位到客户已经打印的最后一条记录,从尚未打印的第一条记录开始打印,按记忆的打印页号.打印行号.打印折号已经打印的业务定位存折,再续打业务记录,打印代码全部使用 @ i,j say 来进行,
想请教高手,是否有更好的方法,处理存折打印??
...全文
305 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dfwxj 2006-03-23
  • 打赏
  • 举报
回复
思路:

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

代码看了挺乱,其实很简单,根据基础信息中记载的页号设置报表的页标头,根据已打印的行数添加相应的空白记录,然后将要打印的数据添加到报表中打印
dfwxj 2006-03-22
  • 打赏
  • 举报
回复
本人认为的一种比较简单有效的方法:

用VFP的报表,报表的数据源用一个表,在打印之前先组织数据,将需要打印的数据添加到报表的数据表里,根据记录的已打印行数,预先添加空白记录,我来找一个例子
sdsthgt 2006-03-21
  • 打赏
  • 举报
回复
没人对这个感兴趣么?
十豆三 2006-03-17
  • 打赏
  • 举报
回复
如果用报表也是可以的,如:设报表文件名“Prn.frx”

1、不要把报表文件Prn.frx添加到项目中,或添加项目后,然后设为排除。
2、把报表文件Prn.frx与程序一齐发布。
2、每次打印前,计算出要打印行和打印次数,用USE 打开报表文件
USE Prn.frx
然后修改要打印的域控件的VPOS字段(行座标)和HPOS字段(列座标 ),再执行
USE &&关闭
最后执行打印语句即可。
十豆三 2006-03-17
  • 打赏
  • 举报
回复
底纹不太清楚,因为现在自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:对字符数据只允许数字,对数值数据只允许数字和正负号
#:允许数字、空格、正负号
!:转换小写字母转化为大写字符
$:显示货币号
*:显示在数字值的前面
.:指出小数点的位置
,:放在小数点的左边,用于数字的分隔
sdsthgt 2006-03-17
  • 打赏
  • 举报
回复
@ say 语句,不用考虑打印机类型,不用考虑,纸张类型,只要有打印机,就能打印,想打那行就打那行,灵活性很强,实验报表设计器,就没有@ say 好用。

可是

程序在在win2000下打印带底纹,而调试时,同样的语句,用command窗口执行,没有底纹,
还有,用@ say怎么来控制字体类型,行间距?
十豆三 2006-03-17
  • 打赏
  • 举报
回复
你的办法不错呀
sdsthgt 2006-03-17
  • 打赏
  • 举报
回复
存折的样式一般是上下两页,,

首页是帐户基本信息,如果是新折,将打印此页,

第1页在存折的下半部,
第2页在存折的上半部,
第3页在存折的下半部,
第4页在存折的上半部,
第5页在存折的下半部,
第6页在存折的上半部,

末页 为“注意事项”印刷,,不打印,,

用USE Prn.frx
然后修改要打印的域控件的VPOS字段(行座标)和HPOS字段(列座标 ),再执行
USE &&关闭
的方法,
当客户来打印存折时,(未打印记录较多)第一页尚有未打印记录,应先打印第一页,然后打印第2页,,第3页。。。。
用这个方法好像不行,!


sdsthgt 2006-03-17
  • 打赏
  • 举报
回复
我用过这种方法,不好用,
USE Prn.frx
然后修改要打印的域控件的VPOS字段(行座标)和HPOS字段(列座标 ),再执行
USE &&关闭

2,727

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧