MRP算法概要

本文介绍了制造资源计划(MRP)系统的运作原理,包括时间范围的确定、再生式MRP算法计算公式与顺序、需求取数来源等内容。此外,还讨论了MRP系统实施的要求与常见异常业务分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 时间范围的确定:

T1 T2 T3 T4

 

T2: 系统日期
T3: 计划展望期的开始日期(通常情况下T2与T3为同一天)。
T4: 计划展望期的结束日期。
T1: 计算拖期后的开始日期。(受控于参数预计量有效期提前[ ]个月。)

二.再生式MRP算法
1. 计算公式:
净需求 = 毛需求/(1-损耗率) – 现有库存 + 安全库存 – 预计入库量 + 已分配量
2. 计算顺序
成品-à 半成品 -à材料 ,即按低阶码顺序进行计算。
三.需求取数来源:
1. 独立需求(成品)需求来源 取自订单、预测。
2. BOM单取物料使用状态的BOM。
3. 毛需求取自:
已审核且业务关闭状态为未关闭的销售订单分录中的[建议交货日期] 位于T1~T4之间的物料 (订货数量-已出库数量)

已审核未关闭的产品预测单分录中的[需要日期]位于T3~T4之间的物料

上层物料计算后的净需求。
4. 现有库存数: 属性为MRP仓的即时库存之和。
5. 安全库存: 取自物料主数据。系统由于实现了按订单追踪MRP功能,故在算法 上对安全库存单独进行处理,即先按物料计算安全库存产生的需求,再按订单进行计算,即会在0时区先产生安全库存产生的需求。
6. 预计入库数:
a. 采购订单: 已审核且MRP关闭标志为未关闭的采购订单分录中[交货日期]位于T1~T4之间的物料[数量-已入库数量]。
b. 委外加工生产任务单: 已审核或挂起的[计划完工日期]位于T1~T4之间的委外加工生产任务单[计划生产数量 – 已入库数量]。
c. 生产任务单: 已审核或挂起的[计划完工日期]位于T1~T4之间的生产任务单的[计划生产数量 – 已入库数量]。
d. 重复式生产计划: 已审核的[计划完工日期]位于T1~T4之间的重复式生产计划的[计划生产数量 - 分解执行数量(即分解后下达重复生产任务单的计划生产数量)]。
e. 重复式生产任务单:已审核或挂起的[计划完工日期]位于T1~T4之间的重复式生产任务单的[计划生产数量-已入库数量]。
f. 物料替代清单: 审核的物料替代清单(由参数控制),对于被替代物料作为预计可用量,对于替代物料作为已分配量。
g. 计划订单: 确认的计划订单(由参数控制)预计量的值为 建议订单量-累计下达数量,预计量日期为建议到货/完工日期。
7. 已分配量
生产类型单据: 当有投料单时按投料单的建议投料数量算已分配,当没有投料单时按BOM用量计算已分配。
8. 其它订货策略及批量、提前期等参数在此不做说明。
四. MRP系统实施
要求采购订单、销售订单、生产订单三大订单在系统中正确运行,入库关联订单、不执行的订单及时关闭。
四.主要异常业务分析
1. 拖期业务
描述:
销售订单中有物料的建议交货日期已小于系统当前日期(系统将这种业务定义为拖期),造成计划时重复生需求。
说明: K/3 MRP中将拖期需求放在第0时区。第一次MRP计算后需求的预计入库日期位于第1时区,1>0,即不为拖期需求的可用量,故下次运行MRP时重复产生需求。
改善建议:
K/3下一版本采用两种办法来解决: 一是将拖期订单产生的需求放在第0时区,则满足了订单需求和预计可用量的配合关系,下次运算不会产生需求。
第二种方式是,K/3在三大订单的追加执行功能中均增加了,修改建议交货日期功能。
从业务管理的角度,我们在当前版本及以后版本都强调说,拖期订单是企业实际业务中不应该存在的,当订单交货可能推后时,应该在系统中修改需求日期,以符合实际业务的需要。
2. 销售订单的业务关闭标志和采购订单的MRP关闭标志管理。
描述: 业务关闭标志及MRP业务关闭标志是分录级的业务标志,由业务系统自动判断执行,不可手工维护。
这两个标志的关闭条件为
a: 销售、采购订单已出(入)库数量>=销售订单的订货数量。

b: 在订单序时簿上执行关闭操作。
实际应用中经常反馈出现按b方式无法达到”关闭”的效果。经分析发现,原因在于
对系统收料通知单及发货通知单的错误应用。这两种单据是协调和采购、销售及仓库业务的单据,它的目的是传递需真正执行的物料及数量信息。但不少人将其视为收、发货计划。订单一生成,就做了通知单,此时订单按关联数量进行关闭、但业务关闭状成并未关闭。当订单出现异常(如客户调整时),无法真正关闭此订单。
解决建议:
正确应用通知单,当确认要出货时生成通知单,并关联生成出库单。或视业务流程的需要,取消此业务环节。 

