巧妙利用排除法处理用友GRP R9导入期末余额为负值
崔瑞瑞(河南省审计厅)
【发布时间:2011年06月13日】
字号:【大】 【中】 【小】


摘要:数据采集转换是使用AO进行审计分析的前提和重要环节,采集转换中的异常处理是这个环节的关键技术。本文对用友GRP R9数据导入AO出现科目期末余额为负值的异常,总结了一套使用排除分析来解决问题的方法。同时,本方法对其他财务核算软件数据导入AO时,出现类似错误的处理和纠错也具有借鉴和推广价值。
       关键词:排除法  导入  期末余额  负值

AO软件在全国各级审计机关已基本普及,作为审计人员实施审计的必备工具,数据采集转换是使用AO进行审计分析的前提和重要环节,采集中的出错处理和异常纠错对不少审计人员来说是一大难题。笔者对用友GRP R9数据导入出现科目期末余额为负的异常,总结了一套很好的处理经验,使用排除法。下面,是对如何采集GRP R9财务数据、转换数据和出错处理的解决方法和技巧。
一、采集数据,三道保险,有备方能无患
该单位使用的财务软件是用友GRP R9,后台数据库是sql server2000,审计人员使用了三种方式获取数据。一种是直接获取财务软件备份数据,第二种是使用取数工具直接连接后台数据库将数据导出成access格式数据,第三种是获取数据库备份文件(.bak)恢复到审计人员计算机中后使用。
在三种方式中,使用第一种方式获取的数据可以直接使用AO自带的模板转换,使用第二种、第三种方式获取的数据需要审计人员对数据进行分析后,使用手工制作模板的方式来导入数据。
二、导入正常,结果诡异,必须手工处理


图1. 导入期末余额为负值
审计人员首先使用AO自带的模板(用友安易GRP_R9年度备份数据)导入数据,导入过程正常,但是导入后的数据中有几个科目年底的余额为负数,特别是111-零余额帐户用款额度,年底余额应该为0,如果为负数肯定是不对的。所以审计人员考虑必须分析后台数据,手工制作模板。
三、层层排除,抽丝剥茧,巧妙解决问题
(一)分析数据结构,做好导入准备
首先,审计人员把从被审计单位后台数据库备份出的文件(.bak文件)恢复到本机的sql server2005系统中,经过分析,四张关键表及数据元素如下:
 

序号

数据资料名称

结构化

非结构化

半结构化

1

GL_Kmxx(科目表)

2

GL_Kmye(科目余额表)

3

GL_Pzml(凭证主表)

4

GL_Pznr(凭证辅表)



(二)规范数据格式,成功导入AO
由于审计人员获取的数据库备份文件包含建账以来所有年度的数据,并且凭证主表和凭证辅表中kjqj(会计期间)字段的格式为“年+月”共六位,而AO导入时必须选择年度字段,所以审计人员在导入AO前首先对数据进行了处理,为保持原始数据的结构不变,单独将2010年的数据生成了四张新表。
处理过程如下:
1.对科目表的处理:
select * into km2010 from [GL_Kmxx] where gsdm='2010'
2.对科目余额表的处理:
select * into ye2010 from [GL_Kmye] where kjnd='2010'
3.对凭证主表的处理:
首先在企业管理器中对pzrq(凭证日期)字段进行处理,将字符型改成日期型。这一步后来证明是必要的,由于凭证日期字段类型是char(10),未对其进行处理前导入AO提示类型不匹配,导入错误,在把pzrq字段改成日期型之后导入正确。
然后对pzh(凭证号)字段进行处理,pzh字段的格式是“记账   1”,对其进行处理将字段左边的“记账”和空格字符去掉,保留数值。
update [GL_Pzml] set pzh=substring(pzh,3,len(pzh)-2)
update [GL_Pzml] set pzh=ltrim(pzh)
update [GL_Pzml] set pzh=rtrim(pzh)
最后将2010年的凭证数据生成一张新表。
select * into pzzb2010 from [GL_Pzml] where left(kjqj,4)='2010'
4.对凭证辅表的处理:
对pzh(凭证号)字段进行处理,pzh字段的格式是“记账   1”,对其进行处理将字段左边的“记账”和空格字符去掉,保留数值。
update [GL_Pznr] set pzh=substring(pzh,3,len(pzh)-2)
update [GL_Pznr] set pzh=ltrim(pzh)
update [GL_Pznr] set pzh=rtrim(pzh)
最后将2010年的凭证数据生成一张新表。
select * into pzfb2010 from [GL_Pznr] where left(kjqj,4)='2010'
处理结束后,开始数据导入。在数据导入的过程中,进行相应的字段对应,凭证主表与凭证辅表的关联字段选择“kjqj(会计期间)+pzh(凭证号)”。
(三)问题依旧存在,必须排除分析
数据导入顺利完成,但在“账表重建”后,打开科目余额表发现仍然存在有几个科目年底的余额为负数,包括111-零余额帐户用款额度。
审计人员打开AO导入后生成的凭证表、科目表、科目余额表,都没有发现任何异常,审计人员重新整理了思路,使用排除法进行了分析。
第一步,分析可能是部分凭证缺失。但经过导入后凭证数量与原始表中凭证数量的比对,发现导入凭证并没有缺失,排除凭证表导入缺失的可能。
第二步,分析可能是科目余额表导入存在错误。对科目余额表导入前后进行了比对,以111-零余额帐户用款额度为例,原始科目余额表中分别记录了期初余额、每月借方发生额和每月贷方发生额。将每月借方发生额和每月贷方发生额进行合计,得到该科目2010年全年的借方发生额和贷方发生额。经过与导入后科目余额表中的借贷方发生额进行比对,发现该科目期初余额和借方发生额导入没有错误,但是贷方发生额比原始表中多出了245800元,这正是导致111科目期末余额为“-245800”的原因。由此,审计人员判断可能是凭证表部分凭证存在重复导入,而凭证表数量在导入前后并没有变化,所以审计人员分析可能是原始凭证表中存在作废的或者多余的凭证未被排除。
第三步,审计人员打开原始凭证表,重新分析其字段,查找凭证类型是否有标志“有效”或者“作废”的字段,发现存在12月31号pzly(凭证类型)字段取值为’GA’的所有凭证,其对应的zy(摘要)字段内容全部都是“**的结转”,分析可能是该部分凭证出现了问题,由于纸质账还没有送到,所以审计人员尝试着把这一部分凭证先去掉,然后重新导入AO。
处理语句为:
DELETE from pzzb2010 where pzly like 'GA'
DELETE from pzfb2010 where pzly like 'GA'
进行了该项处理后,调用刚才数据导入过程生成的模板,成功导入AO,打开“科目明细账审查”,科目的年初余额和年末余额均已正常。将原始表中2009年的年末余额与AO账套中2010年的年初余额进行核对,以及两组数据中2010年的科目发生额进行核对,发现全部吻合,证明账簿导入成功。下图为导入完全正确的科目余额表。

图2. 导入正确的科目余额表
四、结语
笔者结合多年的审计经验认为,该问题的发生不仅与用友GRP R9软件的后台数据存储结构有关,与会计人员的做账习惯也有关系。所以该问题可能是个共性问题,在其他单位,使用别的财务软件也可能会遇到,故笔者总结了该问题的发现过程及处理方法,以备其他审计人员借鉴和参考。(崔瑞瑞)

参考文献:
[1]《计算机审计数据采集与分析技术》,董化礼 刘汝焯,清华大学出版社
[2]《会计信息系统与审计》,乔鹏 李湘蓉,清华大学出版社
【关闭】    【打印】