Appearance
制造订单安排日期的推算过程
在使用odoo 过程中,我们经常会在创建制造订单的时候,默认的安排日期一般是当前的日期,但是当我们有下级生产订单的时候,我们的下级订单安排的日期很多时候我们看到系统默认出来的时候都是过去的日期,这到底是怎么回事,今天结合蓝带这个项目案例,给给大家分享一下这个安排时间到底是怎么推算出来的。这里只分享制造订单的,销售订单,采购订单都是以其类推的推算过程。说到odoo订单日期,不得不提到Odoo 订单安排日期的倒推逻辑是 MRP(物料需求计划)的核心,其本质是从需求日期(客户要货的那天)开始,逆向计算每一道工序、每一次采购最晚必须在什么时候开始,以确保最终能准时交付。也就是说odoo 系统的时间是逆推的模式的。逻辑关系如下图所示: 
一,相关概念理解
- 产能 制造离不开产能,Odoo 将产能定义为“一个工作中心在单位时间内能够处理的最大产出数量”。例如,一个工作中心从开启到结束可以处理100个产品,那么它的产能就是100。产能的目的是为了避免重复计算准备时间,但是要注意生产前后时间只计算一次。在制造业中,生产一批产品通常不仅仅需要“干活”的时间,还需要“准备”和“收尾”的时间。生产前时间一般指准备时间,比如换模具、调试机器、准备工具的时间。生产后时间一般指清理善后时间,比如清理现场、维护机器的时间。那么什么是并行生产,就是说当你设置“产能”为 5 时,意味着这个工作中心(Work Center)可以同时生产 5 件产品。如果你生产 5 件,机器是满负荷运转的,如果你生产 10 件,机器需要跑两轮(或者两组人同时干)。那么为什么说只计算一次呢,意思是说无论你生产多少件(只要在产能范围内),准备和收尾的时间只算一遍。我们举例子来理解odoo 的产能核心业务。 假如咱们有一个工作中心,产能是5,生产前时间,也就是设置时间:10分钟,比如换模具,产能内的加工时间为10分钟,生产后时间为5分钟(清理)。那么,场景A: 生产1件,总时间=10(准备)+10(加工)+5(收尾)= 25分钟 场景B: 生产5件(刚好达到产能) 总时间=10(准备)+10(加工)+5(收尾)= 25分钟 场景C: 生产10件(超过产能,产能的2倍) 因为产能是 5,生产 10 件相当于要跑 2 轮。总时间 = (10 + 10 + 5) × 2 = 50 分钟 这里乘以 2 是因为加工时间翻倍了(两轮),但准备和收尾时间并没有翻倍,它们依然只发生了一次(或者说,每一轮都发生一次,但系统会自动按轮次计算)后面给的蓝带案例可以清楚看到这块的体现。
- 作业时间 对产能有个大概的理解后,接下来要理解作业时间。作业时间我理解的意思简单来讲就是当前的工序在产能范围内此工序从开启到完成所需要的工艺时间,也就是需要占用产能的机器运行的时间,不包含工艺等待时间,比如蓝带啤酒,发酵时间则不在作业时间范围内,因为发酵过程是不需要启动机器设备的,也就是说不占用车间产能,发酵液仅在发酵罐中发酵。
- 制造前置时间 这个制造前置时间是 Odoo 生产排程中最关键的参数之一,它决定了“最晚什么时候开始生产”。简单来说,它就是生产这批次东西总共需要花多少天。这个前置时间是倒推的“缓冲期”,假设你要在6月30日给客户交货。如果这个产品的“制造前置时间”填了5天。odoo就会自动倒推:必须在6月25日开始生产。我自己整理的公式:计划开始时间 = 需求日期 - 制造前置时间。这里要结合到物料清单来具体讲解。
- 场景一: 单层BOM 这种情况是最简单的,比如“蓝带啤酒”,假如它的BOM 里只有瓶子,水这些原材料。则制造前置时间=从开始罐装到成品入库的总天数。假如罐装需要1天,杀菌需要1天,贴标需要1天,入库需要1天,那么这里的制造前置时间就是4天。
- 场景二:多层BOM(最复杂的情况) “蓝带啤酒” 需要麦汁发酵成发酵液,再有发酵液发酵成啤酒,那么麦汁的前置时间为1天,发酵为7天,蓝带啤酒自己的前置时间需要1天,则总的制造前置时间=1(麦汁)+7(发酵)+1(蓝带啤酒)=9天。那么需要在6月30日前开始生产,则需要在6月21日启动生产。
- 场景三:分包产品(委外加工) 如果你的产品需要送到外面的工厂去加工(比如把瓶子送去外面贴标),那么这个委外加工的时间也要算进去制造前置时间 = 你把瓶子发给外包商的天数 + 外包商加工的天数 + 外包商寄回来的天数。 例子:寄过去要 1 天,加工要 2 天,寄回来要 1 天。这里就填 4。 总结:这个字段填多少,取决于你的生产流程有多长。 填少了:系统以为很快能做完,结果到了交货日还没开始生产,导致延期。 填多了:系统以为很慢,很早就让你开始生产,导致库存积压。 建议: 填平时从“下达生产指令”到“成品入库”实际平均花费的天数。
- 制造订单准备天数 “制造订单准备天数”就是给生产计划员留出的“缓冲期”或“提前量”,这是计划层面的时间,它是问你:“在生产开始前,我需要提前多少天把单子下好、把料备齐、把机器安排好?”这个时间是软性的,是为了应对突发状况(如原料没到、机器坏了)。那么填多少合适,这取决于你的供应链反应速度和管理风格:
情况 A:供应链非常稳定(推荐) 如果你的麦芽、酒花、瓶子都能随时买到,机器也从来不坏。 建议填 0 或 1。 理由:不需要提前太久,系统算到哪天开始,你就哪天做。
情况 B:供应链有风险(最常见) 如果你需要提前采购大麦,或者需要提前清洗发酵罐,或者担心原料运输会延迟。 建议填 2 到 3。 理由:给采购和生产计划员留出 2-3 天的“容错时间”。比如系统告诉你明天要开始,其实你今天就能把单子下好,心里不慌。
情况 C:长周期发酵(蓝带的案例) 啤酒发酵需要 7 天,这是一个很长的周期。如果中间出问题(比如温度控制失误),损失巨大。 建议填 1 到 2。 理由:虽然发酵时间长,但发酵前的准备工作(清洗罐体、准备酵母、调配麦汁)需要提前确认。填 1-2 天可以确保发酵罐在发酵开始前已经准备就绪。 总结建议: 对于蓝带啤酒这种发酵周期长的产品: 制造前置时间:填 8(假设灌装1天,麦汁1天,发酵6天,具体按你实际流程填)。 制造订单准备天数:建议填 1 或 2。 一句话解释: 填 1 意味着:“系统告诉我明天要开始生产,那我今天就把单子下好,把料备齐,明天一早直接开工。”
二,结合蓝带的案例,讲解生产排程的日期生成
- 物料清单概览 首先我们先看我配置的蓝带啤酒的物料清单的层级关系
从整体的物料清单上可以清楚的看到生产蓝带啤酒需要哪些原料,以及这些原料的层级关系。需要哪些生产阶段,提前期等等,看到的提前期就是咱们上面所说的“制造前置天数”。接着我们具体看看各个阶段详细的物料清单的配置。
- 高浓麦汁BOM
接着看一下咱们高浓麦汁的作业时间
接着看前置时间 
然后我们再看一下这个物料清单相关的工作中心配置 
作业的预计时长是跟工作中心的产能相关。 公式:预计总时间 = 工作中心基础时间 + 循环次数 × 时间周期 × (100 / 时间效率) 其中:
- 工作中心基础时间 = 设置时间 + 清理用时
- 循环次数 = CEIL(生产数量 / 工作中心产能)
- 时间周期 = 操作默认时长
- 时间效率 = 工作中心时间效率百分比 而我们的排程日期是根据你给定的物料中配置的制造提前期,跟工序时长表示的是车间中真正运行的时间,这个就跟车间工作中心产能挂钩。所以我们再做排程计划的时候要注意生产的量,以及工序的前置时间,工作中心产能,以及销售订单的预测量,要结合这些因素来制定生产计划。才能更贴近于实际生产,避免生产计划出现偏差。

