2016 8 月,曲靖市审计局在对某县县长离任进行经济责任审计时,采集到某单位用友A++财政财务管理软件(V 5 . 2 )备份XML财务数据,采用AO 2011 数据采集模板和SQL数据库转换等多种方法,始终无法导入A 02011 系统。

笔者从网上查询得知,XML是可扩展标记语言(Extensible Markup Language)的缩写,意为可扩展置标语言、可扩展标记语言或可延伸标示语言,是一种新兴的面向Internet应用并用于描述数据的与平台无关的标记语言。它可以有效描述半结构化,甚至是非结构化的数据,具有操作简便、跨平台、存储与显示分离、易于处理等特点,也是当今处理分布式结构信息的有效工具。目前用友、金蝶等部分财务软件已开始使用XML进行数据传输。有网友介绍用Microsoft Excel 2007 进行XML文件数据采集的方法,笔者试了一下,采集转换后的数据不仅没有数据表名称,同时转换后的数据文件过大,处理过程复杂,不利于操作,于是决定放弃这种方法。

偶然间,笔者想到既然能用Microsoft Excel 2007 电子表格处理XML文件,那么也许Microsoft Access 2007 数据库也能处理XML数据,于是试了一下,果然成功,且过程十分简单,现将该方法介绍如下。

一、利用Microsoft Access 2007 数据导入功能将被审计单位提供的XML格式财务数据导入Access,还原成一个完整的财务数据库

1 、在Microsoft Access 2007 中新建一个Access数据库XXGA.accdb,鼠标右键点击右边“表 1 :表”→“导入(M)” →“XML文件(M)”,选择要导入的XML文件“公共档案类”,将其包含的文件全部导入Access数据库XXGA.accdb。

2 、点击“创建”→“表”新建表,按(一)步骤导入“总账类”全部文件。

二、Microsoft Access 2007 数据库升迁

XML数据转换完成后,利用Microsoft Access 2007 据库升迁功能,将Microsoft Access 2007 数据库XXGA.accdb升迁到SQL Server 2008 R 2 中。具体步骤如下:

1 、更改安全设置。点击“安全警告 已禁用了数据库的某些内容”后的“选项”按钮,点击“启用此内容”更改安全设置。

2 、点击工具栏上的“SQL Server”按钮,启动数据库升迁向导。

3 、选择(或输入)SQL数据库服务器名称、登录账户、密码和升迁后的SQL Server数据库名称(XXGA 2014 )。

4 、按>>按钮,将可用表全部选择到“导出SQL Server”中,点击“下一步”完成数据升迁。

需要注意的是,在升迁Microsoft Acess 2007 数据库前要关闭所有已打开的数据表,否则会出现“任何数据库对象处于打开状态时’升迁向导’均无法运行。请关闭打开的对象并重试”如下错误提示信息:

三、SQL数据整理与AO数据采集

完成Access数据库升迁后,即可启动SQL Server 2008 R 2 ,对升迁后的数据库XXGA 2014 进行数据整理。

科目编码重复与各级科目余额不全,是造成AO账表重建失败的主要原因之一。因此SQL数据整理的重点是检查科目表、科目余额表有无编码重复情况,科目余额表各级科目余额是否齐全,凭证表、余额表借贷是否平衡;以及时间、金额等字段类型是否正确。有关数据整理语句如下:

(一)科目表

select 科目编号,科目名称,余额方向 into XXGA 2014 .dbo.审计_会计科目表 from XXGA 2014 .dbo.会计科目

(三)凭证表

SELECT 会计年度,会计期间号 as 会计期间,left(记账凭证日期, 4 )+'-'+substring(记账凭证日期, 5 , 2 )+'-'+right(记账凭证日期, 2 ) as 凭证日期, case when 记账凭证类型编号='JZ' then '记账' end as 凭证类型,记账凭证编号 as 凭证编号,记账凭证行号 as 分录号,记账凭证摘要 as 摘要,科目编号, 辅助项 1 编号 as 辅助核算代码,cast(借方本币金额 as decimal( 18 , 2 )) as 借方金额,cast(贷方本币金额 as decimal( 18 , 2 )) as 贷方金额,附件数,制单人,审核人,记账人,记账标志,作废标志 into XXGA 2014 .dbo.审计_会计凭证表 FROM XXGA 2014 .dbo.记账凭证 where 记账标志= 1 and 作废标志= 0 order by 会计年度,会计期间号,left(记账凭证日期, 4 )+'-'+substring(记账凭证日期, 5 , 2 )+'-'+right(记账凭证日期, 2 )

检查凭证表平衡性

SELECT 会计年度,sum(借方金额) as 借方发生额,sum(贷方金额) as 贷方发生额,sum(借方金额)-sum(贷方金额) as 差额 from XXGA 2014 .dbo.审计_会计凭证表 group by 会计年度

(四)余额表

1 、原始数据转换

SELECT 会计年度,会计期间号 as 会计期间,科目编号,case when 期初余额方向='借' then cast(期初本币余额 as decimal( 18 , 2 )) else ' 0 . 00 ' end as 期初借方余额,case when 期初余额方向='贷' then abs(cast(期初本币余额 as decimal( 18 , 2 ))) else ' 0 . 00 ' end as 期初贷方余额 into #科目余额 FROM XXGA 2014 .dbo.科目余额及发生额 where 会计期间号=' 1 ' order by 会计年度,会计期间号,科目编号

2 、检查原始余额表平衡性

