BOM

       BOM的意义与种类:料表又称为BOM(Bill Of Material),是制造业管理的重点之一,简单的定义就是“记载产品组成所需使用材料的表格”。以一个新产品的诞生来看:首先是创意与可行性研究的初期过程,接下来的过程就是初步的工程技术分析与原型产品的设计,等到原型产品比较稳定后,经过自制或外购分析(Make or Buy Analysis and Decision)后就会产生第一版的工程料表(EBOM Engineering BOM)。到正式量产之前,第一版的生产料表(PBOMProduction BOM)必须要先完成,以便企业内的相关部门有所遵循。在此之后,就进入了正常的例行维护阶段。现将一般制造型企业内存在的BOM说明如下:

 

中文名称

英文名称

记载内容

主要用途

主要使用部门

工程料表

Engineering BOM

新产品的用料结构

是研究开发单位与其他单位间针对新产品初始定义的沟通媒介及日后设变的处理平台

研究开发、生产技术

生产料表

Production

BOM

量产产品的用料结构 (企业内最多人使用)

用于进行生产计划,采购计划的拟定,也是搭载选配及替代料表、成本料表的平台

生管物管、 采购外协、 营销财务

计划料表

Planning BOM

产品族群比例关系(如某款式汽车手排档销量占30%,自排档销量占50%,手自排档销量占20%)

用于进行中长期的原料采购、计划及生产产能负荷计划

生管物管、采购外协、营销

成本料表

Cost BOM

产品的标准成本组成结构

用于查询产品标准成本之构成状况,通常使用于以标准成本立帐的企业

财务

选配料表

Configuration BOM

产品的选配件结构

用于录入客户订单时让用户可以选择产品的选配件

营销、生管物管

替代料表

Substitute BOM

产品的替代用料结构

用于进行物料计划时或实际进行生产时,针对本身数量不足,但替代零件足够的状况,以替代件替换原零件,以降低库存或避免缺料

生管物管、采购外协

保税料表

Tax-Bound BOM

产品的保税料件结构

用于进行申请海关保税合同时能自动展开并计算应申请的保税料件种类及数量

生管物管、财务采购

 


存储过程之BOM初探

       最近一直在研究ERP程序,自己也写了个小应用系统,现在虽然在研究中,但把我目前成果拿出来与大家共同探讨。

主要问题:根据BOM,库存,订单计算出物料需求

       BOM(Bill of Materials)通常称为物料清单,就是产品结构(Product Structure)

以下为所用到的表结构说明:

orders_mx:订单表明细,就是业务销售订单中所记录的产品及数量

storage:仓库状态表

BOM:产品结构表

BOM_need:制造产品所需求的物料及中间件

BOM_T:分解BOM时的临时表

下面是两种产品结构示意图:

存储在BOM中为:

库存状况如下:

订单状况:

ABCDMBB1B2D1D2D3EF实际库存情况见表storage,现要满足销售订单001需要各原材料多少

如下存储过程完成以上要求:

CREATE PROCEDURE EX_ORDERS                                               

                                               

/*本程序根据订单自动计算得出所需要采购的材料和应生产的产品数量*/                                               

/*BOM_needlayer=-1的即为要采购的材料或部件,其它的为要生产的产品*/                                                

                                               

@order_num            nvarchar(50)                                                

                                               

AS                                                

                                               

declare @layer             int;                                               

declare @eee             int                                               

                                                

BEGIN                                               

                                               

set @layer=0                                               

set @eee=(select max(layer) from bom )                                                

delete BOM_T                                               

delete BOM_need                                               

                                               

/*订单数量与仓库产品数量做差放入需求表 step1*/                                               

insert into BOM_need (internel,need)                                               

select orders_mx.internel,orders_mx.counts-storage.available_q as need from orders_mx,storage                                                 

where orders_mx.internel=storage.num and orders_mx.order_num=@order_num                                               

                                               

/*step2*/                                                

    while not(@layer>@eee)                                           

                                               

    begin                                           

                                               

    insert into BOM_T (internel,up_internel,layer,counts)                                           

    select bom.internel,bom.up_internel,bom.layer,bom.counts*n.need as counts from bom,BOM_need as n                                            

    where bom.up_internel in (select internel from BOM_need where layer=@layer)                                            

    and bom.up_internel=n.internel                                           

                                               

    insert into BOM_need (internel,need,layer)                                           

    select b.internel,sum(b.counts)-s.available_q as counts,b.layer from BOM_T as b,storage as s                                            

    where s.num=b.internel group by internel,layer,s.available_q                                           

                                               

    delete BOM_T                                           

    set @layer=@layer+1                                           

                                                

    end

 

END

GO

讲解

1.清空临时表BOT_T和需求表BOM_need,并在BOM表中找出最大LAYER值放入一个变量,做为要循环的次数

set @layer=0               
set @eee=(select max(layer) from bom )               
delete BOM_T

delete BOM_need    

2.订单数量与仓库可用量做差放入需求表BOM_need

      insert into BOM_need (internel,need)                                       
        
select orders_mx.internel,orders_mx.counts-storage.available_q as need from orders_mx,storage
        
where orders_mx.internel=storage.num and orders_mx.order_num=@order_num   

此时表BOM_need中内容如下:             

3.循环直至@layer>@eee,每次@layer自加一   

3.1在BOM表中找出layer=@layer的记录并且把数量countsup_internel等于BOM_need中的internel需求量need相乘

      insert into BOM_T (internel,up_internel,layer,counts)   
        
select bom.internel,bom.up_internel,bom.layer,bom.counts*n.need as counts from bom,BOM_need as n                                            
        
where bom.up_internel in (select internel from BOM_need where layer=@layer)                                            
    and bom.up_internel=n.internel

此时表BOM_T中内容如下:              

3.2汇总B OM_T并与可用量相减更新BOM_need

       insert into BOM_need(internel,need,layer)

         select b.internel,sum(b.counts)-s.available_q as counts,b.layer from BOM_T as b,storage as s
        where s.num=b.internel group by internel,layer,s.available_q

此时表BOM_need中内容如下:              

3.3清空表BOM_T并让@layer加一

      delete BOM_T 

      set @layer=@layer+1  

4.循环结束后表BOM_need内容如下: 

其中:                                                              
layer=-1
的记录即为需要采购的原材料或外购件,layer=0的即为所需生产的产品,layer>-1的即为需要车间生产的产品或中间件

附:本例中各次循环后的表BOM_T与表BOM_need的内容变化

终于弄完了,可能写的也不周到,欢迎大家一起研究吧!

PS:像产品中的中间件B,本例中在二种产品中它的层次相同,至于如果层次不同,则不适用本教程,目前在进一步研究中!

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值