增强VFP程序的可扩充性
出处:网络
用VFP编成的实用程序,可扩充性比较差。尤其是它的打印文件(报表文件),在运行环境中无法进行更改。笔者在编制一个制作出口单据中的保险单的程序过程中也遇到这一问题:虽然保单的要素基本是一致的,但保单本身有许多种不同的格式,而这格式会因保险公司的险种调整经常有所变化,同时也有新的保险公司为客户提供业务,又会增加新的保单格式。程序下发使用后不可能经常进行程序的修改、重编译。通过摸索笔者实现了在程序中动态添加保单格式的方法。只要存放保单要素的表不发生改变,以它为数据环境,设计出新的保单格式(报表文件)后,将报表文件(.frx)和其备注文件(.frt)拷贝到同一个目录下。在程序中通过下面的两个对话框,实现新的保单格式的添加和打印。
1.新建一个表report.dbf用以存放保单格式名称和报表文件的全文件名(包括路径)。
两个字段:reportname C(30) reportpath C(100)
2.添加新的保单格式的表单:frmAddDocus.scx
frmAddDocus_Init
public pcPolicyName,pcPolicyFileName &&定义存放保单名称和文件名变量
store "" to pcPolicyName,pcPolicyFileName
cmdChosefile_click
***找到文件所在
thisform.txtPolicyFileName.value=GETFILE('FRX', '单据文件名', '打开',1)
cmdAdd_click
pcPolicyName=alltrim(thisform.txtPolicyName.value)
pcPolicyFileName=alltrim(thisform.txtPolicyFileName.value)
**** 可加一些代码来判断获得的值是否是空值******
if used('dbf\report') &&打开表
select report
else
use dbf\report
endif
locate for report.reportpath=m.pcPolicyFileName &&文件是否已存在
if found() &&如存在,是否换名存盘
cMsg="已有"+pcPolicyFileName+"存在,换名为"+pcPolicyName
nIsSaved=messagebox(cMsg,36,"提示")
if nIsSaved=6
update report set reportname=pcPolicyName;
where report.reportpath=m.pcPolicyFileName
endif
else
insert into report (reportname,reportpath) VALUES(pcPolicyName,pcPolicyFileName)
endif
select report
use
cmdIngore_click
thisform.release
frmAddDocus_Destroy
release pcPolicyName,pcPolicyFileName
3.选择保单格式的表单 frmChosedocu.scx
frmChosedocu_init
public lcReportFileName
if used('dbf\report') &&打开表
select report
else
use dbf\report
endif
for i=1 to reccount() &&将所有的保单格式添加到组合框中
go i
***** 可加一些代码用以判断表中的保单格式是否是合法和可用的 ****
this.cmbReport.additem(alltrim(report.reportname))
if i=1
this.cmbReport.value=alltrim(report.reportname)
endif
endfor
cmdPrint_click
local lcReportRecNo
lcReportRecNo=thisform.cmbReport.listindex
select report
go lcReportRecNo
lcReportFileName=alltrim(report.reportpath) &&打印
if file(lcReportFileName)
aa=lcReportFileName+" RECORD reccount() NOEJECT NOCONSOLE TO PRINTER"
REPORT FORM &aa
else
cMsg="文件 "+lcReportFileName+" 不存在,可能已被移动或损坏!"
=messagebox(cMsg,16,"提示")
endif
cmdIngore_click
thisform.release
frmChosedocu_destroy
release lcReportFileName
select report
use
这样,只要存放保单要素的表的字段不发生改变,以它为数据环境,设计出新的保单格式(报表文件)后,将报表文件(.frx)和其备注文件(.frt)拷贝到同一个目录下(这很重要)。不要修改源程序,只要在程序中通过“添加新的保单格式”和“选择保单格式”这两个表单,即可实现新的保单格式的动态添加和自由打印。
[返回] |