浅谈用友安易财务系统辅助账的采集方法与技巧
姚海峰(湖北省宜都审计局)
【发布时间:2014年03月14日】
字号:【大】 【中】 【小】
    在对某乡镇长经济责任审计项目进行数据采集时,笔者了解到乡镇总预算账使用的是用友安易GRP_R9V9.7财务软件,后台数据库为SqlServer,在使用AO提供的用友安易GRP_R9V9.7数据库备份模板进行数据转换后发现无法查看辅助核算信息。由于被审计单位财务软件科目表中只有一级科目,收支及往来均使用辅助核算,因此不能查看辅助核算信息将对审计人员对电子帐的审查造成极大的不便。笔者利用SQL语句将乡镇总预算账中的辅助核算科目转换为会计科目,通过数据库采集的方式转换生成包含往来及功能分类明细科目的电子帐套,使审计人员能更清晰、直观地查看电子数据。下面简要介绍采集用友安易GRP_R9V9.7财务软件辅助账的方法,供读者参考。
    
    一、寻找所需基础数据表
    用友安易GRP_R9V9.7财务软件后台数据库中数据表多达700多张,若采用逐个查看的方式查找所需基础数据表,将耗费大量的时间及精力,审计效率难以提高。笔者通过使用SqlServer游标工具,剔除了大量无数据记录或记录较少的数据表,同时结合以往对用友软件数据采集的经验(科目表、凭证表、余额表均以GL开头),在短时间内查找出了采集数据所需基础数据表。具体包括以下六张表:
    1.GL_Kmxx科目表;2.GL_Yeb余额表;3.GL_Pzml凭证主表;4.GL_Pznr凭证明细表;5.GL_Fzxzl功能分类科目表;6.PubKszl往来科目表。
    
    二、确定实行辅助核算的会计科目及科目编码规则
    1.确定实行辅助核算的会计科目。通过观察以上基础数据表包含的字段,发现凭证明细表的“wldm”字段、余额表的“fzdm3”字段为往来辅助核算编码字段,凭证明细表及余额表的“fzdm4”字段为功能分类辅助核算编码字段。利用SQL查询查找凭证明细表及余额表中上述往来辅助核算编码及功能分类辅助核算编码为非空的科目,即为实行辅助核算的科目。参考语句如下:
     select kmdm from GL_Pznr where replace(wldm,' ','') not like '' group by kmdm order by kmdm
     go
     select kmdm from GL_Pznr where replace(fzdm4,' ','') not like '' group by kmdm order by kmdm
     go
     select kmdm from GL_Yeb where replace(fzdm3,' ','') not like '' group by kmdm order by kmdm
     go
     select kmdm from GL_Yeb where replace(fzdm4,' ','') not like '' group by kmdm order by kmdm
     执行上述查询,可以看出包含往来辅助核算的包括“104”、“131”、“203”、“303”4个会计科目,包含功能分类辅助核算的包括“401”、“501”2个会计科目。
    2.确定科目编码规则。利用SQL查询确定会计科目、往来科目、功能分类科目的编码规则,参考语句如下:
     select len(fzdm) from GL_Fzxzl group by len(fzdm)
     go
     select len(dwdm) from PubKszl group by len(dwdm)
     go
     select len(kmdm) from GL_Kmxx group by len(kmdm)
    执行查询可知,会计科目的编码规则为“3-2”(只有“402”科目为两级科目,其余均为一级科目),往来科目的编码规则为“3”,功能分类科目的编码规则为“3-2-2-2”。根据“科目编码=原科目代码+辅助核算类型代码”的辅助帐构成原理,可以确定新的科目编码规则为“3-3-2-2-2”(注:“402”科目为“3-2”)。
    
    三、整理数据表
    由于基础数据表中包含很多多余的字段,而且字段中包含的空格会影响查询的准确性,因此先对数据表进行整理,剔除多余字段及字段中的空格,并将字段名称汉化。下面以2013年度数据为例,进行具体介绍。
    1.整理科目表。参考语句如下:
     SELECT replace(kmdm,' ','') AS 科目编码, replace(kmmc,' ','') AS 科目名称 INTO 科目表
     FROM GL_Kmxx where replace(gsdm,' ','')=2013
     ORDER BY kmdm
    2.整理余额表。参考语句如下:
     SELECT replace(kjnd,' ','') AS 会计年度, replace(kmdm,' ','') AS 科目编码, 借贷方向=case when kmdm Like '[1,5]%' then '借' else '贷' end,
     期初余额=case when kmdm Like '[1,5]%' then ncj-ncd else ncd-ncj end,
     replace(fzdm3,' ','') AS 往来编码, replace(fzdm4,' ','') AS 功能编码 INTO 余额表
     FROM GL_Yeb
     WHERE replace(kjnd,' ','')=2013 and
     ((case when kmdm Like '[1,5]%' then ncj-ncd else ncd-ncj end)>0.01 Or (case when kmdm Like '[1,5]%' then ncj-ncd else ncd-ncj end)<-0.01)/*剔除因浮点数问题造成的误差数据*/
     ORDER BY kjnd,kmdm
    3.整理凭证表。将凭证主表及明细表合并为凭证表,参考语句如下:
     SELECT replace(GL_Pznr.pzh,' ','') AS 凭证编号,replace(pzrq,' ','') AS 凭证日期,replace(kmdm,' ','') AS 科目编码,replace(zy,' ','') AS 摘要, replace(jdbz,' ','') AS 借贷标志,
     je AS 金额,replace(wldm,' ','') AS 往来编码, replace(fzdm4,' ','') AS 功能编码, Left(GL_Pznr.kjqj,4) AS 会计年度 INTO 凭证表
     FROM GL_Pznr INNER JOIN GL_Pzml ON (replace(GL_Pznr.pzh,' ','') = replace(GL_Pzml.pzh,' ','')) AND (replace(GL_Pznr.kjqj,' ','') = replace(GL_Pzml.kjqj,' ',''))
     where Left(GL_Pznr.kjqj,4)=2013
     ORDER BY Left(GL_Pznr.kjqj,4)
    4.整理往来科目表。参考语句如下:
     SELECT replace(dwdm,' ','') AS 往来科目编码,replace(gsdm,' ','') AS 科目年度,replace(dwmc,' ','') AS 往来科目名称 INTO 往来科目表
     FROM PubKszl where replace(gsdm,' ','')=2013
    5.整理功能分类科目表。参考语句如下:
     SELECT replace(fzdm,' ','') AS 功能分类代码,replace(fzmc,' ','') AS 功能分类名称 into 功能分类科目表
     FROM GL_Fzxzl
     WHERE gsdm not like ' '
     GROUP BY fzdm,fzmc
     ORDER BY 功能分类名称
    
    四、构造包含辅助核算科目的数据表
    1.构造新凭证表,参考语句如下:
     select kmbm=case
     when 科目编码 like '104%' then 科目编码 + 往来编码
     when 科目编码 like '203%' then 科目编码 + 往来编码
     when 科目编码 like '401%' then 科目编码 + 功能编码
     when 科目编码 like '501%' then 科目编码 + 功能编码
     else 科目编码 end,凭证编号,凭证日期,摘要,借贷标志,金额,会计年度
     into 新凭证表 from 凭证表
    2.构造新余额表,参考语句如下:
     select kmbm=case
     when 科目编码 like '104%' then 科目编码 + 往来编码
     when 科目编码 like '131%' then 科目编码 + 往来编码
     when 科目编码 like '203%' then 科目编码 + 往来编码
     when 科目编码 like '303%' then 科目编码 + 往来编码
     when 科目编码 like '401%' then 科目编码 + 功能编码
     when 科目编码 like '501%' then 科目编码 + 功能编码
     else 科目编码 end,借贷方向,期初余额,会计年度
     into 新余额表 from 余额表
    3.构造新科目表。
    (1)由“原科目编码+辅助核算科目编码”生成临时科目表1,参考语句如下:
     select 科目编码,科目名称 into #科目表1 from 科目表
     union
     select '104'+往来科目编码 as 科目编码,往来科目名称 as 科目名称 from 往来科目表
     union
     select '131'+往来科目编码 as 科目编码,往来科目名称 as 科目名称 from 往来科目表
     union
     select '203'+往来科目编码 as 科目编码,往来科目名称 as 科目名称 from 往来科目表
     union
     select '303'+往来科目编码 as 科目编码,往来科目名称 as 科目名称 from 往来科目表
     union
     select '401'+功能分类代码 as 科目编码,功能分类名称 as 科目名称 from 功能分类科目表
     union
     select '501'+功能分类代码 as 科目编码,功能分类名称 as 科目名称 from 功能分类科目表
    (2)查询新凭证表及新余额表中包含的科目生成临时科目表2,参考语句如下:
     select distinct kmbm into #科目表2 from 新凭证表
     union select kmbm from 新余额表
    (3)提取临时科目表2中本级及上一级的科目代码,生成临时科目表3,参考语句如下:
     select kmbm=substring(b.kmbm,1,12) into #科目表3 from #科目表2 b where len(kmbm)<>5
     union
     select kmbm=substring(b.kmbm,1,10) from #科目表2 b where len(kmbm)<>5
     union
     select kmbm=substring(b.kmbm,1,8) from #科目表2 b where len(kmbm)<>5
     union
     select kmbm=substring(b.kmbm,1,6) from #科目表2 b where len(kmbm)<>5
     union
     select kmbm=substring(b.kmbm,1,3) from #科目表2 b where len(kmbm)<>5
     union
     select kmbm=substring(b.kmbm,1,5) from #科目表2 b where len(kmbm)=5
     union
     select kmbm=substring(b.kmbm,1,3) from #科目表2 b where len(kmbm)=5
    (4)从临时科目表1中挑选出科目代码在临时科目表3中的记录生成新科目表并删除临时科目表,参考语句如下:
     select 科目编码,科目名称 into 新科目表 from #科目表1 where 科目编码 in(select kmbm from #科目表3) order by 科目编码
     go
     drop table #科目表1,#科目表2,#科目表3
    
    五、辅助导入
    将以上整理后的新科目表、新余额表和新凭证表,通过财务软件数据库采集方式导入AO,然后利用辅助导入向导按照提示输入即可完成。需要注意的是,由于“402”科目的编码规则与其他科目编码规则不同,因此在科目设置时,应选择“不规则”,将科目长度规则设置为“3-3-2-2-2”,点击“生成”,将“402”科目长度规则设置为“3-2”即可。(姚海峰)
【关闭】    【打印】