中菁- odoo  ERP 实施 杭州

示例图片三
首页 > Odoo资讯 > odoo知识库

Odoo的 MRP和BOM

2017-05-08 11:33:27 中菁- odoo ERP 实施 杭州 阅读

1.1.1 物料需求计划(MRP)

1.1.1.1         概念

物资需求计划(Material Requirement Planning,MRP),其主要内容包括客户需求管理、产品生产计划、原材料计划以及库存纪录。其中客户需求管理包括客户订单管理及销售预测,将实际的客户订单数与科学的客户需求预测相结合即能得出客户需要什么以及需求多少。

物料需求计划(MRP)是一种推式体系,根据预测和客户订单安排生产计划。因此,MRP基于天生不精确的预测建立计划,“推动”物料经过生产流程。也就是说,传统MRP方法依靠物料运动经过功能导向的工作中心或生产线(而非精益单元),这种方法是为最大化效率和大批量生产来降低单位成本而设计。计划、调度并管理生产以满足实际和预测的需求组合。生产订单出自主生产计划(MPS)然后经由MRP计划出的订单被“推”向工厂车间及库存。

MRP计算必须具备以下基本数据:

  1. 主生产计划,它指明在某一计划时间段内应生产出的各种产品和备件,它是物料需求计划制订的一个最重要的数据来源。

  2. 物料清单(BOM),它指明了物料之间的结构关系,以及每种物料需求的数量,它是物料需求计划系统中最为基础的数据。

  3. 库存记录,它把每个物料品目的现有库存量和计划接受量的实际状态反映出来。

  4. 提前期,决定着每种物料何时开工、何时完工。

 

MRP的计算步骤:

  1. 计算物料的毛需求量

即根据主生产计划、物料清单得到第一层级物料品目的毛需求量,再通过第一层级物料品目计算出下一层级物料品目的毛需求量,依次一直往下展开计算,直到最低层级原材料毛坯或采购件为止。

  1. 净需求量计算

即根据毛需求量、可用库存量、已分配量等计算出每种物料的净需求量。

  1. 批量计算

即由相关计划人员对物料生产作出批量策略决定,不管采用何种批量规则或不采用批量规则,净需求量计算后都应该表明有否批量要求。

  1. 安全库存量、废品率和损耗率等的计算

即由相关计划人员来规划是否要对每个物料的净需求量作这三项计算。

  1. 下达计划订单

即指通过以上计算后,根据提前期生成计划订单。物料需求计划所生成的计划订单,要通过能力资源平衡确认后,才能开始正式下达计划订单。

  1. 再次计算

物料需求计划的再次生成大致有两种方式,第一种方式会对库存信息重新计算,同时覆盖原来计算的数据,生成的是全新的物料需求计划;第二种方式则只是在制定、生成物料需求计划的条件发生变化时,才相应地更新物料需求计划有关部分的记录。这两种生成方式都有实际应用的案例,至于选择哪一种要看企业实际的条件和状况。

 

1.1.1.2         OpenERP的物料清单(BoM)

OpenERP中BoM表的重要概念有:

  1. Bill of Materials:“需要独立生产”的产品的BoM表,该BoM表没有父BoM。“需要独立生产”的产品包括最终销售的产品,不用于销售的半成品。系统自动生成工单(Manufactory Order,MO)时候,会为“需要独立生产”的产品产生工单。

  2. Bill of Material Components:该BoM表有父BoM,系统不会为该BoM表产生单独的工单,而是和父BoM的工单一起生产。

  3. BoM Type:有Sets / Phantom 和 Normal BoM 两个选项。如果BoM Type是Sets / Phantom,系统不会为该BoM产生MO,如果该BoM又是根BoM,系统将直接将该BoM的子部件发送给客户。例如产品桌子,包括一块桌面、四条桌腿,如果该桌子的BoM Type是Normal BoM,系统将产生一张组装桌面和桌腿的MO,如果是Sets / Phantom,系统不产生MO,且,发货单(Delivery Order)上发货内容不是“桌子”,而是代之以一块桌面、四个桌腿。

  4. Parent BoM:父BoM

  5. Routing:工艺路线,一个工艺路线包括多个工作中心(Work Center)。系统根据工艺路线中的Work Center计算生产费用和工作中心负荷。

  6. Manufacturing Efficiency:成品率,如成品率为0.8,如果某订单要生产1000件产品,系统会按1000/0.8=1250的数量领料及生产。

  7. Properties:用于产品的BoM选择。例如电脑组装,产品“电脑”因其硬盘、内存等的规格不同,所需原料不同,因此会有多个BoM。如果销售订单上卖出一个“电脑”,系统将用哪个BoM安排生产呢?此时系统将根据Properties选择合适的BoM。其选择原理是,销售订单(SO)上销售人员销售时候,指定Properties,每个BoM上亦有唯一的Properties组合,系统将根据SO上指定的Properties,和该产品的每个BoM上的Properties比对,挑选Properties最“相似”的BoM安排生产。

 

