【正文】
balance bal,t_Account a WHERE =0 AND = and =1 And 600 And FPeriod = 1 And FYear=2003 And = 0 Group By FDC order by FDC檢查累計(jì)發(fā)生數(shù)是否平衡Select ISNULL(sum(FYtdDebitFor),0) FYtdDebitFor, ISNULL(sum(FYtdCreditFor),0) FYtdCreditFor, ISNULL(sum(FYtdDebit),0) FYtdDebit, ISNULL(sum(FYtdCredit),0) FYtdCredit From t_balance bal,t_Account a Where =0 AND = and =1 and 600 And FPeriod = 1 And FYear=2003 And = 0此賬套也正是客戶自已手工錄入了一些科目的累計(jì)發(fā)生數(shù),但是累計(jì)發(fā)生數(shù)不平衡,從而產(chǎn)生了問題。也可以用下面的SQL語句把累計(jì)發(fā)生數(shù)清除:update t_balance set fytddebitfor=0,fytdcreditfor=0,fytddebit=0,fytdcredit=0 where fytddebit0 or fytdcredit0案例六:有一賬套在初始化數(shù)據(jù)錄入完后,但經(jīng)過反復(fù)核對每個科目的數(shù)據(jù),每個科目的數(shù)據(jù)都是正確的,是否是數(shù)據(jù)庫中小數(shù)位問題導(dǎo)致的呢?分析:在試算平衡時,系統(tǒng)核對的是科目余額表中的綜合本位幣的數(shù)據(jù)是否平衡,在科目余額表(t_balance)中對應(yīng)的就是每個科目的FCurrencyID = 0的記錄數(shù)據(jù),可以把上個案例中的試算平衡的SQL語句拿來執(zhí)行一下,正常情況下系統(tǒng)產(chǎn)生兩條記錄,這兩條記錄的數(shù)值都是一樣的,系統(tǒng)才確定平衡;通過這兩條記錄一般可以看出是借方數(shù)據(jù)不正確還是貸方數(shù)據(jù)不正確。既然反復(fù)核對過每個科目的數(shù)據(jù),那么幣別內(nèi)碼不等于零的記錄的數(shù)據(jù)應(yīng)該沒有問題,問題應(yīng)該在于幣別內(nèi)碼為零的記錄中,此賬套的問題在于借方幣別內(nèi)碼等于零的記錄中FBeginBalanceFor數(shù)據(jù)不等于FBeginBalance的數(shù)據(jù)。現(xiàn)在的問題是怎樣來找出是哪條記錄的數(shù)據(jù)不正確,可用下面的SQL語句來查找:select * from t_balance where fbeginbalanceforfbeginbalance and fcurrencyid=0找到之后,直接把它們改為一致即可。案例七:有一賬套以前月份數(shù)據(jù)都很正常,但是在本期憑證過賬后,發(fā)現(xiàn)試算平衡表中的數(shù)據(jù)不平,而把憑證反過賬后,試算平衡表(包括未過賬憑證)卻是平的,不知是怎么回事?分析:憑證未過賬時,試算平衡表是平的,說明余額表中期初余額是正確的;憑證過賬后,試算平衡表不平,說明憑證過賬后形成的余額表中發(fā)生額是不正確的。這時就得分析憑證過賬的過程了,憑證過賬時,系統(tǒng)需要按科目級別逐級進(jìn)行匯總,一般情況下,只要在憑證過賬時不出現(xiàn)錯誤,最明細(xì)一級的科目的數(shù)據(jù)在余額表中都是正確的,而在查詢試算平衡表時,都是查一級科目的數(shù)據(jù),那么問題就出在一級科目的余額數(shù)據(jù)有誤了,也就是憑證過賬時匯總非明細(xì)科目的數(shù)據(jù)有誤;系統(tǒng)在匯總數(shù)據(jù)時,依據(jù)的也是各個科目的父級代碼,問題就出在有某個或某些科目的父級代碼不正確。問題原因找出來了,但是怎樣去查找出哪些科目的父級代碼出錯呢?這時我們可以通過科目余額表來查找,先是查找出最明細(xì)科目的數(shù)據(jù)并按科目進(jìn)行匯總,生成到一個臨時表中,再查找出一級科目的數(shù)據(jù),生成到另一個臨時表中,再對這兩個臨時表的數(shù)據(jù)進(jìn)行比較,就可以查出哪些科目數(shù)據(jù)不對,也就是那些科目的父級代碼不正確。具體的SQL語句可參考如下:查找出最明細(xì)科目的數(shù)據(jù)并按科目進(jìn)行匯,生成到臨時表aaa中select substring(,1,4) as fnumber,sum() as fdebit,sum() as fcredit into aaafrom t_balance a join t_account b on = where =2001 and =1 and =0 and =0 and =1group by substring(,1,4)查找出一級科目的數(shù)據(jù),生成到臨時表bbb中select ,sum() as fdebit,sum() as fcredit into bbbfrom t_balance a join t_account b on = where =2001 and =1 and =0 and =0 and =1group by 對比兩個臨時表,找出哪些科目數(shù)據(jù)不正確select * from aaa a join bbb b on = where or 刪除臨時表drop table aaadrop table bbb案例八:有一賬套,本期憑證過賬后,查詢總賬數(shù)據(jù)與憑證不過賬時查總賬數(shù)據(jù)(包括未過賬憑證)不相符。分析:這又是一個憑證過賬的問題,憑證在過賬時,系統(tǒng)會把憑證上的科目,幣別,核算項(xiàng)目等信息記錄到余額表中,在記錄這些信息的時候,系統(tǒng)要核對這些信息在相應(yīng)的基礎(chǔ)資料中是否存在,如果憑證上的一些信息不存在,則系統(tǒng)就不會把這些信息記錄到余額表中,就會造成憑證過賬后的數(shù)據(jù)與憑證過賬前的數(shù)據(jù)在查詢一些賬表時會產(chǎn)生不對。目前主要的問題是怎樣來分析憑證上的哪些信息在基礎(chǔ)資料中不存在,憑證上的會影響余額表中記錄的信息有科目,幣別和核算項(xiàng)目,如果憑證上的科目和幣別在基礎(chǔ)資料中不存在,系統(tǒng)在過賬時會提示出錯,因此一般都是憑證核算項(xiàng)目丟失時,在過賬時不會提示出錯而又影響了余額表中的數(shù)據(jù)。要知道哪些核算項(xiàng)目丟失了,首先要清楚系統(tǒng)中有核算項(xiàng)目橫表(t_ItemDetail)和核算項(xiàng)目縱表(t_ItemDetailV),一般以核算項(xiàng)目橫表為主要目標(biāo),此表中的數(shù)據(jù)都是在做憑證或科目掛核算項(xiàng)目時自動生成的,核算項(xiàng)目的丟失,主要就是核算項(xiàng)目橫表中的數(shù)據(jù)丟失。要查核算項(xiàng)目橫表中哪些核算項(xiàng)目記錄丟失,可以用下面的SQL語句來查詢:與憑證比較查找丟失的核算項(xiàng)目select distinct fdetailid from t_voucherentry where fdetailid not in (select fdetailid from t_itemdetail) order by fdetailid與余額表比較查找丟失的核算項(xiàng)目select distinct fdetailid from t_balance where fdetailid not in (select fdetailid from t_itemdetail) order by fdetailid如果這時查出了數(shù)據(jù)記錄,則就是這些FDetailID值丟失了,每個FDetailID都對應(yīng)了基礎(chǔ)資表(t_Item)中的FItemID。查出了丟失的FDetailID后,該怎樣把這些記錄給補(bǔ)上呢?第一種方法就是查核算項(xiàng)目縱表(t_ItemDetailV)中是否還存在這些丟失的FDetailID(在很多情況下,縱表中都會存在這些記錄),如果存在的話,就可以根據(jù)縱表的信息把這些記錄插回核算項(xiàng)目橫表中了。第二種方法就只能是回到相應(yīng)的憑證中,確定此憑證的業(yè)務(wù)所對應(yīng)的是哪些核算項(xiàng)目,然后在基礎(chǔ)資料表中找到這些項(xiàng)目FItemID值,再把這些值插入核算項(xiàng)目橫表中。核算項(xiàng)目數(shù)據(jù)丟失的問題在總賬中有時比較普遍,一般都是賬套升級時會產(chǎn)生如此情況,平時較少發(fā)生,但是有一種情況,即核算項(xiàng)目橫表中的零記錄,有時會經(jīng)常丟失,丟失零記錄時,憑證過賬后大部分的科目的余額數(shù)據(jù)都會不正確,以后碰到此種情況即可查找是否是核算項(xiàng)目橫表零記錄丟失造成的。案例九:有一賬套在進(jìn)行總賬結(jié)賬時,出現(xiàn)了問題,系統(tǒng)提示“本期損益類科目余額還沒有結(jié)平,不能結(jié)賬。”再進(jìn)行結(jié)轉(zhuǎn)損益后,出現(xiàn)如下憑證: 借:321 本年利潤 貸: 管理費(fèi)用計(jì)提福利費(fèi)/B003織帶部 (紅字) 管理費(fèi)用計(jì)提福利費(fèi)/B004繡花部 (紅字) 管理費(fèi)用計(jì)提福利費(fèi)/B003織帶部 管理費(fèi)用計(jì)提福利費(fèi)/B004繡花部 查看有關(guān)明細(xì)賬發(fā)現(xiàn)其其實(shí)是結(jié)平的,將該憑證審核過賬后,再進(jìn)行結(jié)賬,系統(tǒng)還是提示本期損益類科目余額沒結(jié)平。分析:從上面生成的憑證可以看出,這是一個核算項(xiàng)目的問題,管理費(fèi)用計(jì)提福利費(fèi)科目下面掛的是部門的核算項(xiàng)目,先從t_item表中查找到B003織帶部對應(yīng)的FItemID值,假設(shè)為100,再查找核算項(xiàng)目橫表(t_ItemDetail)中F2字段值為100的記錄有多少。正確情況下,t_ItemDetail表中的不同的FDetailID值在FdetailCount值相等的情況下對應(yīng)的各字段的值是不能重復(fù)的,如果有重復(fù)的數(shù)據(jù),則表示某個核算項(xiàng)目有重復(fù)的數(shù)據(jù)了。此賬套查出t_ItemDetail表中F2=100的記錄在FdetailCount值相等的情況下出現(xiàn)了兩條記錄,那就是這個核算項(xiàng)目的FDetailID值重復(fù)了;查詢B004繡花部也是出現(xiàn)同樣的情況。這時該如何處理呢?肯定是要把其中重復(fù)的數(shù)據(jù)刪除一個??梢赃@樣來處理:先反結(jié)賬到?jīng)]有出錯的期間,假設(shè)重復(fù)的FDetailID值分別為A和B,先找一下FDetailID值(A和B)在憑證中的狀況,如果早期的憑證中就存在其中一個FDetailID值,如A值,那么B值就是后為系統(tǒng)錯誤增加上的,那么就要把B值刪除;在刪除B值之前,先要把有B值的數(shù)據(jù)表的數(shù)據(jù)都改為A值,一般只要修改憑證即可,再把B值的記錄從t_ItemDetail表中刪除,再運(yùn)行 EXEC CleanItemDetailV存儲過程,把核算項(xiàng)目縱表中的數(shù)據(jù)改正,重新進(jìn)行過賬,這樣數(shù)據(jù)即可正確。案例十:總賬系統(tǒng)中的現(xiàn)金流量表,在T型賬戶中非現(xiàn)金科目下的流量和附表中的流量全部都指定過了,但現(xiàn)金流量表做出來數(shù)字卻是不對的,主表中經(jīng)營活動產(chǎn)生的現(xiàn)金流量凈額與附表中經(jīng)營活動產(chǎn)生的現(xiàn)金流量凈額兩個數(shù)字不相等,主表中現(xiàn)金及現(xiàn)金等價物的凈增加額與附表中現(xiàn)金及現(xiàn)金等價物的凈增加額兩個數(shù)字不相等。分析:碰到此種情況,先到總系統(tǒng)中查找一下是否存在多借多貸的現(xiàn)金類科目的憑證,在總賬中的現(xiàn)金流量表中,多借多貸的現(xiàn)金類科目的憑證在提取數(shù)據(jù)時系統(tǒng)提取不出,從而顯示的數(shù)據(jù)都是錯誤的,大多數(shù)客戶存在此種問題。解決方法有下面幾種:在做憑證時,手工指定多借多貸的現(xiàn)金類科目的憑證的現(xiàn)金流量項(xiàng)目;把所有的多借多貸現(xiàn)金類科目憑證拆分成一借多貸或一貸多借的憑證。排除這種情況外,那么就要從數(shù)據(jù)著手了。首先,在假設(shè)系統(tǒng)提取的憑證沒有錯誤的前提下,分析t_FlowCashBal表,系統(tǒng)提取的憑證數(shù)據(jù)全部都是放在此表中,在沒有指定任何現(xiàn)金流量項(xiàng)目之前,所有的數(shù)據(jù)都應(yīng)該是平的,如果不平,則是t_FlowCashBal表的FitemID和FsubItemID字段的值不正常,可以先把它們清除,再重新指定過應(yīng)該就會數(shù)據(jù)平衡。最后一種情況,就是提取過來的憑證是錯誤的,而這個錯誤來源于憑證數(shù)據(jù)中的對方科目,系統(tǒng)為什么不能處理多借多貸的現(xiàn)金類科目的憑證就是因?yàn)橄到y(tǒng)不能判別每條記錄的對方科目。怎樣來判定憑證中對方科目的數(shù)據(jù)是錯誤的呢,這就需要寫很多的SQL語句來查找到,對于一借一貸的憑證,借方記錄的對方科目就是貸方記錄的科目,反過來貸方記錄的對方科目就是借方記錄的科目;對于一借多貸的憑證,借方記錄的對方科目只能是貸方第一條記錄的科目,;對于多借一貸的憑證,貸方對方科目只能是借方第一條記錄的科目;在此排除多借多貸的憑證。