冯 浩
从2011年开始,郑州市市、县(区)两级财政系统全部使用了《方正春元财政总账管理系统》(V2.2.60),其后台数据库为oracle 10g。目前,AO软件没有相应的数据转换模板,需要通过手工进行数据导入,才能在AO中开展审计工作。现简要介绍如何将该系统数据通过手工方式导入AO,从而生成电子账套。
一、数据获取及数据还原
审计组可以让被审单位提供预算内总账的oracle数据库DMP备份文件,如郑州市市本级的为:zzsgkzw_20120408.dmp。
这里的数据还原是指将DMP备份数据导入到审计人员电脑的oracle 10g中。在导入之前,审计人员可以在oracle 10g中完成建立用户表空间、用户名、登录密码、定义角色等基础工作。如此例中,创建用户表空间为:CZJ,创建用户名为:FH,登录密码为:fenghao,数据库实例为AUDITDB,原始数据保存路径为:E:\郑州市财政局预算内2011年\zzsgkzw_20120408.dmp。在C:命令提示符界面中输入以下命令,即可完成DMP数据导入oracle,命令如下:
IMP FH/FENGHAO@AUDITDB FILE=E:\郑州市财政局预算内2011年\zzsgkzw_20120408.dmp FULL=Y IGNORE=Y
二、重要数据表
经分析,确定的重要表有:
序号 | 表名 | 中文含义 | 备注 |
1 | accountant_subject | 科目表 | |
2 | budget_subject | 预算项目表 | 功能分类 |
3 | budget_subject_item | 预算支出表 | 经济分类 |
4 | budget_subject_income | 预算收入表 | 收入科目 |
5 | enterprise | 预算部门表 | |
6 | money_kind | 资金性质表 | |
7 | remain_budget | 余额表 | |
8 | voucher_budget | 凭证主表 | |
9 | voucher_detail_budget | 凭证明细表 | |
10 | table_manager | 表说明表 | 可以查询表信息 |
11 | field_manager | 字段说明表 | 可以查询字段信息 |
(具体各表字段略去,读者可以通过查询字段说明表获取信息)
三、数据整理过程
数据整理工作在SQL Server 2008中进行,主要操作步骤如下:
(一)将数据导入SQL Server 2008
1、在SQL Server 2008中新建一个数据库,如:“郑州市财政局预算内”;
2、打开SQL Server 导入和导出向导;
在选择数据源界面中,选择数据源为:Microsoft OLE DB Provider for Oracle,点击属性按钮,在数据链接属性界面中,输入服务器名称:AUDITDB,用户名称:FH ,密码:FENGHAO ,并选中“允许保存密码”选项,然后测试连接;
3、在“选择目标”界面中,选择身份验证为:使用Windows 身份验证,数据库:郑州市财政局预算内,然后点击下一步;
4、在指定表复制或查询界面中,选择“复制一个或多个表或视图的数据”选项;
5、在选择源表和源视图中,选中上述ACCOUNTANT_DUBGET等重要表,并可以在“编辑映射”功能中,对各表的一些字段的数据类型及长度定义进行更加合适的定义;
6、查看数据类型映射,并点下一步,选中“立即运行”,点击下一步,将数据表导入SQL Server 2008数据库中;
(二)数据整理
1、删除非审计年度(2011年)记录
为了减少数据量,可以将表中非2011年度的记录删除,如删除ACCOUNTANT_SUBJECT表中记录的SQL语句如下(其余表省略):
--删除ACCOUNTANT_SUBJECT表中的非2011年度记录
DELETE
FROM FH.ACCOUNTANT_SUBJECT
WHERE SET_YEAR <>'2011'
2、更新凭证明细表的摘要
在预算总账管理当中,每一条记录都有与其相应的功能分类、经济分类、预算部门、资金性质等若干项重要属性,而在AO电子账套数据中,这些属性无法直观地看到。针对这一问题,我们可以将这些重要属性添加在凭证摘要中,作为摘要的一部分,在进行数据分析时,只需通过检索摘要,就可以实现对记录属性查询的目的。主要通过UPDATE语句来实现。
3、修改余额表
经观察,在余额表中(REMAIN_BUDGET)中,只显示有最末级科目的余额,而没有上级科目的余额,如果不对科目余额表进行处理而直接导入AO,AO中的科目余额表的一级科目的期初余额将无法正确显示(多数为0)。为此,需要对科目余额表进行修改,使其能够满足需要。解决这一问题并不复杂,我们可以通过对set_code,AS_CODE字段的分组,计算出各级科目的余额,并将结果保存在一张新余额表(如REMAIN_BUDGET_NEW)中即可,语句如下:
select set_code,as_code,SUM(balance) as balance_new
into fh.REMAIN_BUDGET_NEW
from fh.REMAIN_BUDGET group by set_code,AS_CODE order by SET_CODE,len(as_code),AS_CODE
4、按账套拆分记录
通过分析得知,字段SET_CODE的含义为账套代码,通过对凭证明细表SET_CODE字段进行唯一性检索:select distinct set_code from fh.VOUCHER_DETAIL_BUDGET.
可以清楚地看到,电子数据中共包括0001、0003、0004…0024等19个账套。接下来就需要将这十九套账凭证主表、凭证明细表、余额表、科目表一一拆分开来,然后,再逐一导入AO中生成十九个电子账套。
四、手工导入AO要点提示
(一)ACCOUNTANT_BUDGET(科目表)导入环节:
科目方向字段:IS_DEBIT ( 1为借 0为贷)。
(二)REMAIN_BUDGET(余额表)导入环节:
余额是按年存储的,不是按月存储的;余额存储方式是:只存储余额,余额方向由正负来表示。
(三)VOUCHER_BUDGET(凭证主表)导入环节:
凭证表的关联字段VOUCHER_ID;
凭证日期由凭证年度:SET_YEAR 凭证月份:V_MONTH 凭证日:V_DAY三个字段组成;
凭证主表与凭证明细表的关联号字段:VOUCHER_ID。
(四)voucher_detail_budget(凭证明细表)导入环节:
凭证表的关联字段、凭证流水号均选择VOUCHER_ID,分录序号由AO系统自动生成;
发生额:分别有借方发生额字段(deb_money)和贷方发生额字段(cre_money)。
最后,将账表重建即可。