编写VB小程序解决OA(2008版)主题代码错误问题_审计方法论文

编写VB小程序解决OA(2008版)科目代码断层问题,本文主要内容关键词为:断层论文,科目论文,代码论文,程序论文,VB论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。

一、AO重建账表异常现象及其原因

Y市审计局在对该市住房公积金财务数据进行整理并导入AO的过程中,审计组发现凭证表导入AO以后,所有科目凭证发生记录数全部为0。

由于AO重建账表是基于末级记账的算法,如果被审计单位的日常财务活动并没有从会计科目末级记账,那么AO在重建账表以后就会存在没有数据或者借贷不平等问题。经分析,导致这一现象的原因有两个方面:一是被审计单位未以末级科目记账,但是审计组在检查以后发现该单位记账不存在问题。二是科目代码出现了断层。何为断层?比如科目代码表里面一共有3级科目,科目编码规则为3,2,2。假设末级科目是1130201,按照常理,在其之上应该有11302、113这两个上级科目代码。如果不存在这两个科目代码或者不完全存在这两个科目代码,那么这个科目表就出现了断层。

为了验证上述思路,审计组对AO(2008)的后台ACCESS数据库进行检查分析,发现会计科目表中的“上级科目”编码字段,是在点击过“账簿重建”按钮之后,根据科目设置中的科目码级次长度规则和科目编码自动生成的。而在此过程中,AO并没有校验其自动生成的上级科目代码是否存在于原科目代码表中。通过运行SQL语句进一步检查,我们发现了2级科目(即长度为5的科目)和6级科目(即长度为19的科目),分别存在1个及19个共20个断层,即其上级科目编码并不存在于原始科目编码表中。

二、编写VB小程序解决存在问题

在常规数据整理中,利用SQL语句虽然能查出断层的存在,但是断层科目并不一定就是有规律可循,因为断层科目有时候有发生额,有时候没有发生额,这样在AO(2008)中处理起来比较麻烦。

为了解决上述问题,审计组利用VB6.0开发了一个科目清洗小软件。小软件通过调用AO2008账套对应的后台ACCESS数据库,检查会计科目表是否存在断层,如果有断层,列出其科目代码和科目名称。当断层科目没有凭证库的发生额时,软件会提示是否直接删除;当断层科目有凭证库发生额时,软件会提示逐级补充其上层科目及名称。同时软件还提供了校验功能,以确保科目树补充的完整性。

科目清洗软件核心代码(有删截,仅供示例)如下:

For i=0 To List2.ListCount-1′需要清洗的科目列表

Dim j As Integer

j=11

While j>1

j=j-1

If level1(j)= Len(List2.List(i))And level1(j-1)<Len(List2.List(i))Then

Dim sqlstr As String

sqlstr= "select * from凭证库where科目编码=′" & List2.List(i)&"′"

Dim cn As New ADODB.Connection

Dim rs As New ADODB.Recordset

cn.Open("Provider=Microsoft.Jet.Oledb.4.0;

persist Security Info=false; Data Source=" & ztpath)

rs.Open sqlstr,cn,adOpenKeyset,adLockOptimistic

If rs.RecordCount = 0 Then

Dim y As Integer

y=MsgBox("需要删除"& List2.List(i)&"科目吗?该科目在凭证表中没有发生额",vbYesNo)

If y = vb Yes Then

Dim rs1 As New ADODB.Recordset

Dim cn1 As New ADODB.Connection

cn1.Open("Provider=Microsoft.Jet.Oledb.4.0;persist SecurityInfo=false; Data Source="& ztpath)

rs1.Open("delete*from会计科目表where科目编码=′"& List2.List(i))& "′",cn1,adOpenKeyset,adLockOptimistic

End If

cn1.Close

Else

While j >1

j=j-1′判断是否添加

sqlstr="select count(科目编码)from会计科目表where科目编码=′"& Left(CStr(List2.List(i)),level1(i))&"′"

Dim rs3 As New ADODB.Recordset

Dim cn3 As New ADODB.Connection

cn3.Open("Provider=Microsoft.Jet.Oledb.4.0;persist Security Info=false; Data Source="& ztpath)

rs3.Open sqlstr,cn3

If rs3.Fields(0)<= 0 Then

Dim x As Integer

x=MsgBox(Left(CStr(List2.List(i)),level1(j))&"科目方向是借吗?",vbYesNo)

If x =vbYes Then

cn1.Open("Provider=Microsoft.Jet.Oledb.4.0;persist Security Info=false; Data Source="& ztpath)

sqlstr="insert into会计科目表(科目编码,科目名称,余额方向,上级科目编码)values(′"& Left(CStr(List2.List(i)),level1(j))&"′,′断层补充"& Left(CStr(List2.List(i)),level1(j))&"′,1,′"& Left(CStr(List2.List(i)),level1(j-1))&"′)"

Else

sqlstr="insert into会计科目表(科目编码,科目名称,余额方向,上级科目编码)values(′"& Left(CStr(List2.List(i)),level1(j))&"′,′断层补充"& Left(CStr(List2.List(i)),level1(j))&"′,-1,′" & Left(CStr(List2.List(i)),level1(j-1))&"′)"

End If

cn1.Close

Dim rs2 As New ADODB.Recordset

Dim cn2 As New ADODB.Connection

If cn2.State <> adStateOpen Then

cn2.Open("Provider=Microsoft.Jet.Oledb.4.0;

persist Security Info=false; Data Source=" & ztpath)

End If

三、科目表断层清洗小工具实践效果

审计组利用自己开发的小软件对该Y市住房公积金的财务账套进行了科目断层处理。

断层清理完成以后,审计组接着在AO2008中进行了该单位的财务账表重建。

账表重建完成后,科目代码树图

成功导入公积金市区财务账后,将电子数据与纸质账簿进行核对,二者相符。利用相同的方法,对其他分中心的财务账进行了同样的整理,保障了现场审计实施的正常进行。

利用VB开发的科目断层清洗工具,依托于AO(2008)的账表重建功能,实现了断层科目的清洗或补充,使得科目代码表完整,为数据顺利导入AO实施审计提供了可能。建议AO2008之后的升级版中,可以将科目代码表的断层校验功能做成图形化的界面直接嵌入AO中,这样可以省去不少麻烦。科目代码断层清洗小工具,适用于科目代码表比较庞大的被审计项目(如社保、公积金、财政等)。

标签:;  ;  ;  

编写VB小程序解决OA(2008版)主题代码错误问题_审计方法论文
下载Doc文档

猜你喜欢