馮 浩 某被審計單位使用的財務(wù)核算軟件為金蝶K3-V10,,后臺數(shù)據(jù)庫是SQL Server 2000,審計組在AO軟件中,,使用數(shù)據(jù)轉(zhuǎn)換模板導(dǎo)入電子數(shù)據(jù)時,,遇到無法重建賬表的錯誤提示,從而不能正常生成電子賬套,。隨后,,在訪問金審工程服務(wù)網(wǎng)站查詢有關(guān)內(nèi)容時,也未給出詳細的解決辦法,。面對這一問題,,在認真分析金蝶K3-V10電子數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,對數(shù)據(jù)進行一系列必要的整理等工作后,,采取手工導(dǎo)入方式完成數(shù)據(jù)轉(zhuǎn)換工作,,最終順利地將電子數(shù)據(jù)導(dǎo)入AO,生成了電子賬套,,使這一問題得到了解決,。 第一步:分析數(shù)據(jù)結(jié)構(gòu),確定將要用到的表及重要字段 將備份電子數(shù)據(jù)還原到SQL Server 2000中,,經(jīng)分析,,確定將要用到的表,如表1所示:
表1 第二步:關(guān)鍵表結(jié)構(gòu)分析及數(shù)據(jù)整理 (一)科目表:t_Account 1、科目設(shè)置基本情況: 科目設(shè)置及使用不分年度,,被審單位科目設(shè)置的最高級次為4級,。 2、需重點關(guān)注的字段,如表2所示:
表2 3,、科目表數(shù)據(jù)整理過程 經(jīng)過對會計科目表科目設(shè)置情況進行查驗,,發(fā)現(xiàn)科目代碼(FNumber)最大級次為四級,分隔符為“.”,,絕大多數(shù)級次長度按照4-3-2-2的格式進行定義(這個長度不包括科目代碼分隔符),,但有6個二級科目(也是末級科目)長度為2,而不是3,,分別是:'1231.01','1231.02','1122.01','1122.02','1122.03','1122.04',,應(yīng)該對這6個二級科目進行規(guī)范化,統(tǒng)一規(guī)范為4-3-2-2的格式,,即在上述6個科目代碼的二級前面加上一位即可,,但應(yīng)注意避免與現(xiàn)有科目代碼的重復(fù)。經(jīng)查詢,,可以將其規(guī)范為:'1231.601','1231.602','1122.601','1122.602','1122.603','1122.604'的形式,。 語句如下: update t_account set fnumber=stuff(fnumber,6,1,'60') from t_account where len(fnumber)=7 (備注:科目代碼分隔符:“.”,在向AO手工導(dǎo)入設(shè)置科目代碼規(guī)則時要進行指定,,并將AO默認的4-4-3-3改為4-3-2-2) 至此,,科目表數(shù)據(jù)整理完畢。 (二)科目余額表:t_Balance 1,、科目余額表基本情況: 存儲多年度數(shù)據(jù)(2008年-2011年),, 余額按月存儲 iperoid ,各年初余額即各年1月份余額數(shù),。 2,、重點關(guān)注的字段,如表3所示:
表3 3,、數(shù)據(jù)整理過程: 科目余額表的處理比較麻煩,大致步驟如下: (1)增加科目代碼(Fnumber)列 原表中,,缺少手工導(dǎo)入時所需的科目代碼列(FNumber,,varchar 40),修改表結(jié)構(gòu),,增加該列,,并用UPDATE更新其值,,語句如下: UPDATE [dbo].[t_Balance] SET [dbo].[t_Balance].FNumber = t_Account.FNumber FROM [dbo].[t_Balance], t_Account WHERE [dbo].[t_Balance].FAccountID = t_Account.FaccountID (2)刪除重復(fù)記錄 經(jīng)查詢并對記錄的深入觀察分析,發(fā)現(xiàn)該表中存在科目余額重復(fù)記錄情況,,應(yīng)將重復(fù)記錄刪除,。重復(fù)情況分為兩種: 第一種重復(fù):由幣別內(nèi)碼(FCurrencyiID)引起的記錄重復(fù) 經(jīng)過分析,發(fā)現(xiàn)記錄重復(fù),,即因為FCurrencyiID=0與FCurrencyiID=1的記錄重復(fù),,將FCurrencyiID=0的記錄刪除: Delete from [dbo].[t_Balance] where FCurrencyiID=0 第二種重復(fù):由核算項目使用內(nèi)碼(FDetailID)引起的重復(fù) 每一科目代碼的Fdetailid=0的期初值等于Fdetailid<>0各記錄(各核算項目)期初值相加,即科目余額表中,,也反映了各核算單位的期初數(shù),,但如不將核算單位的期初數(shù)記錄刪除,對于科目代碼來講存在數(shù)值上的重復(fù),,所以也應(yīng)將各核算單位的期初數(shù)記錄刪除,。 Delete from [dbo].[t_Balance] where Fdetailid<>0 (3)按年度將記錄分別保存 Select * into t_Balance_new_2008 from t_Balance where fyear=2008; Select * into t_Balance_new_2009 from t_Balance where fyear=2009; Select * into t_Balance_new_2010 from t_Balance where fyear=2010; 至此,科目余額表數(shù)據(jù)整理完畢,。 (三)憑證輔助表:t_VoucherEntry 1,、憑證輔助表表基本情況: 記錄了多年度的憑證分錄,與憑證主表相應(yīng)記錄為1:N的關(guān)系,,通過FVoucherID與憑證主表相關(guān)聯(lián),,通過FaccountID與科目表相關(guān)聯(lián)。 2,、重點關(guān)注的字段,,如表4所示:
表4 3,、數(shù)據(jù)整理過程 (1)增加會計年度(Fyear int 4)用憑證主表對應(yīng)記錄進行更新 Update t_VoucherEntry set t_VoucherEntry.Fyear= t_Voucher.Fyear From t_VoucherEntry , t_Voucher Where t_VoucherEntry.Fvoucherid= t_Voucher.Fvoucherid (2)增加科目代碼(FNumber)列,用科目表對其進行更新 UPDATE t_VoucherEntry SET t_VoucherEntry.FNumber = t_Account.FNumber FROM t_VoucherEntry, t_Account WHERE t_VoucherEntry.FAccountID = t_Account.FaccountID 接下來,,為方便審計人員對記錄的查詢檢索,我們決定將項目分類名稱,、涉及單位名稱等信息加到摘要上去,形如:“銀行存息-商行XX街支行_單位_XXX污水處理廠”,,這樣,,審計人員可以通過對摘要,實現(xiàn)類似輔助賬數(shù)據(jù)分析功能,。 (3)增加Fdetailfullname (varchar 255),,用于更新(摘要)字段 此處注意,要更新t_VoucherEntry.Fdetailfullname,,需要借助t_Itemdetailv表,。 首先,將t_Itemdetailv表增加相關(guān)列:分別是Fdetailname(varchar 255),,F(xiàn)detailclassname(varchar 255),, Fdetailfulllname(varchar,255),然后對其值進行分別更新,語句如下: update dbo.t_ItemDetailV set dbo.t_ItemDetailV.fdetailname=dbo.t_Item.fname from dbo.t_ItemDetailV,dbo.t_Item where dbo.t_ItemDetailV.fitemid=dbo.t_Item.fitemid --在表dbo.t_ItemDetailV增加FDetailName字段,,然后用T_Item表進行更新 update dbo.t_ItemDetailV set dbo.t_ItemDetailV.Fdetailclassname=dbo.t_ItemClass.fname from dbo.t_ItemDetailV,dbo.t_ItemClass where dbo.t_ItemDetailV.fitemclassid=dbo.t_ItemClass.fitemclassid 經(jīng)過觀察發(fā)現(xiàn),,一些記錄Fdetailname值為空,為避免在SQL查詢器中更新Fdetailfulllname字段時出現(xiàn)與空串連接結(jié)果為空的情況,,先給空值賦上一個值“NULL”: Update dbo.t_ItemDetailV set fdetailname=’NULL’ from dbo.t_ItemDetailV where fdetailname is null 經(jīng)驗證,,F(xiàn)detailclassname字段沒有空值,無需做上述操作,。 更新Fdetailfullname字段: Update dbo.t_ItemDetailV set fdetailclassname=fdetailname+’_’+fdetailclassname from dbo.t_ItemDetailV 其次,,再用dbo.t_ItemDetailV.Fdetailfullname去更新t_VoucherEntry.Fdetailfullname update t_voucherentry set t_voucherentry.fdetailfullname=dbo.t_ItemDetailV.fdetailfullname from t_voucherentry,dbo.t_ItemDetailV where t_voucherentry.fdetailid=dbo.t_ItemDetailV.fdetailid 第三,更新摘要: Update t_Voucherentry set fexplanation=fexplanation+’_’+fdetailfullname from t_Voucherentry 最后,,為方便導(dǎo)入數(shù)據(jù),,可把記錄按年度分開: Select * into t_voucherentry_2008 from t_voucherentry where fyear=2008; Select * into t_voucherentry_2009 from t_voucherentry where fyear=2009; Select * into t_voucherentry_2010 from t_voucherentry where fyear=2010; (四)憑證主表:t_Voucher 1、基本情況 存放從2006至2011年多年度電子憑證,,憑證號不重復(fù),。通過FVoucherID與憑證輔助表相關(guān)系 2、重點關(guān)注的字段,,如表5所示:
表5 3,、數(shù)據(jù)整理過程 (1)對摘要(Fexplanation)進行更新 因為前面對憑證輔助表的摘要進行了更新,為使憑證表中的摘要與之相一致,,也應(yīng)對摘要內(nèi)容進行更新,。 update t_voucher set t_voucher.fexplanation = t_voucherentry.fexplanation from t_voucher,t_voucherentry where t_voucher.fvoucherid=t_voucherentry.fvoucherid and t_voucherentry.fentryid=0 至此,數(shù)據(jù)導(dǎo)入AO前,,要做的數(shù)據(jù)整理工作全部完成,,接下來要具體向AO中導(dǎo)入數(shù)據(jù)時,將要用到的表有如表6所示:
表6 第三步:賬表重建,,生成電子賬套 為方便起見,,可以將上述表從SQL Server 2000導(dǎo)出到ACCESS。然后,,將2008-2010三個年度數(shù)據(jù)分別手工導(dǎo)入AO,。在進行賬表重建后,發(fā)現(xiàn)分錄數(shù)不對,,在科目余額表或會計科目中多數(shù)科目只顯示有一級科目的內(nèi)容,,而沒有二級科目及以下級次的科目憑證信息。我們又從AO后臺數(shù)據(jù)庫入手進行分析,,發(fā)現(xiàn)是由會計科目表中的科目級別只有一級科目顯示為1,,其它均為0,且上級科目代碼字段均為空兩個字段,。所以,,應(yīng)想辦法將這兩個字段值填上正確的級次和科目代碼,,語句如下: 更新科目級別:(在ACCESS環(huán)境下更新) UPDATE 會計科目表 SET 科目級別=2 where len(科目代碼)=7; UPDATE 會計科目表 SET 科目級別=3 where len(科目代碼)=9; UPDATE 會計科目表 SET 科目級別=4 where len(科目代碼)=11; 更新上級科目代碼:(在ACCESS環(huán)境下更新) UPDATE 會計科目表 SET 上級科目代碼=mid(科目代碼,1,4) where len(科目代碼)=7; UPDATE 會計科目表 SET 上級科目代碼=mid(科目代碼,1,7) where len(科目代碼)=9; UPDATE 會計科目表 SET 上級科目代碼=mid(科目代碼,1,9) where len(科目代碼)=11; 然后,再次進行賬表重建即可,。
|
|