劉鴻印 鄧傳福 鮑常宏
(中車齊齊哈爾車輛公司,黑龍江齊齊哈爾 161002)
基于Access VBA的庫房管理系統的設計與實現
劉鴻印鄧傳福鮑常宏
(中車齊齊哈爾車輛公司,黑龍江齊齊哈爾161002)
本文介紹了某公司配件供應庫房管理數據庫系統開發的思路和過程,采用MS Access桌面數據庫管理開發工具,綜合運用其查詢、窗體、報表以及內嵌VBA的編程功能,遵循精益管理理念并依據庫房實際運行流程,將庫房箱單生成、發貨標簽打印、開具發票等多種主要功能集成,同時加入庫存盤點、銷售數據匯總、收款管理等輔助功能,有效減少了管理人員操作時間并提高了文件的準確度,進而保證了貨款按時回收。
數據庫庫房管理箱單發貨標簽發票
某公司由于業務發展需要,為用戶提供全壽命產品服務,需要在用戶所在地設立配件庫房,并且隨著產品進入維護保養周期,配件供應量呈持續增長趨勢,庫房管理操作中的諸如發貨箱單、發貨標簽、發票以及各種統計文件的工作量也隨之增加。通過w ord、excel來處理這些文件,操作繁瑣、工作量大,同時準確性也不容易保證,進而會影響到貨款的及時回收。而計算機和數據庫應用技術的發展,為解決這一問題提供了廣闊的空間,MS Access這一使用廣泛的桌面型數據庫管理系統即可滿足該庫房基礎數據管理的需要,能夠大幅減輕工作人員的勞動強度、提高效率和各類文件管理及數據統計的準確性。
圖1 入庫數據和訂單數據的對應關系
為了實現本系統的目標,主要解決以下幾個方面的問題。
(1)配件信息對應問題:由于該公司對產品管理中使用產品設計圖圖號作為唯一標識,而用戶則采用其ERP系統中的物料號作為配件管理的唯一標識,并且在配件的描述上,也存在習慣上的差異。采用在Access中建立單獨數據表,存儲產品設計圖圖號同用戶ERP系統中的物料號一一對應關系以及用戶對配件名稱的慣用描述。(2)配件出庫箱單的生成:由于入庫零件箱單中并不包含用戶的訂單信息,需要從入庫零件匯總中篩選加入訂單號,從訂單完成情況的基礎數據中加入零件序號。因此出庫箱單數據基于入庫箱單、入庫零件匯總以及訂單完成情況基礎數據三個文件生成,鑒于同一批入庫配件存在不同訂單的同一種零件一起發貨、不同訂單的零件混合包裝、同一批入庫配件不一定同一批發出等實際因素的存在,配件出庫箱單的生成分為加入訂單號、加入零件序號兩個過程,采用實時信息對照、帶有糾錯功能的半自動程序控制予以實現。(3)發貨標簽的生成和打印:發貨標簽主要記錄包裝內配件的訂單號、本批次包裝序號、包裝總件數、批次參考號、以及發貨目的地等信息,除發貨目的地需要從訂單的基礎數據中獲取外,其余均可從配件出庫箱單中獲取。由于同一包裝內配件涉及的訂單號數量不確定,這就不能使用Access提供的分組報表功能實現,同時交叉查詢的列標題不能輸出到表數據或者報表數據,因此需要對出庫箱單數據每個包裝中涉及的訂單號進行匯總并編號,以編號作為交叉查詢的列標題,再將交叉查詢結果輸出到excel,然后將輸出的excel導入到固定格式表中,以此表作為標簽報表的基礎數據,實現標簽的自動生成。(4)發票自動生成:根據用戶的要求,不同批次的配件不能開在同一張發票內,同一批次不同訂單的配件不能開在同一張發票內,因此在發票報表生成前,需要根據批次、訂單號來指定出庫配件的發票號和發票日期即可,系統采用VBA一鍵自動循環、判斷的方式為不同批次和訂單號的配件指定發票號,再通過輸入發票號的方式查詢發票報表,并在報表中對發票總額,稅額等進行匯總。
圖2 加入物料號窗體
圖3 標簽樣式
(1)系統的功能設計。根據庫房運行管理的經驗,此系統主要包含訂單管理、配件入庫管理、出庫管理、庫存管理等模塊,實現用戶訂單數據維護、入庫基礎文件導入、發貨箱單生成、發貨標簽自動生成、發票自動生成、庫存盤點等主要功能和訂單執行情況查詢、收款統計、催款文件生成等輔助功能。(2)Access對象設計。通過11張表單存儲庫房管理基礎數據,6張表單存儲程序運行中的臨時記錄數據,設計了38種查詢,涵蓋選擇查詢、生成表查詢、追加查詢、更新查詢、交叉查詢和刪除查詢功能,各類功能共計15個窗體,以及發貨標簽、發表、發貨箱單及庫存4張報表。
4.1配件信息對應的實現
配件信息對應是本系統其他功能開發的根本,入庫數據和訂但數據均同零件信息數據表創建對應關系,如圖1所示,一方面解決了配件信息的對應,同時也減少了用戶訂單輸入的工作量。
4.2出庫箱單的生成
出庫箱單的生成第一步需要從入庫匯總數據中篩選訂單號并添加到表中,系統設計時將對應批次的入庫匯總數據作為子窗體加入到窗體中作為參照,通過選取子窗體中的對應物料號的訂單號添加到窗體主表中,添加訂單號時,系統判斷選擇的訂單號對應的物料號和主表中的物料號是否對應,通過另一子窗體對已經添加訂單號的條目進行實時監控,當監控子窗體和參照子窗體的信息完全對應時可進行數據保存,詳見圖2所示。
當點擊使用當前訂單號按鈕時對臨時變量進行賦值,并通過調用“填寫訂單號子程序”對選定條目增加訂單號,語句如下:
Private Sub使用當前訂單號_C lick()
If[參照子窗體].Form![物料號]<>[物料號]Then
MsgBox"選擇的當前訂單號和主表中的數據不對應,請重新選擇。"
Else
dangqiandingdanhao=[參照子窗體].Form![訂單號]
dangqianw uliaohao=[參照子窗體].Form![物料號]
填寫訂單號
End If
DoCm d.RunCommand acCm dRefresh
End Sub
Pub lic Sub填寫訂單號()
If dangqianw u liaohao<>[物料號]Then
MsgBox"選擇的當前訂單號和主表中的數據不對應或沒有選擇當前訂單號,請重新選擇。"
Else
訂單號.Value=dangqiandingdanhao
End If
End Sub
監控子窗體通過對主表數據進行匯總查詢并更新顯示來實現。
再通過類似的方式,對箱單數據再加入對應訂單號中的零件序號,就得到了用以生成庫房發貨箱單分組報表的基礎數據。
4.3發貨標簽的生成和打印
在獲得了庫房發貨箱單的基礎數據上,再通過交叉查詢使同一包裝序號的不同訂單號存儲在表內不同的列,然后再通過查詢對應相應的發貨目的地,就得到了發貨標簽也就是庫房嘜頭的報表數據。在使用交叉查詢時,先通過Dcount函數得到表中的記錄數,以記錄數為循環次數,對每一個包裝內零件對應的訂單號進行編號,代碼如下:
Private Sub訂單號編號_C lick()
DoCm d.GoToRecord acDataForm,Me.RecordSource,acFirst
baozhuangxuhao=包裝序號.Value
dingdanhao=訂單號.Value
n=1
For i=1To xunhuancishu
If baozhuangxuhao=包裝序號.Value Then
If dingdanhao<>訂單號.Value Then
n=n+1
Else
n=n
End If
Else
n=1
End If
baozhuangxuhao=包裝序號.Value
dingdanhao=訂單號.Value
條目訂單編號.Value=n
DoCm d.GoToRecord acDataForm,Me.RecordSource,acNex t
Nex t i
End Sub
接著將更新完的數據以訂單號編號為列標題,進行交叉查詢,通過導出到excel,再倒入到固定格式的表內,得到發貨標簽的基礎數據,通過設計報表的格式、面設置并指定打印設備為專用熱敏標簽打印機,就可以自動生成并打印如圖3形式的發貨標簽。
4.4發票自動生成
當進行庫房發貨操作后,系統自動將已經發貨的配件匯總并通過追加查詢的方式添加到庫房發貨數據,數據按照發貨日期、訂單號和零件序號逐條生成,開發票的過程實際是對這些數據按照訂單號對相同發貨日期的條目逐條添加發票號和發貨日期,這里采用一鍵添加的方式來實現,代碼如下:
Private Sub發票設定_C lick()
DoCm d.GoToRecord,,acFirst
picihao=批號.Value
dingdanhao=訂單號.Value
fapiaohao=fapiaohaozuida+1
Do W hile m<1000
If批號.Value<>0Then
If p icihao=批號.Value And dingdanhao=訂單號. Value Then
發票號.Value=fapiaohao
日期.Value=Date
picihao=批號.Value
dingdanhao=訂單號.Value
DoCm d.GoToRecord,,acNex t
Else
fapiaohao=fapiaohao+1
發票號.Value=fapiaohao
日期.Value=Date
picihao=批號.Value
dingdanhao=訂單號.Value
DoCm d.GoToRecord,,acNex t
End If
Else
m=999
DoCm d.GoToRecord,,acPrevious
End If
m=m+1
Loop
xinfapiaohaozuida=DMax("發票號",Me.RecordSource)
End Sub
窗體加載時對窗體主表數據進行查詢,通過Dmax函數找到已經開具發票的編號最大值,以編號最大值+1開始設置發票號,當檢測到當前數據批次號為空值是完成循環,這樣就得到了發票報表的基礎數據,通過打開設置好格式的發票報表并輸入發票號就可以查詢打印對應的發票了。
本系統充分運用了Access VBA的數據查詢等管理功能,結合報表輸出和編程設計,遵循精益管理理念,將庫房各項管理的主要工作進行集成,能夠有效降低文件操作的工作量并提高準確率,以最少的時間和人員投入為客戶提供及時準確的服務。系統開發工具只需要使用Access,實現更為簡單快捷,提高了工作效率和庫房管理的信息化水平。
[1]黃崑,劉曉娟.基于Access VBA的成績查詢與打印系統的設計與實現[M]《.中國教育信息化》.