ERP軟件是提升企業管理效率極具威力的工具,目前國內許多企業都在準備采用ERP軟件。筆者通過自己的實際應用和設計經驗,介紹一種實用的ERP核心算法,適合國內中小規模企業(3000人以下企業)的使用。
ERP軟件的核心
ERP就是企業資源管理,它的前身是MRP,即物料需求管理,MRP最早應用于生產制造企業,生產制造企業收到各種各樣的訂單時,單憑手工和經驗往往不能很好地解決這樣一個問題: 手頭物料夠不夠用?什么時候需要采購什么物料?采購量為多少合適?而MRP可以很好地計算出物料需求,從而幫助企業管理人員做好物料的采購準備工作,既能保證生產不缺料,又不會積壓大量的庫存。物的流動與積壓往往伴隨著資金的流動與積壓,所以后來MRP中加進了財務模塊,在財務上對物流與庫存進行有效的管理,這就是MRPII,即第二代的MRP。將MRP管理的思想發揮得最為極至的當數日本的豐田汽車公司,豐田倡導的“零庫存”,“JIT”(及時供應)的先進管理概念在世界上備受推崇。零庫存就是要盡可能地降低庫存,因為任何庫存都意味著資金的積壓。而JIT(及時供應)就是說企業在最恰當的時候收到恰當的物料,既不缺料,也不會積壓。
現代企業的客戶和供應商的地域范圍都大大擴展了,不少企業在全國乃至全世界范圍進行銷售和采購,這樣物料流動的成本是很高的。對此筆者就有切身的體會,筆者幾年前在廣東一家外資企業做生產管理工作,有一次接到一張重要的訂單,開始生產后才發現,生產過程必需的銅線很快就要斷料了,這種銅線是我國臺灣省供應的,平常都提前幾個月大批訂貨,從臺灣海運過來。為了讓生產線不停工(生產線停工的成本也很高的),只好讓臺灣的供應商馬上空運(經香港中轉)幾軸銅線過來應急,這樣平白多花了近萬元的空運費。
當前,制造企業面臨著更大的挑戰,因為個性化的時代需求意味著更多的款式,更小的批量,這樣在物料的采購和生產的管理上難度都比大批量的制造難得多。十年八年不變地只生產單一的產品已經成為歷史,現在就算比競爭對手慢一步推出新產品也會給企業帶來不少損失。如在中國移動通信市場上,摩托羅拉的大塊頭模擬手機曾經獨步天下,風光一時,后來愛立信公司推出了小巧玲瓏的數字手機,一下子成為了市場的寵兒,后來幾年,愛立信公司的手機款式一直沒有多少改變,而諾基亞卻不斷地推出新潮的款式,得到市場的認可,迅速成為手機市場的新寵。
MRPII確實極大地幫助了企業應付這些挑戰,不過它自己也需要變革以應付更多的挑戰。企業的管理主要包括:人(人力資源)、財(資金)、物(物料、產品和機器設備、廠房等),MRPII軟件的管理范圍還沒有包括全部企業管理資源。ERP軟件進一步擴大了MRPII軟件的管理范圍,它把MRP中“物”的范疇擴大到企業所有可管理的資源,如人力資源,機器設備能力等等。
ERP最核心的功能是幫助企業管理好可用資源,這其中最重要的當然還是財(資金)、物(物料、產品)。
物料清單(BOM)
所有的ERP軟件都離不開物料清單(BOM),BOM是所有ERP運算的基礎,對資源的管理就是在BOM的基礎上做BOM的展開運算。BOM是產品的配方,它列出制造某一種產品所需要的所有物料的清單。每個企業生產的產品不同,所用的材料不同,因而BOM是不同的。ERP軟件能否成功實施,在很大程度上取決于能否整理出本企業的一個準確的BOM。在整理BOM時,需要分輕重,次要的無關緊要的物料可以不包括進去,這樣就能抓住關鍵。
當有了一個產品配方在手時,就幾乎等于擁有了解決企業資源管理問題的金鑰匙,這樣當收到了訂單,或是按銷售預測制定了生產計劃后,就能計算反推出: 手頭物料夠不夠用?什么時候需要采購什么物料?采購量為多少合適?在ERP軟件中,“物”的范疇擴大到企業所有可管理的資源,如人力資源、機器設備能力等等,這樣就能計算反推出:手頭人力資源、機器設備能力夠不夠用?資金夠不夠用?能不能接這張訂單?什么時候需要什么資源?多少量最合適?在ERP軟件中,產品配方中也可以包括制造某一種產品所需要的人力資源、機器設備能力、資金等資源的清單。從這里也可以看出,在工程項目管理上,ERP也可以大展身手。所以說準備好本企業的一個準確的BOM已經成功了一半了。
不同的ERP系統采用不同的BOM存儲結構,本文介紹的算法采用單層BOM存儲結構,它的好處是簡單、易用、擴展性好,可以實現無限的層次。圖1是一個簡單的BOM結構示意圖。
這樣的結構的另一個優點是BOM表的輸入與維護相當容易,用戶用Excel就可以準備BOM表了,比較方便。材料用量和材料提前準備日數是BOM的兩個重要參數,它們分別從量和時間上控制實現“零庫存”、“JIT”(及時供應)的最高目標。
有一點要注意到的是,現在所說的產品、材料是包括了所有資源的,而且產品與材料之間只是相對而言的。這樣所有的資源(產品、物料及其他資源)都放到了一個數據庫中,簡化了管理,這也是ERP 帶來的新概念。這樣企業的BOM核心部分只有兩個數據庫,一個是資源庫,它包括了所有的資源(產品、物料及其他資源);另外一個就是材料構成表(BOM)。這樣的好處在于:利用BOM做展開時就相當方便了,可以方便地擴展應用的范圍,從基本的物料需求,到人力、機器設備等其他資源,再到資金、項目進度管理,而惟一需要做的就是將它們放到資源庫里,所以這種結構能充分地展示ERP的優點。
本算法采用單層BOM存儲結構的另外一個好處是:用戶使用中很方便,不需要對資源(產品、物料及其他資源)做任何特別編碼,也不需要理會層次的問題。這使得ERP的實施變得更簡單,原來可能要花幾個月甚至大半年來準備BOM,現在只要一兩周可能已足夠了。這對許多中國企業來說可能是非常重要的,因為資金雄厚的歐美大企業可以花上1~2年時間實施ERP系統,而許多中國企業整天都面臨著生存發展的嚴峻問題,它們更需要快速的立桿見影的東西來提升自己的競爭力。
這種結構的另外一個優點是能夠比較好地處理替代件問題。替代件問題是困繞MRP/ERP的老大難問題,當一個產品的生產既可以用A部件,也可以用B、C、D等部件時,電腦處理起來就會很費勁。而采用單一資源庫以后,可以將替代件歸類為一個虛擬類,并建立一個類,而BOM只引用該類。
同樣,采用單一結構還能很好地簡化BOM表,因為在許多企業,如鞋廠,不同尺碼的鞋的BOM 差別往往在用量的多少,按比例地增加或減少,或大部分是相同的,而差別只在一兩樣配件上。單一結構就能很容易實現虛擬中間件,如一個鞋廠有10000種款式,每種鞋的物料有50種,如果單純的相乘,就是10000×50 =500000種物料配方,而將各種款式分類后,通過增加一些虛擬中間件后,如A款鞋公用件,那么最終需要的物料配方可能不到20000就足夠了,給實際應用和計算帶來很大方便。
展開計算的核心算法
當BOM準備好以后,就可以進行ERP展開計算了,這里介紹一種展開算法。
算法的具體實現步驟是:
1. 清空臨時數據庫;
2. 從客戶訂單數據庫讀入實際訂單或銷售預測,插入到臨時數據庫中,這就是待展開的需求;
3. 從臨時數據庫讀出需求,同時讀取材料構成表(BOM)中相應的物料需求項,并插入到臨時數據庫中,這就是展開的子層需求;
4. 重復3,直到算完所有的層,或者算到用戶指定的層(應該允許用戶選擇,特別是當層次數很多時);
5. 從庫存數據庫讀入手頭的庫存量,插入到臨時數據庫中,這就是庫存量;
6. 從生產訂單數據庫讀入手頭的訂單,插入到臨時數據庫中,這就是在制量;
7. 從采購單數據庫讀入手頭的采購單,插入到臨時數據庫中,這就是在購量。
部分關鍵代碼如下:
’下面做展開計算,從頂層到最底層
DoNextLevel:
MySqLcalling = “select * from ERPTemp where 狀態<>1 order by 產品編號”
If Myrs.State = 1 Then Myrs.Close
Set Myrs = Nothing
Myrs.Open MySqLcalling, MyDE, adOpenStatic, adLockBatchOptimistic
Myrs.MoveFirst
產品編號 = -1
Do Until Myrs.EOF
If Myrs(“狀態”) = 2 Then
Myrs(“狀態”) = 0
GoTo ReachNewRecord
End If
If 產品編號<>Myrs(“產品編號”) Then
產品編號 = Myrs(“產品編號”)
MysqlERP =“select 產品編號,材料編號,材料用量,材料提前準備日數 from產品材料構成表where 產品編號=”& Myrs(“產品編號”)
If MyDE.State= 0 Then MyDE
.Open
If MyRsERP.State = 1 Then MyRsERP.Close
MyRsERP.Open MysqlERP,
MyDE, adOpenForwardOnly, adLockReadOnly
End If
If Not MyRsERP.BOF Then
MyRsERP.MoveFirst
Do Until MyRsERP.EOF
TheNeededMonth = DateDiff(“m”, Now, DateAdd(“d”, -MyRsERP(“材料提前準備日數”), Now()))
If TheNeededMonth< 1 Then TheNeededMonth = 0
If TheNeededMonth>12 Then TheNeededMonth = 12
If ERPbyWeek Then
’by week
TheNeededMonth = DateDiff(“WW”, Now, DateAdd(“d”, -MyRsERP(“材料提前準備日數”), Now()))
If TheNeededMonth< 1 Then TheNeededMonth = 0
If TheNeededMonth > 52 Then TheNeededMonth = 52
End If
Myrsbookmark = Myrs.Bookmark
Myrs數量 = Myrs(“數量”)
Myrs.AddNew
Myrs(“分組序號”) = 4
Myrs(“分組”) = “需求量”
Myrs(“狀態”) =“2”
Myrs(“產品編號”)=
MyRsERP(“材料編號”)
Myrs(“數量”) = MyRsERP(“材料用量”) * Myrs數量
Myrs(“日期”) = DateAdd(“d”, -MyRsERP(“材料提前準備日數”), Now())
Myrs(“月份”) =
TheNeededMonth
Myrs.Bookmark = Myrsbookmark
MyRsERP.MoveNext
Loop
Else
Myrs(“狀態”) = 1
End If
Myrs(“狀態”) = 1
ReachNewRecord:
Myrs.MoveNext
Loop
MyRsERP.Close
Myrs.UpdateBatch
Myrs.Close
ERPlevel = ERPlevel + 1
DoEvents
If ERPStop Then GoTo ErrorHandle
If CalcLevel = -1 Then
GoTo DoNextLevel
Else
If ERPlevel< CalcLevel Then GoTo DoNextLevel
End If
Else
’OK, 結束
End If
大家可以注意到,由于上面采用了單層BOM存儲結構,所以展開計算的算法就相當簡單了,由于不需要特別的產品編碼,BOM的輸入與維護也非常簡單。另外,大家還可以注意到,算法完全不用遞歸嵌套,因而可以加快運行速度。
展開計算完畢以后,就可以利用交叉表調出臨時數據庫中的數據,進行瀏覽、分析和打印了。這樣需求量與供應量(庫存量、在制量、在購量)就擺在了一起進行比較,管理者就能夠很直觀、清楚地看出各種資源現有多少,需求量有多少;管理人員可以據此做采購和生產的計劃。而計劃可以是主計劃,也可以是細計劃,取決于用戶選定要展開到哪層,如果展開所有的層,那么所有的細計劃,如車間計劃,每個車間的人力、設備安排都會被包括在內。
本算法采用Access數據庫,在VB 6.0上調試實現,由于采用了特別的算法設計,使得既可以實現無限的層次,又不用遞歸嵌套。對于國內中小規模企業(3000人以下,產品、材料條目總數在50000以下)來說,利用Access開發的小ERP系統可以很好地實現企業的現代化管理,應付日常的管理需求。
ERP只是一種企業資源計算器
ERP是一種有效的管理工具,可以對企業內部的資源進行有效管理,明顯減少積壓庫存,加快資金周轉率,降低成本。在當前激烈的市場競爭環境下,誰能比別人以更低的成本生產出更美更好的產品,誰就能成為市場的領導者。美國石油大王洛克菲勒成功最根本的原因是他在成本管理上嚴密精細。他能準確地查閱并分析下面呈報上來的開支和成本,銷售及損益數據,并以此考核每個分廠的工作。
現實生活中,企業管理層,特別是實際操作的一線主管,很少會每個人都有洛克菲勒那樣的數字分析天分,而且不少企業比油廠復雜得多,所以ERP等工具就像是一種企業資源計算器,如果企業嚴格按它的規程去做,那么它就能比洛克菲勒還要精確地分析處理數據。
如果洛克菲勒今天還在世,他一定也會借助于強大的電腦來管理龐大的業務。不過工具畢竟是工具,最智慧的還是應用它的人。如果一個企業家有洛克菲勒那樣的經營智慧,就算用手工算,他也肯定是按照著這種管理理念在卓有成效地工作。
所以最智慧的不是機器而是應用它的人,ERP只是一種企業資源計算器,就像會計人員手里的算盤、計算器一樣,只是一種工具。
總 結
ERP的實施中,最重要的一點在于一定要把握住關鍵,而忽略一些次要的因素,這對各方面的管理與規范相差甚遠的國內企業來說尤為關鍵。這樣抓住了本質以后,實施的成功就是必然的了。另外必須要注意到,ERP軟件只是一種工具而已,企業管理應用者的智慧有多高,軟件應用的水平就有多高。100萬元的ERP軟件和1萬元的ERP軟件的差別,除了功能和可靠性外,還有很重要的一點在于前者通過具體實施的過程,將一套很完善的管理方法和管理理念灌輸給企業管理應用者,這也就是人們常說的知識的價值。
冼劍光 (jmjackle@pub.yunfu.gd.cn)
轉載請注明出處:拓步ERP資訊網http://www.lukmueng.com/
本文標題:一種實用的ERP核心算法及應用
本文網址:http://www.lukmueng.com/html/consultation/10819923226.html