
【摘要】針對在實驗教學中常遇到一些用友客戶端無法解決的業(yè)務(wù)數(shù)據(jù)問題,本文以總賬及其下級明細科目合計金額不一致的問題為例,從用友后臺SQL數(shù)據(jù)庫方面對此做些分析,并提出解決問題的方法。
【關(guān)鍵詞】用友ERP 財務(wù)軟件 SQL語言 實驗教學
在用友會計電算化實驗教學課中常遇到一些會計業(yè)務(wù)數(shù)據(jù)錯誤的問題,而有些問題是無法通過用友的企業(yè)門戶或系統(tǒng)管理等客戶端來解決的,如我們在實驗中較常遇到的總賬與其下級明細科目合計金額不一致就屬于此類問題。針對類似的用友軟件數(shù)據(jù)出現(xiàn)的問題,我們試從數(shù)據(jù)庫方面來分析該問題產(chǎn)生的原因并提出解決的方法。
一、余額數(shù)據(jù)出現(xiàn)不一致的問題
我院會計電算化實驗教學軟件使用的是用友U8.61網(wǎng)絡(luò)版,即是在專門的服務(wù)器上為每個學生建立一個獨立的賬套,學生通過client/Serve的模式從企業(yè)門戶登錄用友服務(wù)器上分配給自己的賬套,獨立完成會計電算化總賬和報表模塊的實驗操作。在期初余額錄入時學生較常遇到總賬一級科目與其明細科目合計金額不一致的問題,以材料采購(1401)為例,它的一級科目、明細科目及科目的余額如圖1所示:
從圖2可以看出,一級科目材料采購的金額為49 255,是由A材料、B材料、C材料、燃料、其他材料和低值易耗品六個二級(下級)明細科目金額的總和構(gòu)成。正常情況下,材料采購一級科目的金額和它的下級明細科目金額的總和兩者應(yīng)該是一致的,但在實際中卻經(jīng)常出現(xiàn)兩者金額不一致的現(xiàn)象,這種現(xiàn)象主要有兩種情況:①材料采購一級科目的金額小于其下級明細科目金額的總和。此時如果刪除其全部下級科目的金額,會發(fā)現(xiàn)材料采購一級科目的金額為負數(shù)。以圖2為例,當刪除其全部下級科目的期初余額時,此時材料采購金額本應(yīng)該為零,但其卻顯示為-3 000。②材料采購一級科目的金額遠大于其下級明細科目金額的總和,甚至達到兩倍,即在圖2中材料采購金額本應(yīng)為49 255,卻顯示為98 510。
手工會計操作中采用平行登記法記賬,即是凡涉及明細賬戶的同一筆經(jīng)濟業(yè)務(wù)要在總分類賬戶和其所屬明細分類賬戶中按同時、同向、同金額的方法進行登記,月末再將總分類賬和明細賬兩者的金額進行核對,一般不容易出錯。而在會計電算化的操作中,無論是期初余額還是憑證的錄入,錄入的金額都是直接錄入到末級科目下,一級及非末級科目是無需錄入數(shù)據(jù)的(用友期初余額錄入界面,一級和非末級的科目余額輸入欄為灰色,呈不可錄狀態(tài)),總賬(一級)科目的金額是由系統(tǒng)根據(jù)其下級明細科目的金額自動計算得出,所以發(fā)生兩者金額不一致的現(xiàn)象,我們可以判斷是軟件或系統(tǒng)的問題,而非人為的錯誤操作所致。
另外,由于一級科目有數(shù)據(jù)(負金額),如按通常處理錯誤的方法——通過刪除材料采購一級及其明細科目的金額和科目再重建的方法是行不通的。余額不一致不僅僅影響了材料采購單個科目和資產(chǎn)賬戶,而且還影響到期末余額發(fā)生表、資產(chǎn)負債表等報表數(shù)據(jù),并導(dǎo)致試算不平衡,從而無法記賬和結(jié)賬。一個小錯誤影響了全局,而用戶明知錯誤所在,又因無法修改而束手無策。
二、問題產(chǎn)生的原因分析及糾錯
發(fā)生余額不一致問題后,以往的解決辦法只能是將此賬作廢并重建賬套、重新進行基礎(chǔ)資料的設(shè)置等初始化工作,由此增加了工作量且令人沮喪,尤其是在電算化會計考試中,出現(xiàn)這種情況會嚴重地影響考試。因此找出問題發(fā)生的原因和快速的解決方法是非常必要的。針對這種情況,我們試從用友后臺SQL數(shù)據(jù)庫方面分析查找出現(xiàn)這種余額不一致的原因。用友財務(wù)軟件采用客戶/服務(wù)器模式,當用戶使用系統(tǒng)管理程序建立賬套時,會在服務(wù)器的SQL數(shù)據(jù)庫中建立一個應(yīng)用數(shù)據(jù)庫,其命名規(guī)則是ufdata_賬套號_年度,用于儲存各年度的賬務(wù)數(shù)據(jù)。假定要建立一個賬套號為001、會計期間為2010的賬套,則會在后臺SQL數(shù)據(jù)庫建立一個ufdata_001_2010的數(shù)據(jù)庫。數(shù)據(jù)庫中儲存有各種數(shù)據(jù)表,我們試從其相關(guān)的數(shù)據(jù)表中來查找問題的原因。
1. 材料采購總賬科目金額少于其下級明細科目金額的總和。在期初余額錄入中刪除其全部下級科目的金額,會發(fā)現(xiàn)一級科目材料采購的金額出現(xiàn)-3 000,如圖3所示:
在ufdata_001_2010數(shù)據(jù)庫中的gl_accsum表為科目期初余額數(shù)據(jù)表,錄入期初余額后,各會計科目含總賬和明細科目的各會計期間發(fā)生的金額數(shù)據(jù)儲存在本表中。圖4為在SQL查詢分析器中使用SQL語言查詢gl_accsum表十二月份的材料采購科目的期初余額數(shù)據(jù)。數(shù)據(jù)庫中g(shù)l_accsum表中的科目數(shù)據(jù)與用友軟件企業(yè)門戶的期初余額錄入界面的數(shù)據(jù)是一致的。圖4(材料采購科目)為當出現(xiàn)負數(shù)現(xiàn)象時使用SQL語句查詢gl_accsum表的查詢結(jié)果。從圖4記錄1可以看出,1401材料采購的數(shù)據(jù)有錯誤,cbegind_c字段值應(yīng)為平,me字段不應(yīng)有金額。出現(xiàn)這種情況的原因可能是:當用戶錄入期初余額時,或因系統(tǒng)資源負載(網(wǎng)絡(luò)版、多賬套接入),或系網(wǎng)絡(luò)方面的原因造成SQL數(shù)據(jù)庫的Transact-SQL事務(wù)回滾而產(chǎn)生的錯誤。解決問題的方法只需在gl_accsum表中刪除或修改1401記錄,便可解決該問題。
2. 總賬(一級)科目的金額是其下級明細科目金額總和的兩倍。ufdata_001_2010數(shù)據(jù)庫中code表為儲存會計科目的數(shù)據(jù)表,表中記錄了會計科目名稱、科目編碼、賬戶類型和借貸方向等屬性(見圖1)。在code表中bend字段是邏輯數(shù)據(jù)類型,值為0或1,當bend字段值為1時,說明該會計科目是末級科目;當bend字段值為0時,則其為非末級科目——父級或一級科目。如圖1中1401和140106為非末級科目,所以其bend字段值為0,其他末級科目bend字段值為1。出現(xiàn)兩倍的現(xiàn)象是因為:一級科目記錄其bend字段值應(yīng)為0,但因系統(tǒng)的錯誤而變成1,因此系統(tǒng)把一級或父級科目錯誤地當成末級科目,從而再次重復(fù)計算其金額。如材料采購的bend字段值應(yīng)為0,但因系統(tǒng)的錯誤變?yōu)?,按正常情況1401的金額是49 255,但因系統(tǒng)誤認為材料采購1401是末級科目,其金額49 255再次參與計算,即材料采購科目的金額98 510為正確金額的兩倍。糾正錯誤的方法只需把bend字段值1改為0,即讓系統(tǒng)確認材料采購為一級科目,使其金額不再參與計算。
三、基于SQL語言的解決方法
用友軟件采用的是MS SQL Server關(guān)系型數(shù)據(jù)庫,運用SQL(結(jié)構(gòu)查詢語言)可實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)的查詢、修改或刪除等。通過分析用友賬套所屬的數(shù)據(jù)庫和表結(jié)構(gòu),并明了金額產(chǎn)生不一致的原因后,我們只需采用SQL語言就可以直接修改或刪除數(shù)據(jù)庫中因系統(tǒng)出現(xiàn)的錯誤記錄。
使用SQL語言修改或刪除數(shù)據(jù),之前必須先建立與數(shù)據(jù)庫的連接。連接數(shù)據(jù)庫的方法可以在服務(wù)器或已安裝SQL2005數(shù)據(jù)庫客戶端的計算機上使用SQL查詢分析器,它是一個界面友好的圖形工具,能為編寫、執(zhí)行SQL語句提供一種交互式環(huán)境并返回執(zhí)行結(jié)果。另一種方法是在DOS提示符下使用sqlcmd實用工具,登錄SQL服務(wù)器執(zhí)行Transact-SQL語句,來實現(xiàn)數(shù)據(jù)的修改。
本實例是采用sqlcmd工具執(zhí)行SQL命令來實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的修改,具體命令及注釋如下:
1. 登錄SQL數(shù)據(jù)庫并打開賬套所屬數(shù)據(jù)庫。
Sqlcmd-S uf-U sa/∗用sa用戶登錄SQL數(shù)據(jù)庫名為UF的服務(wù)器,輸入密碼后登錄∗/
Use ufdata_001_2010/∗打開賬套001出錯的數(shù)據(jù)庫∗/
Go/∗ go為SQL語句的結(jié)束并執(zhí)行語句命令,下面省去∗/。
2. 對于總賬科目的金額小于其下級明細科目金額的總和的修改方法,可以直接使用delete命令刪除gl_accsum數(shù)據(jù)表中出錯的總賬及其下級所有的明細科目數(shù)據(jù),然后在期初余額錄入重新錄入。
Delete gl_accsum where ccode like 1401%
/∗刪除gl_accsum表中科目代碼為1401的總賬及其下級所有的明細科目數(shù)據(jù)記錄,其中1401%中的%號為通配符,即刪除條件為一級科目1401下的所有下級明細科目記錄∗/。
3. 總賬科目的金額是其下級明細科目金額總和的兩倍,其原因是在code數(shù)據(jù)表中一級或父級科目的bend字段值因系統(tǒng)錯誤設(shè)為1,只需用update命令把值1更改為0即可:
Update code set bend=0 where ccode=1401
在用友軟件應(yīng)用中,經(jīng)常遇到諸如余額不一致等情形無法通過用友程序來解決的問題,在了解用友賬套的數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,我們可從其后臺數(shù)據(jù)庫分析入手,嘗試采用SQL語言來直接有效地解決類似的數(shù)據(jù)問題。
主要參考文獻
1. 何日勝.會計電算化系統(tǒng)應(yīng)用操作(第四版).北京:清華大學出版社,2011
2. Dejan Sunderic著.熊桂喜譯.SQL Server 2000高級編程技術(shù).北京:清華大學出版社,2002
3. 袁鵬飛.中文版SQL Server 2000數(shù)據(jù)庫系統(tǒng)管理.北京:人民郵電出版社,2001
【作 者】
胡志宙
【作者單位】
(嘉應(yīng)學院經(jīng)濟與管理學院 廣東梅州 514015)