[摘要] 在大量的財務資料整理過程中,作者把電子數據處理的重復操作流程和方法加以歸納、加工,形成標準化的數據處理模型;據此,利用VFP語言編寫的數據轉換通用程序,經多年的實際應用,效果極為顯著,對規模較大、數據處理頻繁單位的財務管理工作,具有重要的參考與應用價值。
[關鍵詞] VFP語言程序 數據表轉換 設計與實現
一、 應用分析
在網絡經濟時代,大型數據庫系統以其優異性能,占據大部分市場份額。但并非說,單用戶的中小型數據庫系統無用武之地了。中小型數據庫系統,由于操作簡便、命令與函數易掌握,被廣泛用來解決日常數據的整理事務,成為重要的財務管理工具之一。
通常情況下,財務人員所取得的外部電子數據與實際需求之間可能存在偏差,為此而進行的合并、分解、篩選等數據整理工作不可缺少。在規模較大單位,會計核算、工資管理和固定資產管理前后的數據整理工作非常龐雜;有些數據處理,如采取簡單的查找方式去解決,不僅費時、費力、易出錯和難度大,而且處理結果也不太理想,有時更無從著手。其實,我們只要找出當中規律,問題就簡單多了。
對經常使用的數據處理方法,不妨借助于某些工具軟件,設計成標準化程序。本文基于VFP語言應用,提供的數據轉換通用程序,能大幅度提高財務管理者的工作效率和質量。
二、基礎條件
1.電子數據的來源和輸出格式必須是Excel(*.XLS)、標準文本(*.TXT)和數據表(*.DBF)等三種類型中的一種
2.計算機上預先安裝有專用數據庫軟件VFP6.0及微軟公司的辦公操作系統(其中包括Excel)
3.財務人員能熟練掌握上述兩種應用系統,否則軟件制作會非常吃勁
三、設計方案關鍵部件說明
1.基表(changebase.dbf)定義,基表是數據交換的關鍵表,用于設置表與表之間對照關系的表;由程序員預先定義,在數據交換對照關系控件中調用。應具備以下四個字段:
2.制作數據轉換程序表單
在啟動VFP6.0后,選擇“文件”、“新建(N)”,點擊“表單”,如采用“新建文件”,則在屏幕左上角窗口出現空白表單;在空白表單的屬性窗口,將“CAPTION”屬性修改為“財務數據交換表單”,“NAME”屬性修改為“CHANGE”,“ICON”屬性選擇“CHANGE.ICO”圖標;然后在空白表單中添加相應控件(如下圖所示)。
下圖列示了數據交換表單的控件功能及名稱。
當然,數據交換表單的制作還有其他方式。
3.主要功能介紹與實現
限于篇幅,本文只提供其中的數據轉換關鍵程序。【開始數據交換】控件(cmd_startchange_tables)click過程代碼如下:
local importtable,exporttable,crepl,cfind,cvalue
select 0
use (thisform.text_importtable.value) shared alias aaa/*打開源表并命名為 aaa
select 0
use (thisform.text_exporttable.value) shared alias bbb /*打開導出表并命名為 bbb
select changebase
set filter to !empty(item_out)/*篩選基表中導出表達式
go top
if thisform.Check_clearitem_data.value=1/*執行源表數據的清除過程
select changebase
scan/*循環基表,檢查源表數據類型,由此設置清除表達式
do case
case item_type='N'/*如為數值型字段,則設置為零處理
crepl='repl all '+alltrim(item_in)+' with0'
case item_type='D'/*如為日期型字段,則設置為空的日期格式
crepl='repl all '+alltrim(item_in)+' withCTOD(\"-- \")'
case item_type='C' OR item_type='M' /*如為字符型或備注型字段,則設置為空
crepl='repl all '+alltrim(item_in)+' with\"\"'
other/其他類型的字段,則不設置任何表達式
crepl=''
endcase
select aaa
crepl /*根據上述設置清除源表數據
select changebase/*回歸基表循環,執行下一字段的操作過程
endscan
endif
select aaa
go top
do while !eof()/*開始源表的數據循環過程
cvalue1=alltrim(thisform.combo_importtable_selectkey.value)
cvalue=cvalue1 /*將源表關聯字的值賦給 cvalue 變量
cvalue=alltrim(cvalue)
select bbb
cfind='loca for alltrim('+;alltrim(thisform.combo_exporttable_selectkey.value)+')==\"'+alltrim(cvalue)+'\"'
cfind/*查找滿足導出表關聯字的記錄
if found()/*如導出表記錄存在
select changebase
scan/*在基表中循環提取導出表達式
cvalue1=alltrim(item_out)
select bbb
cvalue=cvalue1 /*將導出表達式的計算結果賦給 cvalue 變量
select aaa
if empty(changebase.nosum)
/*如基表設置中源表字段為替換狀態,則在此定義替換命令
do case
case type('cvalue')='N'/*cvalue變量為數值型數據的替換命令
cvalue3='repl '+alltrim(changebase.item_in)+;
' with '+alltrim(str(cvalue,16,2))
case type('cvalue')='D' /*cvalue變量為日期型數據的替換命令
cvalue3='repl '+alltrim(changebase.item_in)+;
' with CTOD(\"'+DTOC(cvalue)+'\")'
other/*cvalue變量除上述類型數據外的替換命令
cvalue3='repl '+alltrim(changebase.item_in)+;
' with \"'+alltrim(cvalue)+'\"'
endcase
cvalue3/*根據上述設置,將導出表的計算結果替換到源表相應字段
else/*如基表設置中源表字段為累加狀態,則設置累加命令
cvalue3='repl '+alltrim(changebase.item_in)+;
' with '+alltrim(changebase.item_in)+'+'+alltrim(str(cvalue,16,2))
cvalue3 /*將累加結果寫入源表相應字段
endif
select changebase/*進入基表下一循環過程
endscan
endif
select aaa/*進入源表下一記錄的查找過程
skip
enddo
select aaa /*數據交換完畢,關閉源表和導出表
use
select bbb
use
select changebase
set filter to /*消除基表篩選狀態
thisform.list_changestatus_eventresult.additem('數據交換完畢!')
thisform.refresh/*刷新當前表單,完成數據交換過程
四、 實例解析
1.外部文件轉換
在財務數據處理過程中,會計人員所取得的關于人員工號、身份證號碼和所屬部門的信息資料,常見于Excel或數據表形式;與銀行的信息交換資料,多為標準文本文件。文本文件和Excel文件如何轉化為DBF格式文件?
Excel文件的第一行為表頭,作為文件的內容屬性,通過表頭便知數據的存放意義。打開Excel文件后,選擇“文件”、“另存為”,確定保存位置后,選擇保存類型為“dbf 3”等,點擊保存即可。用戶須注意表頭:列名不宜太長,避免重名。
標準文本轉換成DBF文件的方法較多。本文主要介紹兩種:
(1)在Excel空白文檔中選擇文本文件打開,在表的第一行插入一空白行,根據列內容寫入表頭,然后“另存為”DBF文件。
(2)先建立一DBF格式的空白表,表頭寬度與類型對應于文本文件中的數據;然后使用“append from ”命令,將文本文件追加到DBF表中。
2.數據交換步驟
在啟動數據交換表單后,點擊(源表)【查找】,提取學生表;或在文本框中輸入“student.dbf”后回車。如要修改學生表結構,則點擊(源表)【修改字段】,字段修改完畢保存。此時在數據交換關系中顯示源表字段和類型,在(源表)關聯中顯示字符型字段。
選擇(源表)【關聯】,找出與導出表連接的關聯字。
在導出表行,重復上述兩步,提取銀行信息表和選擇導出表關聯字。
如要清除源表中有導出表達式的數據,則點擊【清除源表關聯項的數值型數據】;如數值型數據需要累加,則點擊【累加切換】;如源表與導出表字段需自動匹配,則點擊【自動匹配】;如已設置的導出表達式存在問題,必須全部清除后才能重新設置,則點擊【清除全部表達式】。
在采用手工設置導出表達式時,可直接在導出表達式列表中輸入,或點擊“導出表字段選擇”列表控件,引導表達式輸入。
數據交換工作準備完畢,點擊【開始數據交換】,執行數據交換過程。
3.以高校學生收費為例,介紹數據轉換功能的應用
(1)資料及其制作。財務部門取得來自教務部門的關于學生學號、姓名、性別、班級、專業、系、學院和身份證號碼等Excel格式文件,從銀行取得關于學生姓名、身份證和銀行卡等文本文件,以及財務部門擁有的關于班級編碼、專業學費標準和住宿費標準的DBF文件。
通過Excel,將學生信息另存為student.dbf,并根據實際需要添加或修改部分字段;將銀行信息制作成bankcard.dbf。
(2)實例操作。學生信息表整理,關聯:班級名稱(dname)。具體操作見下圖:
4.解析
實際財務管理工作所面臨的數據處理情況,遠比實例要復雜得多。本文提供的數據轉換程序,解決了兩表或多表間有一項關聯的數據交換問題,而撇開了數據的多項關聯、讀入和輸出。讀者不妨嘗試制作,讓該程序擴充成完整的數據處理系統。這樣,對財務工作的幫助會更大。
五、價值實現
經十多年的使用與完善,該數據交換功能在筆者所在學校的職工工資、校內津貼、職工醫療費報銷、學生獎助學金發放和貸款抵扣等銀行打卡轉賬資料的制作中發揮了極其重要作用。據不完全估計,2006年處理的資金量就達7千萬元。財政部關于《行政事業單位工資和津貼補貼有關會計核算辦法》(財庫[2006]48 號)規定,單位應以銀行卡形式向職工發放工資(離退休費)和地方(部門)津貼補貼,中央和省級單位一律以銀行卡形式發放,不得發放現金。數據轉換功能,為單位財會人員處理銀行卡業務,提供了極為重要的交換工具。
數據轉換功能作用不在經濟效益,主要體現在它的實際利用效果上,既節省了工作時間、減輕了勞動強度,又降低了手工處理的出錯率,提高了財務工作效率和質量。筆者所在學校每年新生約6千人,學生表有70多個數據項目。若使用目前流行的、財務人員較熟悉的Excel,采用拖放修改方式去制作學生信息表,即使是一位熟練的操作員,一周時間很難結束;而借助于該功能,輔以VFP命令與函數,包括學生收費初始化在內的工作,一天時間就能輕松完成。我們也試用于部門預算關于職工信息表(1300員工)的整理中,寫好數據對照關系,十分鐘之內便實現了數據的比對與轉換。
時下,全國的機關事業單位正緊鑼密鼓地抓緊資產清理工作,在電子數據比較完備的單位,其中實物帳的處理工作,由該功能實現,其效果會更加明顯。
參考文獻:
[1]陳宗興:中文版Visual FoxPro 6.0中文版程序設計,北京:中國鐵道出版社,1999年
[2]吳克杰等:中文Visual FoxPro 6.0屬性 事件 控件及方法,北京:北京航空航天大學出版社,1998年
[3]周予濱:Visual FoxPro 5.0中文版命令與函數大全,北京:中國水利水電出版社,1998年
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。