<think>好的,我需要回答用户关于MRP算法实现的问题。首先,我得回忆一下MRP的基本概念。物料需求计划,也就是Material Requirements Planning,主要用于制造业中物料需求的计算计划。它的核心是根据生产计划、库存情况产品结构,计算出需要采购或生产的物料数时间。 接下来,用户想了解具体的实现方法。我应该分步骤来讲解。首先,可能需要介绍MRP的输入数据,比如主生产计划(MPS)、物料清单(BOM)、库存记录。这些都是MRP运算的基础。 然后,MRP的计算步骤。通常包括计算毛需求、净需求,考虑提前期库存可用。这里需要用一些数学表达式,比如净需求=毛需求 - 现有库存 - 在途库存。根据用户提供的系统指令,数学表达式需要用行内公式格式,所以要用$...$包裹这些公式。 还需要注意引用格式,比如在提到BOM或提前期时,可能需要添加引用标识。不过用户给的示例中引用标识是[^1],但用户提供的参考内容里没有具体的引用来源,所以可能需要假设存在这些引用或者省略,但根据用户示例,可能需要自己添加,但这里可能没有实际引用来源,需要检查是否有必要。 另外,用户要求生成相关问题,所以最后要列出几个相关问题,比如如何优化MRP计算,如何处理动态需求变化,MRP与ERP的关系等。 可能还需要一个代码示例,用户示例中有Python代码,所以可以提供一个简化的MRP计算示例,比如用Python类或函数来实现基本逻辑。但需要注意代码的正确性,比如如何处理BOM结构,计算净需求等。 还需要确保使用中文回答,结构清晰,分步骤说明。同时,按照系统指令,独立公式使用$$...$$,行内公式用$...$,比如净需求的公式可以写成$净需求 = 毛需求 - 现有库存 + 安全库存$,如果有独立公式的话,可能需要单独成段,比如生产计划的排程公式。 现在需要检查是否覆盖了所有关键点:输入数据、计算步骤、提前期处理、代码示例、相关问题。可能还需要注意MRP的展开过程,比如逐层分解BOM,考虑时间坐标上的需求等。 最后,生成的问题应该与MRP的实现相关,比如算法优化、异常处理、与其他系统的集成等。</think>### 物料需求计划(MRP算法实现 物料需求计划(MRP)的核心是通过产品结构(BOM)、主生产计划(MSP)库存数据,计算物料需求时间节点[^1]。其实现分为以下步骤: --- #### 一、输入数据准备 1. **主生产计划(MSP)**:定义最终产品的生产数时间,例如: $$生产计划表 = \{产品A: 100件, 交货期: 2023-12-31\}$$ 2. **物料清单(BOM)**:描述产品组成结构,例如: ```json { "产品A": {"零件B": 2, "零件C": 1}, "零件B": {"原材料D": 3} } ``` 3. **库存记录**:包括现有库存、在途库存安全库存,例如: $$现有库存_{零件B} = 50件, 安全库存_{零件B} = 10件$$ --- #### 二、MRP计算步骤 1. **毛需求计算** 根据BOM逐层展开,将产品需求分解为零件需求: $$毛需求_{零件B} = 生产计划_{产品A} \times BOM系数_{产品A→零件B}$$ 例如:$100 \times 2 = 200件$[^2]。 2. **净需求计算** 结合库存提前期: $$净需求 = 毛需求 - (现有库存 - 安全库存) - 在途库存$$ 若结果为负,则净需求设为0。 3. **时间坐标对齐** 考虑提前期(如零件B的采购需5天),反向推算订单下达时间: $$订单下达日期 = 需求日期 - 提前期$$ --- #### 三、代码实现(Python示例) ```python class MRPCalculator: def __init__(self, bom, inventory, lead_time): self.bom = bom # BOM结构 self.inventory = inventory # 当前库存 self.lead_time = lead_time # 各物料提前期(天) def calculate_requirements(self, product, quantity, due_date): requirements = [] # 递归分解BOM def explode_bom(item, qty, date): if item in self.bom: for component, ratio in self.bom[item].items(): gross = qty * ratio net = max(0, gross - self.inventory.get(component, 0)) if net > 0: order_date = date - self.lead_time[component] requirements.append({ "物料": component, "数": net, "下单日期": order_date }) explode_bom(component, gross, order_date) explode_bom(product, quantity, due_date) return requirements # 示例调用 bom = {"产品A": {"零件B": 2, "零件C": 1}} inventory = {"零件B": 50} lead_time = {"零件B": 5, "零件C": 3} mrp = MRPCalculator(bom, inventory, lead_time) requirements = mrp.calculate_requirements("产品A", 100, "2023-12-31") print(requirements) ``` --- #### 四、关键优化点 1. **批调整**:合并小批订单以减少成本 2. **动态更新**:实时响应库存变化或订单延迟 3. **异常处理**:安全库存不足时触发预警[^3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值