日前,在对某市直单位预算执行审计中,审计人员发现该单位所使用的财务软件为"畅捷通T+"财务软件网络版,版本号为12.3,后台数据库为MS SQLServer2008。审计人员未能在AO2011提供的数据转换模板库中找到可用的转换模板,在通过对系统数据库结构的深入分析的基础上,审计人员编写标准化的SQL脚本抽取出凭证表、科目余额表标准表,运用AO2011的财务软件数据库数据导入功能,将该财务备份数据快速导入AO2011。
一、数据结构分析及注意事项
一般情况下存储凭证的表的行数在整个数据库中应该是比较多的,较为简单的是先通过“查看”菜单—“对象资源管理器详细信息”—表—查看“行计数”—行数降序排列,能够直观的看到数据量较大的若干表,然后通过查看内容和数据字典分析,判断出凭证主表和分录表。在该数据库中,通过分析发现GL_Doc为凭证主表、GL_Entry为凭证分录、GL_Journal为凭证的辅助明细账、AA_Account为科目表、GL_AccountPeriodBegin为科目期初余额表。
根据数据结构发现结合实际情况发现,本次数据转化存在以下几点注意事项:
(1)AA_Account表中ID字段非常重要。分析发现余额表和凭证表都必须通过该字段与科目表产生关联,进而补全科目信息。
(2)GL_AccountPeriodBegin表中科目代码部分缺失。除2014年科目代码是完整的外,其他年度科目代码一栏为空值,无法判断是数据丢失还是该表设计的原因。
(3)很难通过凭证主表GL_Doc、分录表GL_Entry生成凭证标准表,凭证标准表从凭证辅助信息表
二、SQL数据处理的抽取脚本(以生成2014年科目余额表、凭证表为例)
(一)生成科目表临时表(temp_kmb2014)
通过AA_Account表分析发现,有用字段大概有5个:code表示科目代码、name表示科目名称、accounttingyear表示年度、dcdirection表示借贷(652代表“借”、653代表“贷”)、id表示科目的编号。这里重点强调id这个字段,刚开始分析的时候并没有特别关注这个字段,认为该字段仅仅是一个顺序编号,但是后面做余额表和凭证表分析的时候发现余额表中部分科目编码缺失、凭证表内无科目代码。该字段为表内编号,别于科目代码,是科目代码的一个顺序编号。科目余额表和凭证表则通过该字段关联科目代码和科目名称。
通过进一步处理,生成科目代码临时表,SQL语句及结果如下:
select code,name,id,dcdirection=case
when dcdirection='652' then '借'
when dcdirection='653' then '贷' end
into temp_kmb2014
from AA_Account
where accountingyear='2014'
(二)生成余额表临时表(temp_yeb2014)
通过查看GL_AccountPeriodBegin(科目余额初期表)发现,除2014年外其他年度科目代码为空,无法通过单表生成科目余额表。进一步分析发现,表内有id和idaccountDTO两个字段可能与科目代码表中的id字段有关联,通过分析特定的科目代码和结合2014年度存在科目代码的情况发现idaccountDTO字段应该是对应科目代码表中的id字段。