ERP中BOM 的数据库设计与实现

2010-10-19 01:21彭克勤
大众科技 2010年4期
关键词:标准件结点代码

彭克勤

(北京信息科技大学计算机学院,北京 100101)

ERP中BOM 的数据库设计与实现

彭克勤

(北京信息科技大学计算机学院,北京 100101)

BOM是ERP中极其重要的一部分,BOM的设计直接关系到ERP的运行效率。文章给出了一种BOM数据库的设计方案以及改进的分层遍历算法和反查算法,实现的系统已得到了实际应用。

ERP;BOM;数据库;算法

(一)引言

在企业资源计划 (Enterprise Resource Planning,ERP)中,物料清单(Bill of Materials,BOM)是系统中的最基本资料,用来描述产品的零部件组成和零部件之间的相互关系,是产品信息的基础。BOM是生成物料需求计划(Material Requirement Planning,MRP)的基本信息,是联系主生产计划(Master Production Schedule,MPS)和MRP的桥梁,是外协加工和生产装配的依据。由于BOM处于ERP系统的关键地位,BOM的结构设计和算法直接关系到整个ERP 系统的运行效率、可靠性及稳定性。为了优化ERP系统的性能,提高系统运行效率,设计一种结构清晰、算法高效的BOM生成展开算法是非常必要的。

(二)概念简介

物料是包括产品以及与生产产品有关的所有的物品。本文根据某具体行业的特点将物料分为4类:最终产品、零部件、标准件、自制件。最终产品是指企业推向市场的产品,在BOM树结构中处于一级,如图1中的PA结点。零部件是直接采购来的,其本身没有下属部件,直接用于生产,如图1中的UB、UH、UI结点。标准件通常是从配套厂家直接采购,因此不必考虑标准件的组成,标准件可以用于多个产品,也可以在一个产品中多次使用,如图1中的SF、SG结点即为标准件,标准件和零部件都是直接采购,区别在于标准件有下属部件而零部件没有,或者说,零部件不可再划分。自制件是需要根据特定工艺加工生产,通常包含若干下属部件,如图1中的IC、ID、IE结点,与标准件相同,自制件也可以用于多个产品,也可以在一个产品中多次使用,自制件的下属部件可以是零部件、标准件,也可以是其他自制件。图1就清晰的描述了最终产品的零部件组成和零部件之间的相互关系,括号中的数字表示改结点相对于母结点的数量。

图1 产品PA的BOM结构图

(三)数据库设计

本文将BOM树结构转换转化为两个表:MaterialData和MaterialRelation。MaterialData记录所有物料的基本信息,MaterialRelation记录物料之间的结构关系。由于在MPR和MPS中需要使用物料的许多属性,如:采购提前期、生产提前期、直接成本、间接成本等,如果将物料信息和结构信息存放于一个表中,数据库冗余大,维护困难,并且容易导致数据的不一致性,因此设计了MaterialData表用于记录物料的基础信息,由于本文主要讨论的是BOM生成等算法,因此只列出了相关的数据项。MaterialData结构如表1所示,其中物料类型主要有4种:最终产品、自制件、零部件和标准件,分别用P、I、U和S表示。MaterialRelation结构如表2所示,层次是指该物料在BOM树中所在的层次,数量是该物料相对于母件的数量;母件ID是指母件结点的ID,根结点代码是指该物料所属的最终产品物料代码。

表1 MaterialData表结构

表2 MaterialRelation表结构

表3 MaterialData表数据

对于图1所示的产品结构,MaterialData表的内容如表3所示,企业中的每一种物料对应表中的一条记录。MaterialRelation表的内容如表4所示,对于最终产品,层次为1,母件代码也为1,指向自己;由于自制件可以在一个最终产品中多次使用,也可以用于企业中多个最终产品中,因此在MaterialRelation表中自制件的结构只记录一次,自制件的下属部件(包括零部件、标准件和自制件)的层次记为0,这样就可以表示该物料的层次不固定,根据所属的自制件所在层次不同而有所变化,同样这些自制件下属部件的根结点代码为“NULL”,只有在生成BOM树的时候,才能根据自制件的根结点代码来动态确定该物料的根结点代码。这种设计的优势在于当自制件的结构发生变化时,在数据库中也只需要修改一次,易于保证BOM数据的完整性和一致性。

表4 MaterialRalation表数据

(四)实现

本文主要介绍BOM最常用功能:构建BOM树和反查物料。

构建BOM树最常用的方法是分层遍历,即按照层次一层一层的往下遍历,类似于数据结构中树的层次遍历过程[4]。对于图1所示的产品。采用分层遍历的方法绘制BOM树的顺序是:PA、UB、IC、ID、IE、SF、IE、SG、UH、UI、UH、UI。基于上述数据库设计,自制件的结构只存放一次,遍历的算法也有所改建。遍历中还是采用分层的思想,一层一层往下遍历,如果是非自制件,就根据其母件ID的值绘制出该结点;如果是自制件,则调用一过程,将该自制件全部(包括所有下属部件)绘制出来,无论该自制件包含多少层。这一点也是本文所描述算法的优点,和传统的层次遍历有一定的区别。对于图1所示的产品。采用改建后分层遍历的方法绘制BOM树的顺序是:PA、UB、IC、IE、UH、UI、SF、ID、IE、UH、UI、SG。

