首页 > 范文大全 > 正文

在PB7中如何动态控制两个打印机实现发票打印

开篇:润墨网以专业的文秘视角,为您筛选了一篇在PB7中如何动态控制两个打印机实现发票打印范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

【摘 要】由于业务需求发生变化,需将代收费与收入分别打印到不同格式的发票上,本文以PowerBuilder7.0作为开发工具,SQL SERVER2000作为后台数据库,Windows XP为操作系统平台,详细介绍在重庆电大收费系统中如何动态控制两个打印机实现发票打印

【关键词】收费系统 发票格式 打印机 发票打印

一、产生问题的原因

PowerBuilder7.0是一种高效而快捷的集成开发环境,它提供了可视化的、面向对象的、基于客户机/服务器的开发环境,被誉为最快速地客户机/服务器数据库信息系统开发工具,使用其DataWindow数据窗口专利技术,能快速的实现数据的增加、修改、删除、查询和打印功能,同时具有最强大的、方便的报表功能,可以直接在应用程序中使用的报表生成器,支持Crosstab、图形报表,nested报表以及其他一些吸引人的特性。用户可以根据需要选择各种标准纸张类型打印报表、也可自定义纸张格式打印凭证和发票,但其打印内容都是输出到操作系统默认的打印机。而在重庆电大开放学院收费系统中,由于重庆市将大中专学生收费发票分成了两种不同格式,一种为收入发票,只能打印收入的收费项目,如学费、住宿费等,另一种为代收费发票,只能打印代收的收费项目,如书费、体检费等。如果客户机上只使用一台打印机,就需要在两台计算机上分别打印收入和代收费,如果安装两台打印机就需要动态的控制两台打印机改变为当前默认打印机,将收费项目发送到不同的打印机进行打印。

二、解决方案

如果在两台计算机上分别打印收入和代收费,只需重新设置收入发票格式和代收费发票格式,每台计算机就只能收取收入的收费项目或者收取代收费的收费项目,这样将以前一次完成的操作分成两次完成,实际运行中会带来很多不便,比如同一个学生的相关信息需要输入两次,操作员需要不断地更换计算机进行收费,可能将收入的收费项目打印到代收费发票上,或者将代收费的收费项目打印到收入的发票上,不仅效率低下,而且也容易出错,让学生等待时间过长也会让学生产生反感。就其利弊,当然应选择第二种方案,可以同时收取收入和代收费,并将收费项目发送到不同的打印机进行打印。

虽然在PowerBuilder7.0中提供了PrintSetup()函数,可以在标准的打印对话框中通过手工选择打印机实现打印,但不能自动的实现将将收费项目发送到相应的打印机进行打印,这将极大地影响收费速度,同时也会因为选择打印机错误而引起发票打印格式错误。因此需要能自动识别收费项目的类型,并且自动地选择对应的打印机进行打印。

因为需要分辨物理打印机,故将两台打印机分别修改其默认名称为收入和代收费,对应的为了能识别收费项目以便能发送到对应格式的打印机进行打印,需要在收费项目表中增加一个收费项目类型的字段,其值为收入或代收费,将所有收费项目分成收入收费项目和代收费收入项目,操作员收费时仍然可同时输入收入和代收费的收费项目,在保存收费信息时,将收入和代收费分别保存为两笔收费记录,根据收费记录属于收入还是代收费,既而选择相应格式发票的打印机进行打印。打印时,先将收入打印机设置为默认打印机,再把收入的收费信息传送到当前默认打印机进行打印,然后又将代收费打印机设置为默认打印机,又把代收费的收费信息传送到当前默认打印机进行打印。

现在解决问题的重点就是如何改变当前默认打印机,通过对Windows XP系统进行分析,我们能够知道Windows的打印机的信息一般存放在注册表及Win.ini文件中。这些信息分别位于系统注册表的HKEY_CURRENT_CONFIG\System\CurrentControlSet\Control\Print\Printers下及win.ini的[windows]及[Devices]段下。在注册表中每一个打印机在上面的目录下均有一个以打印机为名的主键条目,Win.ini的[Devices]也一样。在注册表上述目录下,有default字符串值指示当前的默认打印机,win.ini中的[windows]中device的值对也一样对应了当前的打印机,可以从win.ini文件中取当前打印机完整信息,然后在win.ini文件及注册表中更新当前打印机,问题即得以解决。下面以在客户机并行接口上安装Epson LQ-1600K打印机,修改其打印机名为收入,在USB1接口上安装Epson LQ-630k打印机,修改其打印机名为代收费,都使用29cmX14cm的自定义纸张的实际环境来具体说明解决方法。

三、小结

通过以上论述可知,在用PowerBuilder7.0开发的应用程序中可用多种方法实现对打印机的控制。对于单台打印机的打印,一般直接调用datawindow.print()方法即可。如需要动态控制两个打印机实现打印就需要通过改变当前默认打印机来予以解决。

【参考文献】

[1]PowerBuilder实用教程(第3版) . 电子工业出版社,2011.

[2]PowerBuilder案例开发集锦(第2版). 电子工业出版社,2009.

[3]PowerBuilder实用教程与实训. 北京大学出版社,2006.

[4]Windows API开发详解:函数、接口、编程实例. 人民邮电出版社,2011.