彭克勤
(北京信息科技大學(xué)計(jì)算機(jī)學(xué)院,北京 100101)
ERP中BOM 的數(shù)據(jù)庫設(shè)計(jì)與實(shí)現(xiàn)
彭克勤
(北京信息科技大學(xué)計(jì)算機(jī)學(xué)院,北京 100101)
BOM是ERP中極其重要的一部分,BOM的設(shè)計(jì)直接關(guān)系到ERP的運(yùn)行效率。文章給出了一種BOM數(shù)據(jù)庫的設(shè)計(jì)方案以及改進(jìn)的分層遍歷算法和反查算法,實(shí)現(xiàn)的系統(tǒng)已得到了實(shí)際應(yīng)用。
ERP;BOM;數(shù)據(jù)庫;算法
在企業(yè)資源計(jì)劃 (Enterprise Resource Planning,ERP)中,物料清單(Bill of Materials,BOM)是系統(tǒng)中的最基本資料,用來描述產(chǎn)品的零部件組成和零部件之間的相互關(guān)系,是產(chǎn)品信息的基礎(chǔ)。BOM是生成物料需求計(jì)劃(Material Requirement Planning,MRP)的基本信息,是聯(lián)系主生產(chǎn)計(jì)劃(Master Production Schedule,MPS)和MRP的橋梁,是外協(xié)加工和生產(chǎn)裝配的依據(jù)。由于BOM處于ERP系統(tǒng)的關(guān)鍵地位,BOM的結(jié)構(gòu)設(shè)計(jì)和算法直接關(guān)系到整個(gè)ERP 系統(tǒng)的運(yùn)行效率、可靠性及穩(wěn)定性。為了優(yōu)化ERP系統(tǒng)的性能,提高系統(tǒng)運(yùn)行效率,設(shè)計(jì)一種結(jié)構(gòu)清晰、算法高效的BOM生成展開算法是非常必要的。
物料是包括產(chǎn)品以及與生產(chǎn)產(chǎn)品有關(guān)的所有的物品。本文根據(jù)某具體行業(yè)的特點(diǎn)將物料分為4類:最終產(chǎn)品、零部件、標(biāo)準(zhǔn)件、自制件。最終產(chǎn)品是指企業(yè)推向市場的產(chǎn)品,在BOM樹結(jié)構(gòu)中處于一級,如圖1中的PA結(jié)點(diǎn)。零部件是直接采購來的,其本身沒有下屬部件,直接用于生產(chǎn),如圖1中的UB、UH、UI結(jié)點(diǎn)。標(biāo)準(zhǔn)件通常是從配套廠家直接采購,因此不必考慮標(biāo)準(zhǔn)件的組成,標(biāo)準(zhǔn)件可以用于多個(gè)產(chǎn)品,也可以在一個(gè)產(chǎn)品中多次使用,如圖1中的SF、SG結(jié)點(diǎn)即為標(biāo)準(zhǔn)件,標(biāo)準(zhǔn)件和零部件都是直接采購,區(qū)別在于標(biāo)準(zhǔn)件有下屬部件而零部件沒有,或者說,零部件不可再劃分。自制件是需要根據(jù)特定工藝加工生產(chǎn),通常包含若干下屬部件,如圖1中的IC、ID、IE結(jié)點(diǎn),與標(biāo)準(zhǔn)件相同,自制件也可以用于多個(gè)產(chǎn)品,也可以在一個(gè)產(chǎn)品中多次使用,自制件的下屬部件可以是零部件、標(biāo)準(zhǔn)件,也可以是其他自制件。圖1就清晰的描述了最終產(chǎn)品的零部件組成和零部件之間的相互關(guān)系,括號中的數(shù)字表示改結(jié)點(diǎn)相對于母結(jié)點(diǎn)的數(shù)量。
圖1 產(chǎn)品PA的BOM結(jié)構(gòu)圖
本文將BOM樹結(jié)構(gòu)轉(zhuǎn)換轉(zhuǎn)化為兩個(gè)表:MaterialData和MaterialRelation。MaterialData記錄所有物料的基本信息,MaterialRelation記錄物料之間的結(jié)構(gòu)關(guān)系。由于在MPR和MPS中需要使用物料的許多屬性,如:采購提前期、生產(chǎn)提前期、直接成本、間接成本等,如果將物料信息和結(jié)構(gòu)信息存放于一個(gè)表中,數(shù)據(jù)庫冗余大,維護(hù)困難,并且容易導(dǎo)致數(shù)據(jù)的不一致性,因此設(shè)計(jì)了MaterialData表用于記錄物料的基礎(chǔ)信息,由于本文主要討論的是BOM生成等算法,因此只列出了相關(guān)的數(shù)據(jù)項(xiàng)。MaterialData結(jié)構(gòu)如表1所示,其中物料類型主要有4種:最終產(chǎn)品、自制件、零部件和標(biāo)準(zhǔn)件,分別用P、I、U和S表示。MaterialRelation結(jié)構(gòu)如表2所示,層次是指該物料在BOM樹中所在的層次,數(shù)量是該物料相對于母件的數(shù)量;母件ID是指母件結(jié)點(diǎn)的ID,根結(jié)點(diǎn)代碼是指該物料所屬的最終產(chǎn)品物料代碼。
表1 MaterialData表結(jié)構(gòu)
表2 MaterialRelation表結(jié)構(gòu)
表3 MaterialData表數(shù)據(jù)
對于圖1所示的產(chǎn)品結(jié)構(gòu),MaterialData表的內(nèi)容如表3所示,企業(yè)中的每一種物料對應(yīng)表中的一條記錄。MaterialRelation表的內(nèi)容如表4所示,對于最終產(chǎn)品,層次為1,母件代碼也為1,指向自己;由于自制件可以在一個(gè)最終產(chǎn)品中多次使用,也可以用于企業(yè)中多個(gè)最終產(chǎn)品中,因此在MaterialRelation表中自制件的結(jié)構(gòu)只記錄一次,自制件的下屬部件(包括零部件、標(biāo)準(zhǔn)件和自制件)的層次記為0,這樣就可以表示該物料的層次不固定,根據(jù)所屬的自制件所在層次不同而有所變化,同樣這些自制件下屬部件的根結(jié)點(diǎn)代碼為“NULL”,只有在生成BOM樹的時(shí)候,才能根據(jù)自制件的根結(jié)點(diǎn)代碼來動態(tài)確定該物料的根結(jié)點(diǎn)代碼。這種設(shè)計(jì)的優(yōu)勢在于當(dāng)自制件的結(jié)構(gòu)發(fā)生變化時(shí),在數(shù)據(jù)庫中也只需要修改一次,易于保證BOM數(shù)據(jù)的完整性和一致性。
表4 MaterialRalation表數(shù)據(jù)
本文主要介紹BOM最常用功能:構(gòu)建BOM樹和反查物料。
構(gòu)建BOM樹最常用的方法是分層遍歷,即按照層次一層一層的往下遍歷,類似于數(shù)據(jù)結(jié)構(gòu)中樹的層次遍歷過程[4]。對于圖1所示的產(chǎn)品。采用分層遍歷的方法繪制BOM樹的順序是:PA、UB、IC、ID、IE、SF、IE、SG、UH、UI、UH、UI?;谏鲜鰯?shù)據(jù)庫設(shè)計(jì),自制件的結(jié)構(gòu)只存放一次,遍歷的算法也有所改建。遍歷中還是采用分層的思想,一層一層往下遍歷,如果是非自制件,就根據(jù)其母件ID的值繪制出該結(jié)點(diǎn);如果是自制件,則調(diào)用一過程,將該自制件全部(包括所有下屬部件)繪制出來,無論該自制件包含多少層。這一點(diǎn)也是本文所描述算法的優(yōu)點(diǎn),和傳統(tǒng)的層次遍歷有一定的區(qū)別。對于圖1所示的產(chǎn)品。采用改建后分層遍歷的方法繪制BOM樹的順序是:PA、UB、IC、IE、UH、UI、SF、ID、IE、UH、UI、SG。
算法1:構(gòu)建自制件BOM樹
根據(jù)自制件的物料代碼,生成自制件的BOM樹過程的算法如下:
a)將要生成BOM樹自制件的物料代碼賦值給變量strIndependentRootCode;
b)執(zhí)行Select MaterialRalation.物料代碼,物料類型,母件ID from MaterialData,MaterialRalation where( MaterialRalation.母件代碼=strIndependentRootCode and層次=0 and MaterialData.物料代碼= MaterialRalation. 物料代碼),如果結(jié)果集為,則數(shù)據(jù)有誤,報(bào)錯(cuò),退出。否則指向記錄集的第一條,轉(zhuǎn)步驟c;
c)根據(jù)母件ID可以找到該結(jié)點(diǎn)的母結(jié)點(diǎn),并將其繪制為對應(yīng)母結(jié)點(diǎn)的子結(jié)點(diǎn)。如果該物料類型是“自制件”,則遞歸調(diào)用本過程,生成自制件對應(yīng)的BOM樹;
d)結(jié)果集指針指向下一條記錄,如果指針指向EOF,則表示遍歷完畢,結(jié)束,退出,否則轉(zhuǎn)步驟c。
算法2:構(gòu)建BOM樹
a)獲取MaterialRalation 表中的最大層次數(shù)(Select max(層次) from MaterialRalation)賦給變量intMaxLevel;
b)在MaterialData表中查找層次=1的所有記錄,即最終產(chǎn)品。繪制BOM圖的第一層結(jié)點(diǎn);
c)層次加1,如果層次大于intMaxLevel,則結(jié)束,退出,否則轉(zhuǎn)步驟d;
d)遍歷該層的結(jié)點(diǎn),找到該結(jié)點(diǎn)的母結(jié)點(diǎn),并將其繪制為對應(yīng)母結(jié)點(diǎn)的子結(jié)點(diǎn),同時(shí)判斷結(jié)點(diǎn)類型(select物料類型 from MaterialData where MaterialData.物料代碼=MaterialRalation. 物料代碼),如果結(jié)點(diǎn)類型為“自制件”,轉(zhuǎn)步驟e,否則轉(zhuǎn)步驟f;
e)如果結(jié)點(diǎn)類型為“自制件”,調(diào)用算法1生成自制件BOM樹的算法,完成了該 “自制件”的全部下屬配件添加完畢;
f)遍歷完本層,轉(zhuǎn)步驟c。
算法3:BOM反查算法
在MRP和MPS中經(jīng)常會用到查找某個(gè)零部件件、自制件或者標(biāo)準(zhǔn)件用于哪些最終產(chǎn)品中,數(shù)量是多少。本算法描述該查找過程。
a)將要查找的物料代碼賦給變量lngSearchMaterialCode,將記錄數(shù)量的變量lngQuantity初始化為1;
b)執(zhí)行“Select * from MaterialRalation where 物料代碼=lngSearchMaterialCode”, 得到一結(jié)果集;
c)如果結(jié)果集不為空,則轉(zhuǎn)步驟d,否則,轉(zhuǎn)步驟g;
d)提取結(jié)果集當(dāng)前記錄的母件ID、母件代碼、根結(jié)點(diǎn)代碼和數(shù)量字段賦給變量lngParentId、strParentCode、strRootCode、lngCurrentQuantity,lngQuantity=lngQuantity*lngCurrentQuantity;
e)執(zhí)行“Select * from MaterialRalation where ID=lngParentId and物料代碼=strParentCode”,對應(yīng)的記錄,如果沒有找到,表明已經(jīng)到了最終產(chǎn)品這一最高層次,轉(zhuǎn)步驟f,否則,轉(zhuǎn)步驟d;
f)執(zhí)行“insert into temptable values (strRootCode,lngQuantity)”即將計(jì)算得到的數(shù)量和根結(jié)點(diǎn)代碼數(shù)據(jù)添加到一臨時(shí)表中;轉(zhuǎn)步驟c;
g)執(zhí)行“select 最終產(chǎn)品,sum(數(shù)量) from temptable groupby(最終產(chǎn)品)”,即在以上生成的臨時(shí)表中,根據(jù)根結(jié)點(diǎn)代碼進(jìn)行分組,對數(shù)量進(jìn)行求和計(jì)算,即得到要查找的物料在各種最終產(chǎn)品中的數(shù)量。
本文給出了一種BOM數(shù)據(jù)庫設(shè)計(jì)方案和其是生成和反查算法。這種數(shù)據(jù)庫設(shè)計(jì)方法非常適用于企業(yè)產(chǎn)品中存在大量復(fù)用自制件的情況,由于自制件的結(jié)構(gòu)在數(shù)據(jù)庫中只存放一次,不僅節(jié)省了存儲空間,更重要的是提高了數(shù)據(jù)的一致性和完整性。在生成BOM樹的時(shí)候,改進(jìn)了傳統(tǒng)的分層遍歷方法,提高了效率;反查算法自底向上計(jì)算出數(shù)量,算法簡單、容易實(shí)現(xiàn)。本文所討論的算法在實(shí)際的使用中取得了明顯的效果,提高了系統(tǒng)的效率,減少了軟件對大規(guī)模的BOM的遍歷時(shí)間和數(shù)據(jù)庫系統(tǒng)資源的占用,提高了數(shù)據(jù)庫的性能和響應(yīng)能力。
[1] 張亞玲,李惠斌,張毅坤,常穎莉.基于正規(guī)式的產(chǎn)品結(jié)構(gòu)樹及其優(yōu)化配置算法[J].西安理工大學(xué)學(xué)報(bào), 2007,23(2).
[2] 羅鴻.ERP原理設(shè)計(jì)實(shí)施(第三版)[M].北京:電子工業(yè)出版社,2005.
[3] David C.Yen1 A synergic analysis for web-based enterprise resources planning system[M].Computer Standards,2002.
[4] 嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,1997.
TP311
A
1008-1151(2010)04-0043-02
2010-01-12
北京市教委科技發(fā)展計(jì)劃基金項(xiàng)目(KM200810772010)
彭克勤(1965-),女,湖南株洲人,北京信息科技大學(xué)計(jì)算機(jī)學(xué)院副教授,碩士,從事計(jì)算機(jī)應(yīng)用及控制的研究。