筆者所使用的財務核算軟件,后臺為SQL2000,數據按年度設為不同的數據庫,并用“數據庫名+年度號”命名。其某個會計年度的記賬流程為:初始化數據錄入→初始化確認→從1月至12月按月(憑證錄入-憑證審核-憑證過賬-月結)→年結→數據結轉下年。
在今年年初核對賬務時,發現五年前有一筆業務科目記錯。如果按該財務軟件設計的要求,必須按年逐年反年結→從12月至1月按月(反月結-反過賬-反審核)→反初始化確認,一直反操作到需要修改的憑證月份,修改完相關憑證后,再按以上記賬順序,逐步操作到現在。整個過程繁瑣而重復,如果碰到需要調整的地方較多,重復性的勞動更是不言而遇。
有沒有好的辦法,直接通過SQL語句,一次性按年“反年結→從12至1月按月(反月結-反過賬-反審核)→反初始化確認”呢?答案是肯定的。
第一步,弄清“初始化確認→按月(憑證審核-憑證過賬-月結)→年結”操作過后,數據庫相關記錄的變化。由于沒有后臺數據庫的數據字典,所有沒有辦法批到相關數據表,但我們可通過相關軟件,在前臺操作后,監控后臺數據記錄變化來達到以上目的。
首先安裝Log Explorer軟 件,連接SQL SERVER服 務器,附加dwzw2017數據庫(本文以2017年賬為例),打開并啟用實時監控。
其次,打開前臺財務軟件,登錄2017年賬。
再次,操作“初始化確認”,觀察 Log Explorer實時監控結果,如圖1所示。

圖1“初始化確認”后數據庫監控結果
最后,分析以上監控結果可知:前臺“初始化確認”后,數據庫中有兩個表發生了變化,LOGMSG表和BOOK_SET表。通過企業管理器,調看兩表記錄進一步分析,發現LOGMSG表為財務軟件操作日志表,與“初始化確認”相關的核心表為BOOK_SET表,“初始化確認”前后,BOOK_SET表的IS-INITIALIZED值由“0”變為了“1”。
同理,我們可以發現,憑證審核后,數據庫的VOUCHER表的AUDITOR_CODE值由“NULL”變為了“002”(002為審核人員的操作代碼),STATUS值 由“0”變為了“1”;憑證過賬后,數據庫的VOUCHER表的KEEPER_CODE值 由“NULL”變為了“001”(002為過賬人員的操作代碼 ),STATUS值 由“1”變為了“2”;當月月結后,數據庫的BOOK_SET表的CURRENT_MONTH值由前一會計期間變為當前會計期間;當年年結后,數據庫的BOOK_SET表的IS_YEAR_FINISHED值由“0”變為了“1”。
第二步,根據第一步分析結果,編制針對某一年的數據進行初始化確認、審核、記賬、月結、年結(下簡稱“正向流程”)的SQL語句,并將以下內容保存為文件SJHZ.sql:
USE DWZW2017 --需要批處理的數據庫--

編制批處理文件“批量按年處理.BAT”,內容如下:

通過運行“批量按年處理.BAT”,達到我們需要的結果。
同時,我們可以編制針對某一年的數據進行反年結、反月結、反記賬、反審核、反初始化確認(下簡稱“反向流程”)的SQL語句文件SJHZ1.sql:


編制批處理文件“批量按年反向處理.BAT”,內容如下:

通過運行“批量按年反向處理.BAT”, 達到我們需要的反向結果。
第三步,上一步只是正向或反向處理某一年的數據,如果需要處理其他年份的數據,只需要將打開的數據庫名改為相應的數據庫即可。值得強調的是,正向流程中,上年的數據修改過后,年終結轉數據是會發生改變的,因此應該在運行完批處理后,通過前臺會計核算軟件將科目余額結轉至下一年,反向流程則不存在此問題。
在批語句設置好以后,雖然繁瑣而重復的勞動沒有了,但對于嚴格且嚴謹的財務軟件而言,相較于各項財務管理制度,筆者并不建議各位這種處理相關問題。本文也只是提供一種思路,在合規合理的前提下,盡量解放我們的雙手,減輕我們的勞動量,何樂而不為呢?