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审计分析。(
龚泽平
)