<返回上级
当前位置:首页 > 交流 > 详情

如何快速准确的转换财政非税数据

2010-04-16 02:38:19

 在今年的财政同级审中,我们充分利用AO转换模板和SQL Server数据视图语句,实现了财政专户会计核算系统数据快速准确的AO转换。考虑到财政部门会计核算系统多使用SQL Server作为底层数据库,现将数据转换经验提供给大家,仅供参考。具体操作步骤如下:
  一、备份原始数据库
  登录财政专户会计核算系统主机,进入SQL Server企业管理器,打开本地服务器,找到财政专户后台数据库。点击右键查看数据库属性,记住数据文件和事务日志名,方便以后还原。点击右键进入所有任务→备份数据库,指定存放路径进行数据库完全备份。
  二、还原数据库
  进入审计主机SQL Server企业管理器,打开本地服务器的数据库栏目,单击右键进入新建数据库,给数据库起一个名字A,单击数据文件和事务日志选项卡,修改数据文件和日志名称,使数据文件名及事务日志名与备份数据的名称一致,否则无法还原。选中数据库A,点击右键进入所有任务→还原数据库,选择[从设备还原],指定存放备份文件的路径完成还原。
  三、基本数据表整理
  主要内容是依据AO转换模板需求的4张表:AT_DWYE(单位余额表)、AV_KMYE(科目余额表)、kmbm(科目编码表)、VIEW_PZ(凭证库表),利用审计主机还原后的数据库视图SQL语句对数据库进行整理。
  进入SQL Server查询分析器,打开导入的新建数据库A,点击视图选项,找到dbo.AV_DWYE、dbo.AV_KMYE、dbo.VIEW_PZ三张视图,逐一在三张视图表上单击右键,选择“编辑”,这样就在查询分析器中编辑窗体中生成了相应的视图SQL语句。充分利用这些SQL语句,生成我们需要的四张表。
  1、 单位余额表
  SELECT B.YF, A.DWH, A.DWM, DWYE = ISNULL(B.YE, 0), A.MXBZ  INTO AT_DWYE
  FROM AT_DWZD AS A LEFT JOIN (
    SELECT A.yf, dwh = LEFT(A.dwh, 3), ye = SUM(A.ye)
           FROM ( select M.YF,dwh=d.dwh,ye=sum(m.ye) from at_dwzd d
     join at_kmzd k
     on d.dwh=k.dwh
     right join at_mxz m
     on k.kmh=m.kmh
     where d.mxbz=1 and m.SXH=ISNULL((SELECT MAX(N.SXH) FROM AT_MXZ N WHERE N.KMH=M.KMH AND N.YF=M.YF),0)
     group by M.YF,d.dwh) AS A
           WHERE len(rtrim(A.dwh)) > 3
    GROUP BY A.yf, LEFT(A.dwh, 3)
           UNION
           SELECT A.yf, dwh = LEFT(A.dwh, 6), ye = SUM(A.ye)
           FROM ( select M.YF,dwh=d.dwh,ye=sum(m.ye) from at_dwzd d
    join at_kmzd k
    on d.dwh=k.dwh
    right join at_mxz m
    on k.kmh=m.kmh   where d.mxbz=1 and m.SXH=ISNULL((SELECT MAX(N.SXH) FROM AT_MXZ N WHERE N.KMH=M.KMH AND N.YF=M.YF),0)
    group by M.YF,d.dwh) AS A
           WHERE len(rtrim(A.dwh)) > 6
           GROUP BY A.yf, LEFT(A.dwh, 6)
           UNION
           SELECT A.yf, A.dwh, A.ye FROM (select M.YF,dwh=d.dwh,ye=sum(m.ye) from at_dwzd d
    join at_kmzd k
    on d.dwh=k.dwh
    right join at_mxz m
    on k.kmh=m.kmh   where d.mxbz=1 and m.SXH=ISNULL((SELECT MAX(N.SXH) FROM AT_MXZ N WHERE N.KMH=M.KMH AND N.YF=M.YF),0)
    group by M.YF,d.dwh) AS A)
   AS B ON A.DWH = B.DWH
  2、科目余额表
  SELECT B.YF, A.KMH, A.KMMC, KMYE = ISNULL(B.YE, 0), A.MXBZ INTO AV_KMYE
  FROM AT_KMZD AS A LEFT JOIN
            (  SELECT A.yf, kmh = LEFT(A.kmh, 3), ye = SUM(A.ye)
           FROM at_mxz A
           WHERE len(rtrim(A.kmh)) > 3 AND A.SXH=ISNULL((SELECT MAX(B.SXH) FROM AT_MXZ B WHERE B.KMH=A.KMH AND B.YF=A.YF),0)
    GROUP BY A.YF,LEFT(A.KMH,3)
           UNION
    SELECT A.yf, kmh = LEFT(A.kmh, 6), ye = SUM(A.ye)
           FROM at_mxz A
           WHERE len(rtrim(A.kmh)) > 6 AND A.SXH=ISNULL((SELECT MAX(B.SXH) FROM AT_MXZ B WHERE B.KMH=A.KMH AND B.YF=A.YF),0)
    GROUP BY A.YF,LEFT(A.KMH,6)
           UNION
    SELECT A.yf, kmh = LEFT(A.kmh, 9), ye = SUM(A.ye)
           FROM at_mxz A
           WHERE len(rtrim(A.kmh)) > 9 AND A.SXH=ISNULL((SELECT MAX(B.SXH) FROM AT_MXZ B WHERE B.KMH=A.KMH AND B.YF=A.YF),0)
           GROUP BY A.yf, LEFT(A.kmh, 9)
           UNION
    SELECT A.yf, kmh = LEFT(A.kmh, 12), ye = SUM(A.ye)
           FROM at_mxz A
           WHERE len(rtrim(A.kmh)) > 12 AND A.SXH=ISNULL((SELECT MAX(B.SXH) FROM AT_MXZ B WHERE B.KMH=A.KMH AND B.YF=A.YF),0)
           GROUP BY A.yf, LEFT(A.kmh, 12)
           UNION
    SELECT A.yf, kmh = LEFT(A.kmh, 15), ye = SUM(A.ye)
           FROM at_mxz A
           WHERE len(rtrim(A.kmh)) > 15 AND A.SXH=ISNULL((SELECT MAX(B.SXH) FROM AT_MXZ B WHERE B.KMH=A.KMH AND B.YF=A.YF),0)
           GROUP BY yf, LEFT(kmh, 15)
           UNION
           SELECT yf, kmh, ye
           FROM at_mxz A
           WHERE A.SXH=ISNULL((SELECT MAX(B.SXH) FROM AT_MXZ B WHERE B.KMH=A.KMH AND B.YF=A.YF),0)
  ) AS B ON A.KMH = B.KMH
  WHERE b.yf IS NOT NULL
  3、科目编码表
  SELECT KMH,KMMC INTO kmbm FORM AT_KMZD
  4、凭证库表
  SELECT AT_PZFL.ZY, zzkm.KMMC AS zkmm, mxkm.KMMC AS mxkmm,AT_PZFL.JFJE,AT_PZFL.DFJE,AT_PZFL.KMH,AT_PZFL.PZH, AT_PZFL.YF, AT_PZFL.SXH, at_pzfl.pzlb INTO VIEW_PZ
  FROM AT_PZFL INNER JOIN
        AT_KMZD mxkm ON AT_PZFL.KMH = mxkm.KMH INNER JOIN
        AT_KMZD zzkm ON LEFT(AT_PZFL.KMH, 3) = zzkm.KMH
  说明:为了深入理解和掌握视图的作用,学习借鉴视图编写语句,上述生成新表的步骤是必要的。有一个捷径可走,在从SQL数据库导出数据时,也可直接利用视图(科目代码表除外),进行数据转换。
  四、数据中间转换
  考虑到AO转换模板利用的数据类型是.mdb,我们需要把SQL数据库中生成的4张新表:AT_DWYE、AV_KMYE、kmbm、VIEW_PZ导出到Access数据库。
  进入审计主机数据库,打开企业管理器,打开导入的新建数据库A,选择“表”,找到新生成的4张表,逐一在4张表上进行如下操作:点击选择需要导出的表,右键单击后选择“所有任务”,选择“导出数据”,点击下一步,选择数据源为“用于SQL Server 的Microsoft OLE DB 提供程序”,选择数据库A,单击下一步,选择目的“Microsoft Access”并指定路径和文件名(为新建的Access文件名),单击下一步,选择源表为生成的4张新表,“目的”表名改为AO转换模板需要的表名,单击下一步完成从SQL数据库转换为Access数据的目的。
  五、导入AO生成账套
  我们在去年财政同级审中,已经把4张表导入AO系统时,生成了AO转换模板。此时,我们只需要在AO系统中,新建账套后选择“模板管理→使用模板采集转换”,选择存放4张表的Access数据库,按操作步骤提示,即可轻松完成数据转换。
  我们已把转换模板导出,请需要模板的审计人员及时跟我们联系。联系Email:zbsjycf@sina.com。(作者:袁春风 山东淄博市审计局)
(本文内容仅为作者个人观点,不代表任何审计机关和本网站的观点,未经许可,不得转载)
微信公众号

中国内部审计协会
微信公众号

顶部
全国内部审计统计调查工作专题
CIA考试报名
CIA年检
CIA在线学习系统
购买网络直播课