select 会计年度,sum(期初贷方余额) as 期初借方余额,sum(期初贷方余额) as 期初贷方余额,sum(期初借方余额)- sum(期初贷方余额) as 差额 from #科目余额 group by 会计年度

3 、查看科目编码长度及重复情况

select distinct 会计年度,LEN(科目编号) as 码长 from #科目余额 group by 会计年度,科目编号 order by 会计年度,LEN(科目编号) ---科长分别 为目 6 8 10 12 4 级,无 1 级科目

select distinct 会计年度,科目编号,count(科目编号) as 次数 from #科目余额 group by 会计年度,科目编号 having count(科目编号)> 1 order by 会计年度,科目编号

4 .1查询末级明细科目,生成 5 级科目余额

SELECT 会计年度,科目编号,sum(期初借方余额) as 期初借方余额,sum(期初贷方余额) as 期初贷方余额 into XXGA 2014 .dbo.审计_科目余额表 FROM #科目余额 group by 会计年度,科目编号 order by 会计年度,科目编号

4 .2汇总 5 级科目,生成 4 级科目余额

insert into XXGA 2014 .dbo.审计_科目余额表 select 会计年度,left(科目编号, 10 ) as 科目编号,sum(期初借方余额) as 期初借方余额,sum(期初贷方余额) as 期初贷余额 from XXGA 2014 .dbo.审计_科目余额表 where len(科目编号)= 12 group by 会计年度,left(科目编号, 10 ) order by 会计年度,left(科目编号, 10 )

4 .3汇总 4 级科目,生成 3 级科目余额

insert into XXGA 2014 .dbo.审计_科目余额表 select 会计年度,left(科目编号, 8 ) as 科目编号,sum(期初借方余额) as 期初借方余额, sum(期初贷方余额) as 期初贷余额 from XXGA 2014 .dbo.审计_科目余额表 where len(科目编号)= 10 group by 会计年度,left(科目编号, 8 ) order by 会计年度,left(科目编号, 8 )

4 .4汇总 3 级科目,生成 2 级科目余额

insert into XXGA 2014 .dbo.审计_科目余额表 select 会计年度,left(科目编号, 6 ) as 科目编号,sum(期初借方余额) as 期初借方余额, sum(期初贷方余额) as 期初贷余额 from XXGA 2014 .dbo.审计_科目余额表 where len(科目编号)= 8 group by 会计年度,left(科目编号, 6 ) order by 会计年度,left(科目编号, 6 )

4 .5汇总 2 级科目,生成 1 级科目余额

insert into XXGA 2014 .dbo.审计_科目余额表 select 会计年度,left(科目编号, 4 ) as 科目编号,sum(期初借方余额) as 期初借方余额,sum(期初贷方余额) as 期初贷余额 from XXGA 2014 .dbo.审计_科目余额表 where len(科目编号)= 6 group by 会计年度,left(科目编号, 4 ) order by 会计年度,left(科目编号, 4 )

4.6检查新生成的余额表平衡性

select 会计年度,sum(期初借方余额) as 期初借方余额,sum(期初贷方余额) as 期初贷方余额,sum(期初借方余额)-sum(期初贷方余额) as 差额 from XXGA 2014 .dbo.审计_科目余额表 where len(科目编号)= 4 group by 会计年度 order by 会计年度

4.7检查科目编码重复情况

select distinct 会计年度,科目编号,count(科目编号) as 次数 from XXGA 2014 .dbo.审计_科目余额表 group by 会计年度,科目编号 having count(科目编号)> 1 order by 会计年度,科目编号

(六)辅助核算信息

由于各单位辅助核算设置不一致,因此难形成统一的转换脚本。以下脚本仅供参考。

6.1辅助信息

SELECT distinct 档案名称 as 辅助类别,档案值编码 as 辅助代码,档案值名称 as 辅助名称 into XXGA 2014 .dbo.审计_辅助信息表 FROM XXGA 2014 .dbo.自定义档案项 a left join XXGA 2014 .dbo.自定义档案值 b on a.档案编码=b.档案编码 order by 档案值编码

6.2辅助余额表

SELECT 会计年度,会计期间号,科目编号,辅助项编号 as 辅助代码,期初余额方向, cast(期初本币余额 as decimal( 18 , 2 )) as期初余额 into 辅助余额表 FROM XXGA 2014 .dbo.科目余额及发生额

6.3辅助凭证

SELECT 会计年度,会计期间号,cast(substring(记账凭证日期, 1 , 4 )+'-'+substring(记账凭证日期, 5 , 2 )+'-'+substring(记账凭证日期, 7 , 2 ) as DATE) as 记账凭证日期,记账凭证类型编号,记账凭证编号,记账凭证行号,科目编号,记账凭证摘要,辅助项编号, cast(借方本币金额 as decimal( 18 , 2 )) as 借方金额, cast(贷方本币金额as decimal( 18 , 2 )) as贷方金额,附件数,制单人,审核人,记账人 into 辅助凭证表 FROM XXGA 2014 .dbo.记账凭证 where 记账标志= 1 and 作废标志= 0

整理完成后即可利用AO 2011 系统辅助导入功能将科目表、凭证表、余额表及辅助核算信息导入AO系统进行账表重建,供AO审计分析。( 龚泽平

主办单位:中华人民共和国审计署办公厅  技术支持:审计署计算机技术中心  网站电话:010-62150912\0929\0990
地址:北京市丰台区金中都南街17号(邮编:100073)  网站标识码 bm26000001 京ICP备19011981号 京公网安备 11010602060171