4 BOM管理的适应性
当前,单件小批量生产和面向订单装配等生产方式已成为世界制造企业公认的主要市场竞争策略,其要点是以用户多变的需求为中心,引导产品设计与制造,这就提出了产品配置和个性化产品BOM的生成问题。如何充分利用现有规格的产品BOM,通过改变和重组产品结构,生成新的产品BOM,已经成为企业ERP 系统中BOM 管理的一大重点及难点,为了提高BOM 管理对多种生产类型的适应性,采用基于类的BOM 解决大规模定制环境下的产品结构数据的描述与管理问题。
4. 1 基于类的BOM
所谓基于类的BOM,是指在企业已有产品BOM结构的基础上,通过增加、减少物料来得到个性化的产品BOM结构。它是针对单件小批生产企业产品复杂、个性化强的特点而设置的功能,是一种快速构建产品结构树并生成物料清单的方法。其主要设计思想是用户的产品在参考已有产品的BOM 结构基础上进行修改,以得到新的BOM结构。其基本思想是:从BOM表中引入一个已经存在的产品BOM,该产品与用户产品的结构相似,用户可在此基础上进行产品结构修改,可以在原有的基础上引入新的物料,删除不需要的物料,支持同类产品零部件的借用,提供产品结构复制功能,可由用户选择所需零部件进行复制,将选定已进行复制的零部件加入指定的位置。采用基于类的BOM 优点在于可以加快新产品设计的速度,由于已有的BOM 已经生产可使用,其生产计划,采购计划,包括工艺路线都是切实可行的,只用在原有的基础上作相应的少量的修改,即可生成相应的新产品的生产计划,采购计划和工艺路线等,从而从整体上加快新产品的投产速度,适应大规模定制生产的需要。
4. 2 基于类的BOM表遍历的实现
对于ERP系统来说,一个核心的问题就是如何快速的生成一个产品的物料需求计划,也就是确定某一种产品所需要的物料的种类和数量。物料需求计划也是生成采购计划和安排生产的一个主要依据。从理论上讲,要确定任一物料的需求,很容易想到的办法是将产品结构树进行遍历,当遍历到最底层时,统计出这种物料的需求量。按照这种方法来计算各种物料的净需求,则要求多次遍历表,由于一种物料有可能在一种产品可多次出现,所以原来的系统采用动态sql 的方式进行实现。在ERP系统中引入基于类的BOM 的概念后,系统中对于BOM表中的数据的遍历相当频繁,明显感到系统的延迟现象。所以需要在原来的基础上进行系统的二次开发,以适应新的情况。在实践中笔者采用了PowerBuildr 中的数据窗口技术收到了较好的效果,现简述如下。
PowerBuild 作为目前世界流行的数据库应用系统的前端开发工具,当然有其特色的吸引人的技术。其中数据窗口就是其中最富有特色的技术。利用它不仅可以实现应用程序对后台数据库轻而易举的操作(例如检索、更新等) ,而且操作的效率很高。同时数据窗口控件提供了丰富的高效率的接口函数来实现应用程序动态地对其中的记录进行各种操作,例如查找、排序、修改、删除、新增等。数据存储是PowerBuilder 中提供的一个与数据窗口一样功能的对象,它与数据窗口的最大区别在于它在用户界面中是不可见的,其余的属性和方法与数据窗口完全一样。而且它可在程序中动态地生成和销毁该基类的每个实例对象。
对于一种产品来说,它是由零件和部件组成的。零件对应一种物料,部件是由零件组成的,而我们关心的是这种产品最终需要哪些物料。为了统计出所有的物料,需要遍历产品结构树中的每一种物料,典型的就是采用递归的算法,对其中的每一分枝进行遍历。为了提高算法的效率,我们采用了3个数据窗口,一个数据存贮和一个递归函数来实现。数据窗口1中存放物料清单中的所有原始数据,数据窗口2中存放递归调用过程中所有部件的数据,数据窗口3中存放递归调用过程中所有零件的数据。递归函数有三个参数分别是需要分解部件的代码、数量和调用的层次。在开始调用该递归函数时,将需要分解的产品代码,数量,0(调用层次) 作为初始参数调用该函数,分解递推过程开始。
在每个递推过程中首先将调用层次加1 ,根据分解部件代码参数动态生成检索条件是上级代码为该代码的某个零件的临时数据存储。然后程序运用一个嵌套的子循环处理这些记录,处理这些记录时有两种情况:
1) 类型是部件的,则将该部件计算后存入数据窗口2中,当然首先要判断在数据窗口中是否有相同的零部件,有则累加数量,没有则新增一条记录,在数据窗口中保留未分解部件的底层码、需要数量、部件代码。
2) 类型为零件的,不再需要进行分解,计算好数量后将结果存入数据窗口3中。同样要判断数据窗口中是否有相同的零件,有则累加数量,没有则新增一条记录。
处理完这层递推过程的记录后,然后判断数据窗口2中记录,如果为空,则递归过程结束,不为空选取第一条记录中的数据作为函数的输入参数重新调用递归函数。进行下层分解递推,依此类推,直到产品结构的最后一层,然后逐级回归,最后完成分解过程。
该算法经过了实践的检验,比原来的算法效率有了较大的提高,系统在进行产品分解时的延迟现象消失。在该算法实施中巧妙地利用PB中的数据存储和数据窗口作为临时结果集的存放容器,最后结果再集中处理,大大减少了与数据库打交道的次数,并将一部分计算分给客户机来处理,减轻了服务器负担的同时,减少了网络数据通信量和响应时间。同时,通过采用两个数据窗口来存放中间结果,将原来的递归算法改造成了采用递推的方式来实现,笔者认为是整个算法实施后为什么性能大大提高的根本原因。
4. 3 特殊BOM生存期管理
为了对产品BOM数据进行有效的管理,同时也为了加快系统的运行速度, ERP系统应有对特殊BOM生存期进行管理的功能,即在系统中有一个特殊BOM表,用于存放个性化的BOM结构。系统生成的个性化的BOM结构是存放在特殊BOM表中的,由于单件小批生产企业一般会存在大量的个性化产品,特殊BOM表通过日积月累就会积累大量的产品BOM结构,严重影响了系统运行的速度。而且,当个性化的产品完成生产后一般就不会再用,所以ERP系统还应提供了特殊BOM清理功能,用户可以通过此功能将已经完成生产的个性化的产品BOM结构移入清理BOM 表中,系统在运行时不查询清理BOM表中的内容,这样既减小了特殊BOM表的数据量,也可以满足日后的查询需要。
5 结束语
ERP是企业实现信息化的有效工具,BOM是其信息传递的主要载体,它所管理的技术文件是企业的核心数据,它的正确性和完整性对企业的物流、信息流、价值流的通畅将产生很大的影响。本文所提到的BOM管理方法是结合笔者在一个工程项目中所采用的,在实践中得到检验,效果良好。