很多人第一次看 Odoo 的主生产计划,会把每个周期格子理解成“一个建议数”。企业版真正复杂的,是格子背后的状态机。
这篇文章主要参考:
enterprise/mrp_mps/models/mrp_mps.py
一、MPS 先算数量,再算“是否已经来不及”
在 get_production_schedule_view_state() 里,系统不只计算 forecast_qty、incoming_qty、replenish_qty,还会结合 _get_lead_times() 算出 procurement_date = today + lead_time。这个日期的意义是:如果某个周期开始日已经落进提前期窗口,那么理论上现在就该动手了,否则货来不及。
二、状态不只是红绿灯,而是分成四类主状态
_get_forecasts_state() 会给每个格子判:to_launch、to_relaunch、to_correct、launched。它们分别对应该补未补、补过但需要重跑、实际补货超过计划、以及当前计划与实际补货已对齐。计划不是只看建议量,更要看执行状态。
三、为什么有的格子会被标成 forced_replenish
在不是 launched / to_correct 且 procurement_qty > 0 的格子里,系统还会进一步打 to_replenish 与 forced_replenish 标签。前者表示已进入提前期窗口,后者表示当前计划表中最靠前、最该先处理的格子。forced 不是“数量更大”,而是“时间优先级最高”。
四、结论
企业版 MPS 真正厉害的地方,不在算出一个补货数,而在告诉你:这个数到底是可以等等,还是已经因为提前期而必须现在执行。
DISCUSSION
评论区