“總會計2000”數(shù)據(jù)庫數(shù)據(jù)采集轉(zhuǎn)換分析
2005 年,“金審工程”應用系統(tǒng)之一“現(xiàn)場審計實施系統(tǒng)”(簡稱AO)在我市審計機關(guān)推廣應用。在財政預算執(zhí)行審計中,針對我市財政系統(tǒng)普遍使用“總會計 2000”軟件的情況,重慶市審計局有關(guān)人員對“總會計2000”的數(shù)據(jù)庫數(shù)據(jù)進行了認真分析、研究,制作了該軟件數(shù)據(jù)庫數(shù)據(jù)導入模板,極大地方便了審計人員采集轉(zhuǎn)換“總會計2000”數(shù)據(jù),推動了AO軟件在我市財政審計中的廣泛應用。
一、獲取原始數(shù)據(jù)
“總會計2000”是由北京四方志誠軟件公司開發(fā),經(jīng)財政部推薦,在全國財政系統(tǒng)普遍推廣的會計核算軟件。“總會計2000”軟件分單用戶版和網(wǎng)絡版兩個版本。
單用戶版數(shù)據(jù)庫采用ACCESS,采集原始數(shù)據(jù)時可直接拷貝“總會計2000”安裝目錄下的ACCESS文件(擴展名為MDB)即可;網(wǎng)絡版數(shù)據(jù)庫采用SQL SERVER,采集原始數(shù)據(jù)時可使用SQL SERVER的“導入和導出數(shù)據(jù)”(DTS)功能,將SQL SERVER數(shù)據(jù)庫導出成ACCESS數(shù)據(jù)庫格式。
二、數(shù)據(jù)庫結(jié)構(gòu)分析及處理
(一)會計科目表
1.數(shù)據(jù)結(jié)構(gòu)分析
在“總會計2000”軟件中,會計科目表由基礎科目表(BM1BASE01)和會計科目表(BM1KJ01)組成。
基礎科目表(表名BM1BASE01)中存儲包括科目源碼(SCM),科目級次(JC),科目名稱(NAME),科目類型(ATT),科目年度(YEAR)等會計科目的基本信息。
會計科目表(表名BM1KJ01)中存儲包括科目源碼(SCM),科目級次(JC),科目年初余額(VALOO),余額方向(SF_FLAG),基礎科目源碼(BASESCM),科目年度(YEAR),SCM_1~SCM_8,是否末級科目(JC_FALG),自動科目編碼(KJ_KMH)等字段。
在BM1KJ01 中自動科目編碼(KJ_KMH)可由“總會計2000”軟件按照科目級次自動生成,如果KJ_KMH字段為空,可根據(jù)BM1KJ01的 SCM_1~SCM_8字段另行生成科目編碼(限于篇幅,本文不作詳細介紹)。本文僅就KJ_KMH已經(jīng)自動生成的情況進行分析。
2.數(shù)據(jù)處理
在轉(zhuǎn)換數(shù)據(jù)的過程中,AO 軟件會計科目表的“科目編碼”字段可直接由BM1KJ01生成,“科目名稱”字段由BM1KJ01表的“BASESCM”字段連接BM1BASE01表的 “SCM”字段生成,因為我們是對2004年度進行審計,所以只選取科目年度為2004的科目,設置記錄篩選條件為BM1KJ01.YEAR=2004.查詢生成會計科目表的SQL語句為:
。⊿QL1)
Select BM1KJ01.KJ_KMH AS 會計科目,BM1BASE01.NAME AS 科目名稱 From BM1KJ01 INNER JOIN BM1BASE01 ON BM1KJ01.BASESCM=BM1BASE01.SCM WHERE BM1KJ01.YEAR=2004
(二)科目余額表
科目余額表可由BM1KJ01直接查詢生成,僅需設置篩選條件篩選出2004年的科目余額即可。
查詢生成科目余額表的SQL語句為:
。⊿QL2)
Select KJ_KMH AS 科目編碼,VAL00 AS 科目余額,SF_FLAG AS 余額方向 From BM1KJ01 WHERE YEAR=2004
。ㄈ⿷{證表
在“總會計2000”軟件中,憑證表內(nèi)容由BM1PD01、BM1PD02、BM1PD03三張表共同組成。在AO軟件中,通過對此三張表的組合查詢,生成AO軟件的憑證表。
1.BM1PD01處理
。1)數(shù)據(jù)結(jié)構(gòu)分析
經(jīng)過分析,我們發(fā)現(xiàn),BM1PD01是總賬科目憑證庫,主要存放每一張憑證所涉及的總賬科目金額和憑證基本信息(相當于憑證主表)。記錄主要結(jié)構(gòu)如“表一”,其中,英文是源表字段名。
。ū硪唬
PDH憑單號 | YEAR年 | MONTH月 | DAY日 | FDJ附單據(jù) | ZY摘要 | KM_ONE借方科目 | KM_TWO貸方科目 | VAL金額 | FLM(分錄源碼) |
8 | 2004 | 1 | 10 | 23 | 1183 | 1182 | 10000.00 | 236 |
分析表一可以看出,在BM1PD01中,一張憑證只用一條記錄來表示,要生成AO軟件能識別的憑證分錄,應把BM1PD01中每一條記錄一分為二,產(chǎn)生liang條憑證分錄,如“表二”。
(表二)
PDH憑單號 | YEAR年 | MONTH月 | DAY日 | FDJ附單據(jù) | ZY摘要 | KMH科目源碼 | JD借貸方向 | VAL金額 | FLM(分錄源碼) |
8 | 2004 | 1 | 10 | 23 | 1183 | 1 | 10000.00 | 236 | |
8 | 2004 | 1 | 10 | 23 | 1182 | -1 | 10000.00 | 236 |
在“表二”所示的憑證分錄中,每一條分錄對應的會計科目都是總賬科目,如果該總賬科目有下級明細科目,則此金額是本張憑證中該總賬科目的匯總金額,因該總賬科目的明細分錄已在BM1PD02或BM1PD03中,故此憑證分錄不能作為憑證庫的一部分;如果該總賬科目無下級明細科目,則此金額是該總賬科目的實際發(fā)生額,此憑證分錄應作為憑證庫的一部分。因此在BM1PD01中分離出無明細總賬科目的憑證分錄成為處理BM1PD01的關(guān)鍵。
判斷BM1PD01中的總賬科目是否有明細科目,必須根據(jù)其科目源碼,連接BM1KJ01表,查詢生成是否有明細科目標記(JC_FLAG)字段,JC_FLAG=TRUE表示該總賬科目無明細科目,JC_FLAG=FALSE表示該總賬科目有明細科目。
。2)數(shù)據(jù)處理
A.查詢生成借方分錄
查詢生成BM1PD01的借方分錄表:用BM1PD01的“KM_ONE”字段連接會計科目表(BM1KJ01)的“SCM”字段,合并“YEAR”、“MONTH”、“DAY”生成“憑證日期”字段,同時增加表示借貸方向的字段“借貸”并賦值“1”,設置篩選條件
BM1PD01.YEAR=2004 AND BM1KJ01.JC_FLAG=true
具體SQL處理語句為:
。⊿QL3)
SELECT ‘1’ AS 借貸,A.PDH AS 憑單號,TRIM(STR(A.YEAR))+‘-’+ TRIM(STR(A.MONTH))+‘-’+TRIM(STR(A.DAY)) AS 憑證日期,A.FDJ AS 單據(jù)數(shù),A.ZY AS 摘要,A.VAL AS 金額,B.KJ_KMH AS 會計科目 FROM BM1PD01 AS A INNER JOIN BM1KJ01 AS B ON A.KM_ONE=B.SCM WHERE A.YEAR=2004 AND B.JC_FLAG=true
B.查詢生成貸方分錄
查詢生成BM1PD01的貸方分錄表:用BM1PD01的“KM_TWO”字段連接會計科目表(BM1KJ01)的“SCM”字段,合并“YEAR”、“MONTH”、“DAY”生成“憑證日期”字段,同時增加表示借貸方向的字段“借貸”并賦值“-1”,設置篩選條件BM1PD01.YEAR=2004 AND BM1KJ01.JC_FLAG=true
具體SQL處理語句為:
(SQL4)
SELECT ‘-1’ AS 借貸,A.PDH AS 憑單號,TRIM(STR(A.YEAR))+‘-’+ TRIM(STR(A.MONTH))+‘-’+TRIM(STR(A.DAY)) AS 憑證日期,A.FDJ AS 單據(jù)數(shù),A.ZY AS 摘要,A.VAL AS 金額,B.KJ_KMH AS 會計科目 FROM BM1PD01 AS A INNER JOIN BM1KJ01 AS B ON A.KM_TWO=B.SCM WHERE A.YEAR=2004 AND B.JC_FLAG=true
2.BM1PD02處理
分析發(fā)現(xiàn),BM1PD02存儲明細科目借方分錄,記錄結(jié)構(gòu)如表三。
(表三)
FLM分錄源碼 | SCM科目源碼 | VAL金額 | ZY摘要 |
236 | 1199 | 90000 |
查詢生成明細科目借方分錄表:用BM1PD02 的“FLM”字段連接BM1PD01的“FLM”字段、BM1PD02的“SCM”字段連接BM1KJ01的“SCM”字段查詢生成“憑單號”、“憑證日期”、“附單據(jù)”、“會計科目”等字段,增加表示借貸方向的字段“借貸”并賦值“1”,設置篩選條件BM1PD01.YEAR=2004,具體SQL處理語句為:
。⊿QL5)
SELECT ‘1’ AS 借貸,BM1PD01.PDH AS 憑單號,TRIM(STR(BM1PD01.
YEAR))+‘-’+TRIM(STR(BM1PD01.MONTH))+‘-’+TRIM(STR(BM1PD01.DAY)) AS 憑證日期,BM1PD01.FDJ AS 單據(jù)數(shù),BM1PD02.ZY AS 摘要,BM1PD02.VAL AS 金額,BM1KJ01.KJ_KMH AS 會計科目 FROM BM1PD01 INNER JOIN (BM1KJ01 INNER JOIN BM1PD02 ON BM1KJ01.SCM = BM1PD02.SCM) ON BM1PD01.FLM = BM1PD02.FLM WHERE BM1PD01.YEAR=2004
3.BM1PD03處理
BM1PD03存儲明細科目貸方分錄,數(shù)據(jù)處理方法與BM1PD02類似,借貸方向字段“借貸”賦值“-1”,具體SQL處理語句為:
。⊿QL6)
SELECT ‘-1’ AS 借貸,BM1PD01.PDH AS 憑單號,TRIM(STR(BM1PD01.
YEAR))+‘-’+TRIM(STR(BM1PD01.MONTH))+‘-’+TRIM(STR(BM1PD01.DAY)) AS 憑證日期,BM1PD01.FDJ AS 單據(jù)數(shù),BM1PD03.ZY AS 摘要,BM1PD03.VAL AS 金額,BM1KJ01.KJ_KMH AS 會計科目 FROM BM1PD01 INNER JOIN (BM1KJ01 INNER JOIN BM1PD03 ON BM1KJ01.SCM = BM1PD03.SCM) ON BM1PD01.FLM = BM1PD03.FLM WHERE BM1PD01.YEAR=2004
4.生成完整憑證表
合并SQL3、SQL4、SQL5、SQL6生成完整憑證表,合并關(guān)鍵字為UNION.即:
。⊿QL7)
SQL3 UNION SQL4 UNION SQL5 UNION SQL6
其中SQL3、SQL4、SQL5、SQL6為上述具體SQL語句。
三、在AO中轉(zhuǎn)換數(shù)據(jù)并制作數(shù)據(jù)庫數(shù)據(jù)導入模板
。ㄒ唬┺D(zhuǎn)換數(shù)據(jù)
1.通過AO系統(tǒng)“項目管理”→“資料管理”→“從系統(tǒng)引入資料”直接引入獲取的“總會計2000”ACCESS數(shù)據(jù)庫數(shù)據(jù)。
2.生成財務數(shù)據(jù)中間表時,憑證的存儲方式選擇“源數(shù)據(jù)憑證表為一個表”。
3.在“數(shù)據(jù)導入向?qū)А备鞑襟E中,“會計期間定義”和“科目設置”步驟根據(jù)實際情況使用“手工填寫”,“科目余額表”、“會計科目表”、“憑證表”的導入均使用“進入SQL執(zhí)行器”。
4.導入科目余額表
導入科目余額表時,在“SQL語句組”中輸入“SQL2”對應的SQL語句,輸入相應的臨時表名,設置好與AO科目余額表的對應關(guān)系,導入即可。
5.導入會計科目表
導入會計科目表時,在“SQL語句組”中輸入“SQL1”對應的SQL語句,輸入相應的臨時表名,設置好與AO會計科目表的對應關(guān)系,導入即可。
6.導入憑證表
導入憑證表時,在“SQL語句組”中輸入“SQL7”對應的SQL語句,輸入相應的臨時表名,設置好與AO憑證表的對應關(guān)系,導入即可。
。ǘ┲谱鲾(shù)據(jù)導入模板
在憑證表導入結(jié)束后,在“數(shù)據(jù)導入向?qū)А敝袉螕簟氨4鎸朐O置”即可將數(shù)據(jù)轉(zhuǎn)換過程中的步驟(包括SQL語句)保存為一個數(shù)據(jù)導入模板,并可通過“導入”“導出”功能將此模板分發(fā)給其他審計人員使用。
。ㄈ┦褂脭(shù)據(jù)導入模板
其他審計人員轉(zhuǎn)換數(shù)據(jù)時,在“數(shù)據(jù)導入向?qū)А敝袉螕簟白詣訉搿,選擇相應模板,設置好數(shù)據(jù)源即可根據(jù)軟件提示完成數(shù)據(jù)庫數(shù)據(jù)的導入。