1.1.1.3         OpenERP的MRP运算中若干小数点问题

  1. BoM表的参数及其应用

Manufacturing Efficiency:成品率

Product Rounding:数量精度

Quantity:数量

 

应用举例:

BoM表中,有些原料用量精度要求很高,有些精度要求低。

例如A原料BoM表中的单位是千克,精度要求是0.001千克,

B原料单位是克,精度要求是0.1克。

系统可以设置BoM上原料用量的小数位数(参数“Product Unit of Measure”),

但该参数适用于所有原料,它不能按不同原料分别设置小数位数。

Product Rounding正是用于解决BoM上不同原料的不同精度要求问题。

 

  1. MRP计算精度详解

成品BoM上数量(Quantity)为Q1,精度(Product Rounding)为R1, 成品率(Manufacturing Efficiency)为E1

MO上生产数量为Q2,BoM Line上某原料数量为Q3,精度为R2,成品率为E2

 

MRP计算步骤

a. 先计算产量因子:F = Q2 / Q1, 如果MO上和BoM上单位不同,这个步骤还会先单位换算。

b. 再考虑成品损耗率: F = F / E1

c. 再考虑成品数量及精度: Q = Rounding(F*Q1),这里的精度计算步骤是,取BoM的精度R1和单位上的精度两者较大者,“上抛”到精度值的整数倍。

d. 之后开始计算原料数量因子,F =  F / E2

e. 再考虑原料数量及精度: Q = Rounding(Q3 * F), 这里的计算也是,取精度R2和BoM Line单位上的精度,两者较大者,“上抛”到精度值的整数倍。

 

注意,上述MRP计算步骤是经过Bug修正后(修正点:mrp.py中方法_bom_explode)的步骤,OpenERP本来的计算步骤如下(其精度计算方式某些情况下误差非常大!):

a. 先计算产量因子:F = Q2 / Q1, 如果MO上和BoM上单位不同,这个步骤还会先单位换算。

b. 再考虑成品损耗率: F = F / E1

c. 再考虑成品精度: F = Rounding(F),这里的精度计算步骤是,取BoM的精度R1和单位上的精度两者较大者,“上抛”到精度值的整数倍。

d. 之后开始计算原料数量因子,F =  F / E2

e. 再考虑原料精度值: F = Rounding(F), 这里的计算也是,取精度R2和BoM Line单位上的精度,两者较大者,“上抛”到精度值的整数倍。

f. 最后计算原料数量:Q = Q3 * F

 

  1. MO报工时候的小数问题

假设MO上的成品数量是Q1,根据BoM计算出来的某原料,需要消耗的总数量为Q2,某次报工数量Q3。

则系统自动计算需要消耗原料数量为:Q3/Q1 * Q2。

 

假设某MO单,其成品数量为9,需要消耗的原料也是9。该MO分3次生产,每次生产3个。

当9个都生产完工后,系统计算的消耗原料数量为:

第一次:3/9 = 0.33333333 * 9

第二次:3/9 = 0.33333333 * 9

第三次:3/9 = 0.33333333 * 9

三次消耗的总原料数为:0.99999999 * 9,总数量不等于9。

因此MO单上的待消耗原料行,仍会显示尚有0.00000(实际是0.00000001)的原料待消耗,从而该MO单不能变为Done状态。

 

该Bug修正方法(修正点:mrp.py中方法action_produce):MO上每次原料消耗时候,如果剩余原料数量不足以生产一个成品需要消耗的数量(小于Q2/Q1),则一次性消耗掉所有原料,而不是消耗原料Q3/Q1 * Q2。

 

  1. 生产领料中内部调拨单的小数问题

MRP跑出的生产领料数量 90.34526 (小数精度"Product Unit of Measure"设定的是5)。

实际调拨时候(Confirm&Transfer操作),系统弹出的窗口上显示调拨数量 90.345 ,

小数点少了2位,这会导致系统调拨90.345,剩余0.00026,剩余数量系统自动分单到另一张调拨单。

且该调拨单每次“Confirm&Transfer操作”时候,总是调拨 0.000,从而不能结束该单。

经调查,问题原因在于系统缓存,重启OpenERP之后,上述问题即可解决。

关于系统缓存的详细Bug,目前尚在调查之中。


Powered by MetInfo 5.3.15 ©2008-2018 www.metinfo.cn