用友R9-GL财务数据导入AO2011的解决方法

发布日期:2017-10-23 信息来源: 浏览次数: 字体:[ ]

  日前,在对某乡镇单位的审计中,审计人员发现该单位所使用的财务软件为用友R9-GL(AC9.7.1) FOR  SqlServer网络版,该系统由上级区财政部门统一部署,各乡镇单位从客户端登录使用,后台数据库为SqlServer。由于该财务系统部署时间较早,且历经数次维护和升级,系统数据库结构发生略微变化,审计人员未能在AO2011提供的数据转换模板库中找到可用的转换模板。在通过对系统数据库结构的深入分析的基础上,审计人员编写标准化的SQL脚本抽取出凭证表、科目表等标准表,运用AO2011的财务软件数据库数据导入功能,将该财务备份数据快速、批量的导入AO2011。

  一、数据结构分析及注意事项

  审计人员根据数据库字典结合现场查看、问询维护人员等方法,总结出可用数据表7张,分别如下:

  (1)科目信息表 GL_Kmxx

  (2)凭证主表GL_Pzml

  (3)凭证附表GL_Pznr

  (4)余额表GL_Yeb

  (5)辅助单位信息表(系统默认的辅助核算)PubKszl

  (6)辅助个人信息表(系统默认的辅助核算)Pubzyxx

  (7)辅助信息表(自行设置的辅助核算)GL_Fzxzl

  上述表的主要属性及表间关系如下图1所示:

  根据数据结构发现结合实际情况发现,本次数据转化存在以下几点注意事项:

  (1)辅助余额表的生成。该财务软件的辅助核算信息在余额表GL_Kmxx中可以找到,而辅助核算的余额在表GL_Yebz中进行记录。

  (2)辅助核算的代码存在重复的现象。比如辅助核算单位的代码与辅助核算人员的代码存在重复现象,辅助核算的代码重复将直接导致无法将财务数据导入AO2011。

  二、SQL数据处理的抽取脚本

  (1)生成科目表及科目余额表

  使用科目代码将GL_Kmxx和GL_Yeb进行连接生成科目余额表,该表在导入AO2011的过程中可以当作科目信息表和科目余额表使用。SQL语句如下:

 

  select a.科目代码,a.会计年度,a.科目名称,a.余额方向,sum(a.年初借方) 科目年初借方,sum(a.年初贷方) 科目年初贷方

from

(select

ltrim(rtrim(科目信息表.kmdm)) 科目代码,科目信息表.gsdm 会计年度,

ltrim(rtrim(科目信息表.kmmc)) 科目名称,科目信息表.yefx 余额方向,

余额信息表.fzdm3 辅助_部门核算代码,余额信息表.fzdm2 辅助_人员核算代码,

余额信息表.fzdm4 辅助_4,余额信息表.fzdm5 辅助_5,

余额信息表.ncj 年初借方,余额信息表.ncd 年初贷方

from  (select * from GL_Kmxx where gsdm=2016) 科目信息表

left join (select * from GL_Yeb where GL_Yeb.kjnd=2016) 余额信息表

 on 科目信息表.kmdm=余额信息表.kmdm) a

 group by a.科目代码,a.会计年度,a.科目名称,a.余额方向

 

    执行语句,生成的余额表格式如下图2所示:

  (2)生成凭证表及辅助凭证表

  通过凭证号和凭证月份将GL_Pzml和GL_Pznr连接起来,生成凭证表,该表在导入AO2011的过程中可以作为凭证表和辅助凭证表使用。这里为了避免辅助代码的重复,在辅助代码的前面添加相应的前缀。,SQL语句如下:

select

substring(GL_Pznr.kjqj,1,4) 会计年度,

convert(int,ltrim(rtrim(substring(GL_Pznr.kjqj,5,6)))) 会计月份,

convert(int,ltrim(rtrim(substring(GL_Pznr.pzh,5,8)))) 凭证号,

GL_Pznr.flh 分录号,GL_Pznr.zy 摘要,

GL_Pznr.kmdm 科目代码,GL_Pzml.pzrq 凭证日期,

GL_Pznr.jdbz 借或贷,GL_Pznr.je 金额,

辅助_部门核算=case when len(GL_Pznr.wldm)>1

 then 'dw'+GL_Pznr.wldm else '' end,

辅助_人员核算=case when len(GL_Pznr.zydm)>1

 then 'ry'+GL_Pznr.zydm else '' end,

辅助=case when LEN(GL_Pznr.fzdm4)>1

 then 'f4'+GL_Pznr.fzdm4 else '' end,

辅助=case when LEN(GL_Pznr.fzdm5)>1

 then 'f5'+GL_Pznr.fzdm5 else '' end

from GL_Pznr INNER JOIN GL_Pzml

on GL_Pznr.pzh=GL_Pzml.pzh and GL_Pznr.kjqj=GL_Pzml.kjqj

where GL_Pznr.kjqj in

('201601','201602','201603','201604','201605','201606',

'201607','201608','201609','201610','201611','201612');

    执行语句,生成的余额表格式如下图3所示:

  (3)生成辅助信息表及辅助余额表

  根据GL_Yeb及GL_Kmxx生成辅助余额表,SQL语句如下:

select * from

 (select

ltrim(rtrim(科目信息表.kmdm)) 科目代码,

科目信息表.gsdm 会计年度,ltrim(rtrim(科目信息表.kmmc)) 科目名称

,科目信息表.yefx 余额方向,

辅助_部门核算代码=case when len(余额信息表.fzdm3)>1

then 'dw'+ 余额信息表.fzdm3 else '' end,

辅助_人员核算代码=case when LEN(余额信息表.fzdm2)>1

then 'ry'+ 余额信息表.fzdm2 else '' end,

辅助_4=case when LEN(余额信息表.fzdm4)>1

then 'f4'+余额信息表.fzdm4 else '' end ,

辅助_5=case when LEN(余额信息表.fzdm5)>1

then 'f5'+余额信息表.fzdm5 else '' end ,

余额信息表.ncj 年初借方,余额信息表.ncd 年初贷方

from  (select * from GL_Kmxx where gsdm=2016) 科目信息表

 left join (select * from GL_Yeb where GL_Yeb.kjnd=2016) 余额信息表

 on 科目信息表.kmdm=余额信息表.kmdm) b

 where LEN(辅助_部门核算代码)>1 or len(辅助_人员核算代码)>1

 or len(辅助_4)>1 or len(辅助_5)>1

   

  辅助信息表直接由辅助单位信息表(系统默认的辅助核算)PubKszl、辅助个人信息表(系统默认的辅助核算)Pubzyxx、辅助信息表(自行设置的辅助核算)GL_Fzxzl构成即可。

  三、导入AO2011

  笔者根据审计署计算机中级教材《AO2011实用手册》中的“第5章采集转换”中的“5.1.3财务软件数据库数据采集转换”的步骤和图解,将上述生成数据导入AO2011,并保存模板供以后需要数据转换时使用。(扬州市江都区 董元元)

【打印本页】【关闭窗口】

分享到:
0

Produced By 大汉网络 大汉版通发布系统