物料清单(Bill of Materials,BOM)是产品结构的技术性描述文件,它表明了成品、半成品、原材料之间的结构关系,以及每个部件所需要的各下属部件的数量。BOM是企业ERP(EntERPrise Resource Planning)系统的核心数据。对于一些沿海的加工贸易企业,海关需要将企业内部的BOM转换为单损耗表,从而对企业的原材料进口、生产过程和产品出口进行全程监管。
由于企业和海关对数据的要求不同,企业内部需要了解生产过程每一道工序的原材料到半成品、半成品到产品的消耗情况,而海关等监管部门更关心进口保税原材料到最终出口产品消耗情况,需要将BOM数据转换为单损耗数据。本文提出了一种物料清单到单损耗表的转换算法,在构造BOM的同时,生成单损耗表,即满足了企业内部数据管理系统的需要,也为海关等监管部门提供了有效的监管依据。
1 BOM与单损耗表
通过对BOM操作,可以查询某个产品是由哪些原材料加工而成以及各种原材料的消耗情况。BOM中涉及到如下概念:
* 单损耗:又称单耗,是指加工生产单位出1:3产品所耗用的进口保税料件的数量,包括净耗和工艺损耗。
* 净耗:是指物化在单位出口产品中的进口保税料件的数量。
* 工艺损耗:是指除净耗之外必须耗用,且不能物化在成品中的进口保税料件数量。
* 损耗率:指工艺损耗与单耗之比,即损耗率=工艺损耗/单耗=l-净耗/单耗。
企业为满足监管要求,需要将BOM表转换为海关要求的单损耗表。BOM表和单损耗表都是用来描述成品和料件之间的消耗关系,它们之间的区别是:BOM表描述最初料件-半成品-成品的消耗关系;而单损耗表仅描述最初料件-成品之间的关系。BOM表的变化按日期区分;而单损耗表的变化按不同的版本号区分。
BOM构造算法主要有递归遍历、非递归遍历和层次遍历等,在本项目中采用了深度优先算法构造BOM,使用了面向对象的数据封装技术,利用路径生成单损耗表。
2 单损耗的计算方法
下面以某化工产品为例,介绍其单损耗的计算方法,该产品的配方结构如图1所示,单损耗的计算过程可分为两步。
图1 成品配方结构图
(1)首先计算BOM表到单损耗表的分支1(图1中加粗分支)的净耗和损耗率。其中,P9为最初料件,P6和P2为半成品,P1是最终成品。Cmi(i=1,2,...,n)表示由下一个料件(半成品)加工成上一个半成品(成品)的净耗,dmi(i=1,2,...,n)表示由下一个料件(半成品)加工成上一个半成品(成品)的损耗率。
假设由最初料件P9加工成最终成品P1的净耗为cmpa,由最初料件P9加工成最终成品P1的损耗率为dmpa,则cmpa和dmpa的计算公式如下:
(2)其次计算BOM表到单损耗表的总的净耗和损耗率。第1步计算了BOM表的分支1的净耗和损耗率,下面计算BOM表到单损耗表的总的净耗和损耗率.原材料为P9的另一个分支为P9-P6-P3-P1(分支2),通过第1步中的公式(1)、(2),计算出由分支1加工成最终成品的净耗cm加和损耗率。同样,可以计算出由分支2加工成最终成品的净耗cmpb和损耗率dmpb。
假设由最初料件P9加工成最终成品P1的总净耗为cm,由最初料件P9加工成最终成品P1的总损耗率为dm,则cm和dm的计算公式如下:
3 算法的设计及实现
3.1 基于面向对象技术的数据封装
在BOM的设计中,顶点表示料件(成品、半成品或原材料),边代表两个料件之间的损耗关系。由于顶点和边包含了大量的信息。且这些数据是动态变化的,在设计中使用了面向对象的技术,构造了4个类用来封装相关数据,它们分别是:
* Material类封装了有关料件(成品)信息,是数据表Material在内存中的映象。
* Vertex类封装了结点相关信息。
* Edge类封装了与边相关信息,是数据表Product Relation在内存的映象。
* Graph类封装了带权有向图的构造,遍历方法。各个类之间的关系如图2所示。
图2 B0M结构的类关系图
读过这篇文章的人还读过:
4006199527