由以上两个制造订单图,我们可以看到我们生产的量成倍增加,工作作业时长成倍增加,但是我们的排程日期并没有成倍增加,这就是因为我们配置了制造前置日期为1天,那么系统就认为制造这个高浓麦汁这个工序整个制造下来是需要1天的,但是车间是根据工作中心产能来计算这个高浓麦汁的作业时长,所以车间作业时长成倍增加,但是车间作业时长并不影响排程日期,所以排程日期并没有成倍增加。这样子就会导致排程计划跟实际差异大,按照计划应该是要交付了,但是实际没有交付,这样子就会导致生产计划出现偏差,所以我们在做排程计划的时候,要结合这些因素来制定生产计划,才能更贴近于实际生产,避免生产计划出现偏差。
那么你是不是会问,我们不设置制造前置时间,也就是说假设我们不知道你要生产多少,你要产生多少我就根据作业时间去推,这样子可不可以呢,理论上是可以的,请看

这种的情况,我们就不设置制造前置时间,那么系统就会根据作业时间来推算排程日期,这种也是可以理解的。需要注意的是作业时长是跟产能相关的,也就是说在产能范围能的时长是不变的,超过产能则需要相应的时长增加,这也后理解,比如我的产能是一次只能发酵100L 的发酵液,那你生产200L 的发酵液,则需要先启动后设备,然后投入100L 发酵液的原料,然后进行生产发酵,等这批次生产完后再重新投料,生产第二批次的发酵液,此时除了不需要启动和清理设备以外,设备一直在运行的,所以作业时间也是成倍增加的。
**注意:一旦配置的制造前置期,则系统会优先使用制造前置期 **
那么到这里大家有没有好奇,那既然两种形式都能进行排程计划,那么怎么区别,到底用哪种,接下来就是要讲这个问题了。
简单来说: 用“制造前置期”(Lead Time)是“拍脑袋”的经验估算。 用“作业时长”(BOM/Route Time)是“做数学题”的精确计算。 结论先行:在 Odoo 17 的生产制造中,你应该主要依赖“作业时长”来排程,而“制造前置期”仅作为顶层补货预警的简化参数。 两者有明确的优先级。
下图清晰地展示了这两种排程方式的运作模式、各自的适用场景以及它们的优先级关系: 核心逻辑剖析 首先要理解它们的特点,优缺点
- 制造前置期(Lead Time):粗放式“倒计时” 定义:在产品主数据中设置的一个固定天数。例如,啤酒的制造前置期设为“9天”。 排程逻辑:当有一个需求(如销售订单)需要在6月30日交货时,系统粗暴地倒推9天,告诉你“必须在6月21日开始生产”。 优点: 简单:配置快,不用管具体工艺。 稳定:无论订单数量多少,都用一个固定天数,便于对客户承诺。 致命缺点: 不精确:它不考虑产能、设备负载、实际订单数量。生产1瓶和生产10000瓶,它都告诉你需要9天,这显然不合理。 资源冲突:它无法防止多个订单被排到同一设备、同一时间。
- 作业时长(BoM/Route Time):精细化的“排程引擎” 定义:在物料清单(BoM)的“操作”页签或“工艺路线”中,为每一道工序设置的具体时长(单位:分钟/小时)。 排程逻辑:这是 Odoo MRP 的核心。系统会根据BOM层级和工艺路线,动态计算: 从需求日期开始,倒推每一道工序的结束和开始时间。 结合工作中心产能,计算实际所需工时(例如,产能1000瓶/小时,生产2000瓶就需要2小时)。 考虑工作日历(如设备是否24小时运行)。 优点: 极度精确:能算出每道工序、每台设备在几点几分被占用。 动态调整:订单量翻倍,所需时间自动按比例增加。 资源可视化:能清晰看到设备瓶颈和空闲时间。 缺点: 配置复杂:需要详细设置每一道工序的作业时间和工作中心。
如何抉择?—— 经验平衡 必须用“作业时长”排程的场景: 你的生产流程超过1道工序(比如糖化 -> 发酵 -> 灌装)。 你有设备瓶颈,需要知道哪台机器在什么时候被占用。 你需要精确到小时甚至分钟的生产计划。 你的订单数量变化大,生产时间随之变化。 可以用“制造前置期”估算的场景: 外协加工:你只需要知道大概的委外周期。 顶层成品的粗略承诺:给销售一个大概的交期(但内部排产必须用作业时长)。 简单的采购件:原材料采购提前期。
我的理解建议是:
- 配置底层:为所有工作中心设置正确的“产能”
- 配置工艺:在BOM的“操作”页签,为每一行(每道工序)设置准确的“作业默认时长”。
- 运行MRP:系统会自动根据“作业时长”生成精确到分钟的“计划订单”。
- 设置前置期:在产品主数据的“采购”或“库存”页签,设置“制造前置期”。这个天数应略大于基于作业时长计算出的理论天数,作为安全缓冲(如计算需8天,可设10天)
**特别要注意,如果是多级的BOM,而且采用的是按作业时间自动计算的,那需要手动调整下级的安排日期,因为系统会默认安排的日期是从当时建立的时间为起点,比如我们蓝带啤酒,我配置制造安全提前期为1,然后请看截图 **
然后点下级生产订单 

