对会计软件中凭证输入模块的一点看法
武汉华中师大信管系 谢刚
摘要:
凭证的制造和处理是会计任务中最为重要的一环,特别是对会计电算化来说,就显得更重要了,使用软件来实现传统的会计过程,凭证是其他一切处理的基础。没有了凭证就没有会计软件后面的一切。而就凭证这块来说,最为基础也最为重要的当属凭证的输入。而凭证的输入的第一步就是确定此凭证的凭证编号,在会计软件中应该尽量的避免由人工来获取凭证编号,可实施的软件都应该由程序来自动获得凭证编号,由于前面说过,凭证编号不容错误。本文就凭证编号的获取过程进行以下讨论。使用开发工具:PowerBuilder8.0 + MS SQL-Server2000
关键字:
会计软件 凭证输入 凭证编号 PowerBuilder8.0 SQL-Server2000
注释:
一.传统方法的探讨:
通过对目前国内会计软件中凭证输入模块的调查分析,发现大部分软件的凭证输入模块在凭证编号获取上面使用的方法基本分歧。使用方法如下:
在一张新的凭证输入之前,必须先确定这张凭证的凭证编号。普通做法为:由程序检查PPK(日库)记录。如果发现里面有记录,就取其最后一记录的凭证编号,再加上1就为正预备输入的这张凭证的编号;如果PPK库里面没有记录(说明正预备输入的这张凭证为本任务日的第一张凭证),就必须得访问pok&rq(当月月库)记录,如果发现里面有记录,同理取其最后一记录的凭证编号,再加上1就为正预备输入的这张凭证的凭证编号;如果POK库里面没有记录,就说明此天为月初的第一个任务日(但是这种情况一年一共就仅12次)。
二.亲身设计过程中的经验:
我在亲身设计凭证输入程序的时候(用PowerBuilder + MS SQL-Server2000设计),发现上述方法用言语实现起来具有以下不足:
第一:是在代码设计和维护的时候不方便,
第二:更为重要的是在凭证编号的连续性方便不好,比如:从工资模块转过来的工资凭证就不得不用一个新的凭证机制来存放这些凭证,
第三:还有就是浪费了很多系统资源,比如每次添加凭证的时候都要挪动大量的数据库记录,特别是在月初的第一个任务日,在月末也面临同样的问题(月到月末,表中的记录月多,挪动的次数就月多)。
所以,我在实际设计的过程中,摸索出了一种新的思路来处理这个问题,可以很好处理上述三个问题,觉得这个思路有必要拿出来和大家共同商讨,具体实现思路如下:
第一:另外新建一个数据表(表名为HQPZBH):
字段名称分别为:ID,PZBH,字段属性分别为:integer,char型。建立好后进行附一组值(最好用程序来附值)。ID字段附值为1,PZBH字段为0000(依据具体的要求进行选择位数,如000000等)。
用程序实现代码如下(仅为参考,依据具体的编程言语变换方式):
(连接数据库语句省略,以下同)
insert into HQPZBH(hqpzbh.id,hqpzbh.pzbh)
values(1,0000) ;
第二:每次在输入新的凭证之前获取该凭证编号的思路:
数据表HQPZBH里面一直只要一条记录,ID一直为1,PZBH是一直为库里面的最后一张凭证的编号。每次进行输入凭证获取凭证编号的时候就访问此数据表,读取表中PZBH字段的值,再加1就OK了。
用程序实现的代码如下(参考):
integer nowpzbh;(定义存储预备输入的这张凭证的凭证编号的变量)
//在表hqpzbh中获取pzbh字段的值,并放于nowpzbh变量中
select hqpzbh.pzbh
into :nowpzbh
from hqpzbh
where hqpzbh.id=1;
//留意:本表中一直只要一条记录
nowpzbh = nowpzbh+1
//此值自加1后就成为了即将输入的凭证的凭证编号了
第三:保证数据表HQPZBH里面的PZBH字段的值一直是最后一张凭证的编号。
那么就要求我们在每张凭证输入完毕并经过检验保存的同时,用此凭证编号来替代数据表HQPZBH里面的原有的PZBH字段的值。
用程序实现的代码如下(参考):
假设存储刚保存的那张凭证的凭证编号的变量为nowpzbh
update hqpzbh
set hqpzbh.pzbh=:nowpzbh
where hqpzbh.id=1;
//表中只要一条记录。并且其id字段的值一直都为1
三、总结
我认为这个方法比较好理解和实现,设计和维护代码也比较方便。同时对于那些特殊凭证的处理也极为方便,比如:工资凭证的自动转入凭证库时就不必要再使用传统软件的那种“特定区段的凭证编号”方式了。就可以实现凭证库中凭证编号的真正意义上的连续了。还有就是对数据库中数据量相当大时,这种方式相当占优势,由于它每输入一张凭证只需求访问二次数据库的数据表,更为重要的是这个数据表只要一条数据,访问时不需求任何的挪动时间。避免了传统方式的凭证编号的寻觅(特别是月初的第一个任务日和月尾的数据大量挪动)。大大节约了访问数据库的时间开销和空间开销。