算法1:构建自制件BOM树

根据自制件的物料代码,生成自制件的BOM树过程的算法如下:

a)将要生成BOM树自制件的物料代码赋值给变量strIndependentRootCode;

b)执行Select MaterialRalation.物料代码,物料类型,母件ID from MaterialData,MaterialRalation where( MaterialRalation.母件代码=strIndependentRootCode and层次=0 and MaterialData.物料代码= MaterialRalation. 物料代码),如果结果集为,则数据有误,报错,退出。否则指向记录集的第一条,转步骤c;

c)根据母件ID可以找到该结点的母结点,并将其绘制为对应母结点的子结点。如果该物料类型是“自制件”,则递归调用本过程,生成自制件对应的BOM树;

d)结果集指针指向下一条记录,如果指针指向EOF,则表示遍历完毕,结束,退出,否则转步骤c。

算法2:构建BOM树

a)获取MaterialRalation 表中的最大层次数(Select max(层次) from MaterialRalation)赋给变量intMaxLevel;

b)在MaterialData表中查找层次=1的所有记录,即最终产品。绘制BOM图的第一层结点;

c)层次加1,如果层次大于intMaxLevel,则结束,退出,否则转步骤d;

d)遍历该层的结点,找到该结点的母结点,并将其绘制为对应母结点的子结点,同时判断结点类型(select物料类型 from MaterialData where MaterialData.物料代码=MaterialRalation. 物料代码),如果结点类型为“自制件”,转步骤e,否则转步骤f;

e)如果结点类型为“自制件”,调用算法1生成自制件BOM树的算法,完成了该 “自制件”的全部下属配件添加完毕;

f)遍历完本层,转步骤c。

算法3:BOM反查算法

在MRP和MPS中经常会用到查找某个零部件件、自制件或者标准件用于哪些最终产品中,数量是多少。本算法描述该查找过程。

a)将要查找的物料代码赋给变量lngSearchMaterialCode,将记录数量的变量lngQuantity初始化为1;

b)执行“Select * from MaterialRalation where 物料代码=lngSearchMaterialCode”, 得到一结果集;

c)如果结果集不为空,则转步骤d,否则,转步骤g;

d)提取结果集当前记录的母件ID、母件代码、根结点代码和数量字段赋给变量lngParentId、strParentCode、strRootCode、lngCurrentQuantity,lngQuantity=lngQuantity*lngCurrentQuantity;

e)执行“Select * from MaterialRalation where ID=lngParentId and物料代码=strParentCode”,对应的记录,如果没有找到,表明已经到了最终产品这一最高层次,转步骤f,否则,转步骤d;

f)执行“insert into temptable values (strRootCode,lngQuantity)”即将计算得到的数量和根结点代码数据添加到一临时表中;转步骤c;

g)执行“select 最终产品,sum(数量) from temptable groupby(最终产品)”,即在以上生成的临时表中,根据根结点代码进行分组,对数量进行求和计算,即得到要查找的物料在各种最终产品中的数量。

(五)结束语

本文给出了一种BOM数据库设计方案和其是生成和反查算法。这种数据库设计方法非常适用于企业产品中存在大量复用自制件的情况,由于自制件的结构在数据库中只存放一次,不仅节省了存储空间,更重要的是提高了数据的一致性和完整性。在生成BOM树的时候,改进了传统的分层遍历方法,提高了效率;反查算法自底向上计算出数量,算法简单、容易实现。本文所讨论的算法在实际的使用中取得了明显的效果,提高了系统的效率,减少了软件对大规模的BOM的遍历时间和数据库系统资源的占用,提高了数据库的性能和响应能力。

[1] 张亚玲,李惠斌,张毅坤,常颖莉.基于正规式的产品结构树及其优化配置算法[J].西安理工大学学报, 2007,23(2).

[2] 罗鸿.ERP原理设计实施(第三版)[M].北京:电子工业出版社,2005.

[3] David C.Yen1 A synergic analysis for web-based enterprise resources planning system[M].Computer Standards,2002.

[4] 严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,1997.

TP311

A

1008-1151(2010)04-0043-02

2010-01-12

北京市教委科技发展计划基金项目(KM200810772010)

彭克勤(1965-),女,湖南株洲人,北京信息科技大学计算机学院副教授,硕士,从事计算机应用及控制的研究。

猜你喜欢
标准件结点代码
标准件库的建立与应用
基于八数码问题的搜索算法的研究
创世代码
创世代码
创世代码
创世代码
Ladyzhenskaya流体力学方程组的确定模与确定结点个数估计
CATIA V5标准件库的创建与使用
基于知识的组合机床夹具可扩充标准件库的开发
古代建筑的标准件