在Odoo中,推式(Push)和拉式(Pull)物流是库存管理的核心机制,二者的配置和应用场景差异显著。以下从技术实现角度深入分析其运作逻辑,并提供具体配置示例:
1. 推式物流(Push Rules)
技术实现
- 触发条件:基于库存移动的源库位和目标库位自动触发
- 路由配置:通过`库存路线(Stock Routes)`定义,与产品/产品分类绑定
- 运作流程:
- 创建入库(如采购收货)时自动匹配路由规则
- 系统生成分步转移单据(如质检→存储)
- 每个步骤生成独立的库存移动记录
典型配置示例(XML)
<record id="route_quality_check" model="stock.route"> <field name="name">质量检测流程</field> <field name="rule_ids" eval="[(4, ref('stock_rule_quality_check'))]"/> </record> <record id="stock_rule_quality_check" model="stock.rule"> <field name="name">质检前转移</field> <field name="action">push</field> <field name="location_src_id" ref="stock.location_stock"/> <field name="location_dest_id" ref="quality.location_quality_control"/> <field name="picking_type_id" ref="stock.picking_type_internal"/> <field name="delay">0</field> <!-- 无延迟立即执行 --> </record>
高级应用场景
- 多级质检流程:通过串联多个push规则实现分阶段质检
- 动态路径选择:使用`route_id`字段动态分配不同转移路径
- 时效控制:设置`delay`参数控制转移时间间隔
2. 拉式物流(Pull Rules)
技术实现
- 触发机制:基于需求信号(销售订单、生产工单等)的反向追溯
- 补货策略:通过`补货规则(Replenishment Rules)`配置
- 关键算法:
- 动态计算安全库存(min - max规则)
- 考虑采购提前期(Lead Time)和批量规则
- 多供应商优先级管理
MTO(按订单生产)配置示例
# 产品配置代码示例 product_template = env['product.template'].create({ 'name': '定制产品', 'type': 'product', 'route_ids': [ (4, env.ref('stock.route_warehouse0_mto').id), (4, env.ref('mrp.route_warehouse0_manufacture').id) ] })
补货规则参数详解
参数 | 说明 | 典型值 |
---|---|---|
触发方式 | 库存水平/周期性检查 | min - max |
提前期 | 供应商响应时间 | 5天 |
订购量 | 经济批量计算方式 | EOQ公式 |
来源位置 | 供应商/上级仓库 | 外部供应商 |
3. 混合模式应用
典型案例:JIT生产模式
- 销售订单触发拉式需求(Pull)
- 生产工单生成推式工序转移(Push)
- 完工自动转移至发货区
graph LR A[销售订单] --> B{库存检查} B -- 不足 --> C[生成生产订单] C --> D[原材料领用 Push] D --> E[生产线转移 Push] E --> F[质检区 Push] F --> G[成品仓 Pull]
4. 调试与优化技巧
库存移动追踪
SELECT * FROM stock_move WHERE product_id = [产品ID] ORDER BY create_date DESC;
规则优先级调整
# 调整规则执行顺序 env['stock.rule'].search([...]).write({'sequence': 10})
性能优化
- 批量处理规则计算(启用`group_procurement`)
- 缓存常用库位数据
- 异步执行复杂路由计算
5. 常见问题解决方案
问题场景:推式规则未自动执行
排查步骤
- 检查产品路由配置`product_category.route_ids`
- 验证仓库路线启用状态`stock_route.active`
- 确认源库位可用库存`stock.quant`
- 检查操作类型权限`stock_picking_type.show_operations`
问题场景:补货订单未生成
排查步骤
- 验证补货策略配置`stock.warehouse.orderpoint`
- 检查需求预测计算`stock.demand.forecast`
- 确认供应商交货时间`res.partner.delivery_lead`
- 查看排程器运行日志`ir_cron`
6. 版本差异说明
- Odoo 15+:引入动态路由引擎(基于Python的规则引擎)
- Odoo 16+:增强多仓库级联拉式规则
- Odoo 17+:新增AI驱动的需求预测集成
建议在实施时结合具体版本参考`stock`模块源码,重点关注以下模型:
- `stock.rule`(核心路由逻辑)
- `procurement.group`(需求分组机制)
- `stock.move`(库存移动执行单元)
通过合理配置推拉结合的策略,可构建适应复杂供应链场景的弹性库存体系。建议在实施前进行完整的业务流程模拟测试,利用Odoo的沙盒环境验证不同场景下的规则触发逻辑。