总第 664 期
【作 者】
李国红
【作者单位】
(郑州大学管理工程系 郑州 450001)
【摘 要】
【摘要】本文基于microsoft visual FoxPro 6.0软件环境,简要阐述了会计科目删除处理的基本思路。具体分析与讨论了科目删除操作界面及相应的VFP表单设计,论述了会计科目数据删除处理的过程和实现方法,提供了实现会计科目数据删除功能的VFP程序代码。
【关键词】会计科目 信息系统 数据删除处理 VFP程序
一、会计科目删除的基本思想
会计科目信息保存在会计科目表文件kjkm.dbf中,该文件的结构如表1所示。
存储于kjkm.dbf文件中的会计信息更新时需对原会计科目数据进行删除。如何在计算机上实现这一功能?
笔者的做法是运用microsoft visual FoxPro 6.0及以上版本软件,通过VFP程序来达到删除会计科目数据的目的,具体来说,就是通过一个便捷的科目删除界面指定删除条件,再单击“删除”之类的命令按钮,将满足条件的记录从kjkm.dbf文件中彻底删除。
为此,可依据删除处理的要求和界面设计的原则设计如图1所示的科目删除操作界面,以实现科目信息删除功能。用户进行操作时,可在项目对应的下拉列表中选择科目编号、科目名称、借贷方向和期初余额,在比较符对应的下拉列表中选择各种比较运算符,在值对应的文本框中输入对应的数据,这样由“项目、比较符和值”就构成一个条件,单击“删除(S)”按钮或按下Alt+S组合键时,就可以在kjkm.dbf文件中删除符合条件的记录;而如果没有符合条件的记录,则不执行删除操作。
二、设计表单
由表1可知,科目编号、科目名称、借贷方向是字符型数据,而期初余额是数值型数据,所以当按期初余额进行查询与删除时,删除条件中的值对应于数值型数据,否则,其值对应于字符型数据。因此,可将图1中“值”所对应的文本框设计成两个重叠的文本框,一个用于接收字符型数据,另一个用于接收数值型数据,但同一时刻只是按需显示其中一个而隐藏另一个,看上去好像只有一个文本框。
为便于按图1所示的界面实现科目删除功能,可利用Visual FoxPro(简称VFP)设计如图2所示的科目删除表单。其中,“科目删除”是表单的Caption属性,长方形对应于一个容器对象,“删除条件:”、“项目:”、“比较符:”、“值:”分别是相应标签控件的Caption属性,Combo1、Combo2是相应下拉列表框的Name属性,Text1、Text2是相应文本框的Name属性,“删除(S)”、“退出(T)”按钮对应的Caption属性分别设置为“删除(\<S)”、“退出(\<T)”。
各控件对应的字体、字号分别通过设置其FontName和FontSize属性的值来确定,文字的颜色可通过调色板工具栏来进行修改。
这里提醒用户需要注意两点:①按科目编号、科目名称或期初余额指定删除条件时,需要将相应的值输入到Text1文本框;②按期初余额指定删除条件时,需要将相应的值输入到Text2文本框。所以Text1文本框应接收字符型数据,而Text2文本框则应接收数值型数据。
要让Text2接收数值型数据,可按如下方法进行设置:用鼠标右键单击Text2,在出现的快捷菜单中单击“生成器”选项,再在文本框生成器中将数据类型设置为“数值型”,输入掩码设置为999999999.99(表示只能输入数值型数据,保留2位小数,与会计科目表文件kjkm.dbf中qcye字段的类型、宽度、小数位保持一致),最后单击“确定”按钮即可。
删除处理功能用程序代码实现后,需将Text2与Text1无缝重叠在一起。
三、表单初始化
表单初始化就是使图2所示的表单刚运行后呈现为如图1所示的初始化操作界面。为此,需按如下步骤进行设计:
首先,指定与Combo1和Combo2关联的数据源。Combo1下拉列表框中可选的项为科目编号、科目名称、借贷方向、期初余额,Combo2下拉列表框中可选择下述比较运算符:<、<=、=、==、<>、>=、>。为达此目的,可按表2对Combo1和Combo2控件的RowSourceType、RowSource、Style属性进行设置。
其次,设置表单的Init过程。表单刚运行后默认选中相应下拉列表项中的某一项(如选中“科目名称”和“=”),依据Combo1所选择的项目是否“期初余额”使Text1、Text2中的其中一个文本框隐藏,而另一个文本框显示并获得焦点(如Combo1中选择“科目名称”,对应于Text2隐藏、Text1显示并获得焦点)。
需在表单的Init过程中输入以下VFP代码(&&表示命令后注释):
thisform.combo1.listindex=2 &&对应于Combo1下拉列表的第二项"科目名称"
thisform.combo2.listindex=3 &&对应于Combo2下拉列表的第三项"="
if thisform.combo1.value="期初余额" &&若Combo1的值为"期初余额"
thisform.text1.visible=.f. &&Text1隐藏
thisform.text2.visible=.t. &&Text2可见
thisform.text2.setfocus &&Text2获得焦点
else &&若Combo1的值为不为"期初余额"
thisform.text1.visible=.t. &&Text1可见
thisform.text2.visible=.f. &&Text2隐藏
thisform.text1.setfocus && Text1获得焦点
endif四、指定删除条件
表单启动后,默认显示初始化的操作界面,可以直接在所显示的文本框输入相关的值,从而指定一个删除条件。也可以重新在Combo1下拉列表选择项目,或者在Combo2下拉列表选择比较运算符,从而指定新的删除条件。
在Combo1下拉列表选择待查询项目的处理过程是:若选择“期初余额”,则Text1隐藏,Text2可见并获得焦点,以便输入数值型数据;否则Text2隐藏,Text1可见并获得焦点,以便输入字符型数据。要实现该功能,可在Combo1的Click过程中输入以下VFP代码:
if this.value="期初余额"
thisform.text1.visible=.f.
thisform.text2.visible=.t.
thisform.text2.setfocus
else
thisform.text2.visible=.f.
thisform.text1.visible=.t.
thisform.text1.setfocus
endif
在Combo2下拉列表选择比较运算符的处理过程是:若Combo1的值是“期初余额”,则Text2获得焦点,即输入数值型数据;否则,Text1获得焦点,即输入字符型数据。另外,还要在Combo2的Click过程中输入以下VFP代码:
if thisform.combo1.value="期初余额"
thisform.text2.setfocus
else
thisform.text1.setfocus
endif
五、实现删除功能
表单运行期间,指定删除条件后,如果单击“删除(S)”按钮,或按下Alt+S组合键,就可以按指定的条件删除会计科目表文件kjkm.dbf中的相关记录。为便于程序编写,先在属性窗口将Combo2的ControlSource属性设置为bj,就可以用&bj. 表示从Combo2中选择的列表项对应的比较运算符,其中&是宏替换函数。
删除处理的大致步骤是:①将数据比较方式设置为精确比较;②将不同情况下删除条件对应的字符串保存设置为变量tj,这样就可以用&tj.表示真正的删除条件,其中&是宏替换函数;③打开kjkm.dbf文件,查找符合条件&tj.的记录,如找到,则删除(否则不删除),并进行必要的提示,然后关闭文件;④若Combo1的值是“期初余额”,则Text2置0并获得焦点,否则Text1清空并获得焦点,从而为下次操作做好准备;⑤将数据比较方式恢复为默认的比较方式;⑥单击“删除(S)”按钮(或按下Alt+S组合键)执行该功能,“删除(S)”按钮的Click过程的VFP程序代码。完成上述步骤后,会有如下对应显示(&&表示命令后注释):
set exact on &&设置为精确比较方式
do case &&分不同情况将删除条件对应的字符串用tj表示
case thisform.combo1.value="科目编号"
tj="kmbh &bj.""+allt(thisform.text1.value)+"""
case thisform.combo1.value="科目名称"
tj="kmmc &bj.""+allt(thisform.text1.value)+"""
case thisform.combo1.value="借贷方向"
tj="jdfx &bj.""+allt(thisform.text1.value)+"""
case thisform.combo1.value="期初余额"
tj="qcye &bj. thisform.text2.value"
endcase
use kjkm &&打开kjkm.dbf文件
locate for &tj. &&查找符合条件&tj.的记录, &tj. 表示设定的删除条件
if found( ) &&如果找到符合条件的记录
delete for &tj. &&逻辑删除符合条件的记录
pack &&将逻辑删除的记录彻底删除
messagebox("已删除符合条件的记录",0+48) &&提示已删除
else
messagebox("无符合条件的记录",0+48)
endif
use &&关闭文件
if thisform.combo1.value="期初余额" &&如果Combo1的值是"期初余额"
thisform.text2.value=0.00 &&Text2设置为0
thisform.text2.setfocus &&Text2获得焦点
else
thisform.text1.value=space(0) &&Text1清空
thisform.text1.setfocus
endif
set exact off &&恢复为默认的比较方式
六、其他
表单运行期间,按各项目指定删除条件时,对于向Text1和Text2文本框输入的相应数据,有时希望用鼠标单击这些文本框时能清除已输入的值。要满足这一要求,可以在字符型文本框Text1的Click过程中输入this.value=space(0),在数值型文本框Text2的Click过程中输入this.value=0.00,这样可使操作更加方便。
删除操作完成后,单击“退出(T)”按钮(或按下Alt+T组合键)执行退出(表单从内存中释放)功能,“退出(T)”按钮的Click过程对应的VFP代码为:thisform.release。
主要参考文献
秦鸿霞.管理信息系统数据删除处理的设计与实现——兼论会计科目的删除处理.中国管理信息化,2009;12