您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > ERP系统开发中BOM结构模型的研究及应用
ERP系统开发中BOM结构模型的研究及应用陈琦刘杰(同济大学经济与管理学院,上海200092)摘要:BOM是ERP系统中重要的基本数据.本文首先从数据库设计和算法实现两方面分析了两种典型的BOM结构模型,通过比较总结出BOM设计中的关键问题;然后针对该问题提出改进的BOM结构模型;最后给出运用此模型实现某BOM管理模块的实例。关键字:企业资源计划;物料清单;BOM结构模型1引言制造业信息系统从上个世纪50年代起至今经历了MRP(MaterialRequirementsPlanning)、闭环MRP(Closed-loopMRP)、MRPⅡ(ManufacturingResourcePlanning)及ERP等四个阶段,后一个阶段都是建立在前一阶段基础之上.ERP的核心仍然是解决企业根据市场需求“生产什么”、“生产多少”、“什么时候生产”等问题,而这些问题的有效解决都是建立在MRP运算,即根据BOM(BillofMaterials)分解MPS(MainProductionSchedule)的基础之上。所谓BOM就是产品结构在ERP系统中的一种数据表现形式,换句话说为了方便计算机识别并做分解运算处理,把用图表达的产品结构转换成数据格式,这种用数据格式来描述产品结构的文件就是BOM.从概念中可以看出,BOM的主要作用包括:1.存贮作用,即存储产品结构信息;2.计算依据,即为MRP分解运算提供逻辑依据。BOM是ERP的核心数据之一,BOM的设计与实施是ERP的基础,所以选用合理得BOM结构模型是保障ERP顺利实施得重要环节。2两种典型的BOM结构模型2.1树状结构模型对于制造型企业中生产的单个产品,其结构呈现出一种树状结构,反映出该产品所需的原材料,零件,部件及总装件之间的从属关系和数量。如图1中产品A,是由B,C,D构成的,而B又是由C,D构成的,括号里的数字表示父子之间的数量关系,依此类推,其中不能再分解或处于产品结构树底部的零部件就是需要制造或采购的零部件,有了这种产品结构才能进行分解运算得到物料需求计划。图1。产品A的结构图为了把这种产品结构存储在关系型数据库中(以sqlserver2000为例,下同),其数据库设计如表1所示:字段名称类型含义RootidVarchar(10)产品代码ChildidVarchar(10)子件代码Layerint层次码Usagefloat零件间用量关系表1树状结构模型的数据字典其中Rootid,Childid分别表示产品和该产品包含的零部件代码,如该零部件不可再分解就用一个特殊的符号“L”来表示。图1中A产品的结构,在数据库中存储为以下记录:RootidChildidLayerUsageAmountAB11AC12ADL3AC22ADL1AEL6AFL8AEL6AFL8表2产品A在树状结构模型中的表示这种数据库设计由于模拟了产品结构的树状特征(如图2),称之为“树状结构模型”,它的优点是直观的刻画了产品结构,不同产品间的数据相互独立的,因而编写分解算法非常简单、高效。缺点主要是数据冗余度大,不同产品中包含的相同结构特征在此模型中仍然要存储多次,例如:产品A包含的部件C为通用件,即可以用在其他产品中。因而当增加或修改这些结构特征时也要重复多次,容易造成BOM数据不一致,或者在数据库设计时需要增加额外的触发机制保证其一致性。另一方面由于这种结构模型只存储了产品与零部间的关系从而抹煞了部件与零件的关系,破坏了BOM数据的完整性。图2.BOM的树状结构树状结构模型可以直接采用较ParentidChildidUsageAB1AC2AD3BC2BD1CE3CF4为简单的SQL语句来实现产品结构的查询。例如对图1中A产品查询需要制造或采购的所有零部件清单时,SQL语句为:selectChildidfrom‘表2’whereRootid=’A’andLayer=‘L’;需要查询A产品所包含的第n层零部件清单时,SQL语句为:selectChildidfrom‘表2’whereRootid=’A’andLayer=’n’;2.2网状结构模型对于制造多品种产品的企业,产品与零部件的关系不再是简单的一对多而是多对多关系。由于大量通用件在不同产品间的相互借用,在树状结构中表现为不同的结点可以有相同的子树;即使在同种产品内部,由于一些标准件的重用,同样使零部件关系呈现出复杂的交织,所以图2可以转化为图3所示的网状结构。图3.BOM的网状结构这种产品结构在数据库中的设计如表1所示:表3网状结构模型的数据字典图1中A产品的结构在数据库中可以存储为以下记录:表4产品A在网状结构模型中的表示这种数据库设计模拟了多品种产品的结构特征(如图2),称之为字段名称类型含义ParentidVarchar(10)父件代码ChildidVarchar(10)子件代码Usagefloat父子件间用量关系“网状结构模型”,它的优点是对每一种父子结构关系只存储一次,从而消除了冗余数据,另外当这些通用件或标准件的结构发生变化时,在数据库中也只用修改一次,同样以部件C为例,当修改其结构特征时只需在修改数据库中字段Parentid为“C”的记录。因而网状结构模型易于保证BOM数据的完整性和一致性。这种模型虽然能清晰的反映产品结构,但要编写较为复杂的算法来实现对BOM的遍历,常用的算法有:1.递归算法。利用数据库的临时表来保存递归运算中的临时信息,通过特定变量控制程序的执行.2.分层查找法。就是从被查找的根结点开始,按层次一层一层的往下遍历,类似于数据结构中树的层次遍历过程。3.改进的BOM结构模型3.1BOM设计中的关键问题综合上面两种模型的设计方法,在BOM设计过程中需着重考虑的两要素是:1.合理的BOM结构模型,即在数据库中设计合理的方式存储BOM数据,保证BOM数据的完整性、一致性、可靠性和无冗余;2.高效便捷的算法完成对产品结构的遍历和分解,满足MRP运算及各种对产品结构的查询、汇总等。前者关系到BOM的易维护性,后者是关系到BOM的易使用性,以下简称为BOM“设计的两要素”。然而,当今流行的数据库大多采用基于关系模型的关系型数据库。在数据库发展历史中较以前的层次模型或网状模型,关系模型对这种树状结构的存储和处理有先天性的不足,如果采取冗余度小的数据库设计,会使算法比较复杂,反之亦然。例如前面的两种模型,树状结构模型的数据库设计冗余度大但算法简单、执行效率高,实际上以较差的易维护性来换取较好的易使用性;而网状结构模型在保持低数据冗余的情况下却使算法复杂,降低查询分析的效率,与前者正好相反。这导致了BOM设计中两要素间的矛盾,而这种矛盾往往是无法避免的。BOM设计的主要问题就是在满足ERP功能的前提下,如何在BOM两要素之间需求最优均衡。为了解决这个问题,笔者综合两种典型BOM结构模型的特点,提出以下改进的BOM结构模型。3.2改进后的混合结构模型这种模型的设计思路是考虑到在产品生命周期的不同阶段有不同的BOM,其内容和作用各不相同。所以整个产品结构可再细分为销售BOM,制造BOM,采购BOM等。销售BOM列举出制造最终产品所必需的可选物料,它仅仅是为了满足客户订单把相对独立的部件汇总起来的BOM;制造BOM是根据产品结构和工艺流程特点,把销售BOM中的独立部件作为“最终项目”来构建的,用于帮助制定并简化主生产计划;采购BOM是采购部门根据制造BOM中部件需求制定的外购件、外协件清单,是进行MRP运算的逻辑基础。这种划分把整个产品结构分解为粒度大小不同得BOM,销售BOM包含的数据项对应的产品结构粒度最大,接下来依次为制造BOM、采购BOM。然后根据这几种BOM的结构选择不同的BOM结构模型。一般来讲,销售BOM的结构简单且相对固定,对其主要做查询、汇总等简单操作,需要较好的BOM易使用性,故采用树状结构模型,采购BOM的结构复杂且需要经常修改,而且数据存储量大,对其完整性、一致性要求较高,即需要较好的BOM易维护性,故采用网状结构模型,制造BOM视企业的具体情况,同样按照其他BOM的选型方法选取合适的BOM结构模型。这样对整个产品结构综合两种BOM结构模型的优点,而且能满足ERP系统各模块的功能需要,所以称之为“混合结构模型”。4应用实例在某压缩机生产企业的ERP系统实际开发中,运用混合结构模型开发了其中的BOM管理模块.该系统采用基于Web的三层B/S架构,主要运用JSP技术,开发环境为:服务器端的操作系统采用WindowNT;Web服务器为Aparch+Tomcat;数据库采用SQLServer2000。4.1BOM结构设计该企业是典型的多品种大批量的制造型企业,在BOM设计前首先对物料进行了编码,保证每种物料有唯一代码标识,然后参考混合模型把整个产品结构划分(如图4示意)。图4BOM结构划分销售BOM压缩机全代码标识交付客户使用的商品,包括压缩机、附件及包装等。在ERP中这部分BOM主要供销售部门使用,使其能够根据客户需要迅速查询相应的配件,或使客户按照自身需要挑选并自由组合各部件。该部分采用树状结构模型,数据库中Rootid字段存放压缩机全代码,Childid字存放压缩机装配码、附件代码或者附件包装代码。制造BOM压缩机装配码标识装配线上最终装配出的产品,包括压缩机本体、本体包装和标识铭牌。这部分主要供生产部门的总装配线使用,使其能够按照主生产计划计算各部件的投料量。该部分同样采用树状结构模型,数据库中Rootid字段存放压缩机装配码,Childid字段存放压缩机本体代码,本体包装代码及标识铭牌代码。采购BOM采购BOM用来存储压缩机本体的结构信息,由于不同型号的压缩机本体仅存在细微的结构差异,如果采用树状结构模型,必然会产生大量的冗余数据。此外,由于所有产品的技术资料需要与国外母公司保持同步并且随客户需求变化频繁更换,因而对BOM数据的维护是经常性的,所以最终采用网状结构模型,数据库中仅存在具有父子关系的零部件数据,然后编写算法实现其查询、汇总等功能。4.2关键算法实现对采用树状结构模型的客户BOM和制造BOM,可以直接用SQL查询语句实现所需功能,而采购BOM需要对网状结构模型实现遍历等功能,算法较为复杂,以下给出用于实现对给定的任一物料查询其包含的所有子件,并按层次关系排列的算法。1.在sqlserver2000下先建立两个临时表#work和#result,前者用于存储运算的中间数据,后者存储运算结果。字段名称类型含义Lv1int层次码itemidVarchar(20)物料代码usageFloat(10)用量表5.临时表#work字段名称类型含义SeqIntidentity序号Lv1int层次码itemidVarchar(20)物料代码usageFloat(10)用量表6.临时表#result2.实现BOM遍历查询的SQL语句为://声明变量declare@lvlint,@currvarchar(20),@usagefloat(10)//从BOM表中选取需要分解的物料信息,并存入#work表等待运算selecttop1@lvl=1,@curr=”根节点物料代码”,@usage=”用量”from“BOM表”insertinto#work(lvl,itemid,usage)values(@lvl,@curr,@usage)//循环开始,当分解层次码为0时循环终止while(@lvl0)beginifexists(select*from#workwherelvl=@lvl)begin//从#work表中选取层次码为@lvl的首条记录A,保存在变量中并插入表#result,然后将该记录从#work表删除selecttop1@curr=itemid,@usage=usagefrom#workwherelvl=@lvlinsert#result(lvl,itemid,usage)values(@lvl,@curr,@usage)delete#workwherelvl=@lvlanditemid=@curr//以记录A为
本文标题:ERP系统开发中BOM结构模型的研究及应用
链接地址:https://www.777doc.com/doc-12473 .html