【摘 要】由于業務需求發生變化,需將代收費與收入分別打印到不同格式的發票上,本文以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.