从截图可以看到,其实默认的时间都是我建立订单的那刻时间开始,然后逆推,每个下级制造订单都要减去安全提前期,然后你会发现好奇怪,发酵液需要到6月8号才结束,是不是很奇怪。这是因为安排开始的日期不是按照原料的需求日期来算的,而是按照我建立订单的时间来算的,所以需要手动调整下级生产订单的日期,然后重新计算,这样就可以按照需求日期来算的。再简单一点说就是要有料才能生产,不然原料都还没生产出来,怎么进行生产呢。
那我再给大家看看我做的配置生产提前期的情况:假如我认为车间生产的能力是按产能来的,也就是说车间没办法超产能生产,一次开机到关机,机器只能运行这么长的时间了,不能超负荷生产。那么我配置麦汁的制造安全提前期是1天,发酵为8天,因为我认为主发酵需要7天,再加上其他工序为1天,则总共为8天发酵液的生产,然后生产啤酒需要1,打包需要1天。这个是在产能范围内。 先看我配置的前置日期: 



接着看我们的订单生成情况: 


这个截图怎么看,我给大家说一下,我们先看“制造订单-固定生产日期-1“,安排日期是2026年07月10日 18时04分35秒,配置制造前置期是1天,那么它的下级生产订单,也就是它的物料必须在2026年07月10日 18时04分35秒的前一天生产出来,因为我配置生产安全提前期1天。也就是下级生产订单,即物料生产完成时间是2026年07月09日 18时04分35秒,看制造订单-固定生产日期-2的结束时间正好是这个时间。
另外说一下制造排期中的安全提前期是怎么理解的 这是一个非常关键的配置项,它直接关系到你的生产计划是“刚刚好”还是“有备无患”。简单来说:“安全提前期”就是给你的生产计划买的一份“保险”。
- 核心定义 安全提前期 (Safety Lead Time):系统在计算生产开始日期时,会额外多预留的天数。 计算公式: 计划开始日期 = 需求日期 - (制造前置期 + 安全提前期)
- 举个例子(啤酒生产场景)
假设你的啤酒制造前置期是 9天(发酵+灌装)。 情况 A:不勾选安全提前期(0天) 客户要求 6月30日 交货。 系统计算:6月30日 - 9天 = 6月21日 开始生产。 风险:如果6月21日那天麦芽没到货,或者发酵罐临时坏了,你就完蛋了,肯定延期。 情况 B:勾选安全提前期(比如 2天) 客户要求 6月30日 交货。 系统计算:6月30日 - (9天 + 2天) = 6月19日 开始生产。 好处:你提前了2天开始做。这两天就是你的“缓冲期”。就算麦芽晚到了1天,或者发酵慢了1天,你依然能在6月30日准时交货。
- 什么时候该用?怎么选? 勾选(推荐): 当你的供应链不稳定(原材料可能晚到)。 当你的设备容易出故障。 当你不想承担延期的风险。 建议值:通常设为 1~3天。对于啤酒这种发酵周期长的产品,设个2天缓冲非常稳妥。 不勾选: 当你的供应链极其稳定,原材料随叫随到。 当你的设备是全新的,故障率为零。 当你追求极致的“零库存”管理(Just-in-Time),不想让产品提前做完占压仓库。
