跳至内容

理解 Odoo 的 stock.picking 模型:入库、出库与仓库流程解析

全面解析 Odoo 中心化转移模型:库存与仓储管理实战指南 在快速变化的供应链环境里,企业不能再依赖单点操作来管理库存。Odoo 的中心化转移模型(central transfer model)提供了一种把分散的收发、调拨与入库出库统一编排的方法,帮助企业把库存流动变成可预测、可审计的流程。本指南用接地气的方式讲清楚这个模型的核心思想、常见场景、设置要点以及在实际仓储运营中如何落地与优化。 为什么要用“中心化转移”? 传统模式下,库存移动往往由多个独立单据驱动——销售订单生成出库单、采购订单生成收货单、手动调拨产生另一张单据,导致仓库操作重复、库存记录不同步、追溯困难。中心化转移把这些分散单据抽象成统一的“转移(transfer)”流程:每一次库存位置变化都以同一套逻辑记录和处理,减少冗余单据、降低人工干预、提升数据一致性。 核心概念一览 - Transfer(转移):表示一次库存从一个或多个来源位置向一个或多个目标位置的移动,是模型的最小执行单元。 - Move(移动行):转移中的单条物料行,记录具体产品、数量与位置关系。 - Operation(操作):执行层面的动作,比如拣货、包装、过磅或质检,支持序列化、批次/批号管理与条码扫描。 - Location(位置):仓库内外的逻辑或物理位置(收货区、待检区、储位、顾客地址等),用以划分库存的具体存放点。 常见业务场景与处理方式 - 采购收货:供应商送货进入“收货区”,生成一个入库转移,支持先验收后上架或直接上架。 - 销售出库:销售确认触发出库转移,可拆分成拣货、打包与发运三个操作,配合波次拣货提高效率。 - 库内调拨:不同储位或不同仓库之间的内部移动,做为转移被统一管理,便于库存移动追踪和成本核算。 - 退货与返修:退货生成逆向转移,支持流程中加入质检与返工节点,保证退回物品的可追溯性。 设置建议与落地要点 - 明确仓库位置结构:先梳理仓库内外所有位置与其逻辑关系,按入库区、质检区、储位、发运区等分层建模。 - 设计物料流模板(routes):把常见路径(如直接上架、先检后上架、交叉对接)抽象成路由,系统能自动选择合适的转移流程。 - 使用操作类型(operations types):为每类转移定义默认来源/目标位置与负责团队,简化单据生成与权限分配。 - 启用批次/序列号管理:对需要追溯的产品启用批号或序列号,加强出入库核对与召回能力。 操作层面优化建议 - 梳理实际拣货策略:根据订单密度选择单件拣货、批次拣货或波次拣货,并把策略与转移操作绑定。 - 集成条码与移动终端:通过扫码确认“移动行”,减少纸质单据,提升准确率和出入库速度。 - 自动化规则与补货策略:设置最小/安全库存与自动补货规则,让系统主动触发采购或内部调拨转移。 常见问题与解决思路 - 库存不一致:排查重复转移、手动库存调整或错误的路由配置,优先核对最近的转移记录与实际库存。 - 拣货效率低:检查拣货路线是否合理、波次是否按高频出库优先,以及移动设备和标签是否到位。 - 复杂退货处理:为退货建立独立的转移模板,明确质检、返工和可再上架的条件。 总结与实施路线图 中心化转移模型不是一次性改造,而是分阶段推进:先梳理位置与常见路由,搭建操作类型与转移模板;再逐步引入条码、批次管理与拣货优化;最后结合自动补货与报表分析形成闭环。通过把每一次库存移动都纳入统一模型管理,企业能显著提升盘点准确率、缩短周期并降低人为错误,打造可控、可追溯的现代仓储体系。
2026年3月10日
理解 Odoo 的 stock.picking 模型:入库、出库与仓库流程解析
Dasolo
| 还没有评论

引言


在 Odoo 中,模型决定了数据在数据库里的组织方式。无论是销售订单、库存调拨,还是仓库作业,所有业务记录都依赖模型来保证数据结构一致,可被系统逻辑识别和处理。


无论是开发人员还是功能顾问,弄清模型如何工作都是上手 Odoo 的先决条件。模型不仅声明字段和相互关系,还封装了业务规则,是系统数据设计的基石。


本文聚焦库存应用中一个核心模型:stock.picking。无论你是在做仓库模块定制、第三方系统对接,还是流程配置,这个模型都是不可避免的工作对象。

什么是 stock.picking 模型


简而言之,stock.picking 用来表示一次货物转移。它是追踪仓库操作的主记录——每条 picking 记录对应一次从源位置到目标位置的库存移动。


在库存模块内,收货、发货与库内调拨都会产生或更新 stock.picking。确认销售发货、验收入库或跨仓移动时,系统就在后台创建或修改相应的 picking 记录。


stock.picking 定义在 stock 模块中,其他模块通过 Odoo 的模型继承机制在其上扩展功能。销售模块会补充与发货相关的字段,采购模块会增加收货流程,制造模块会连结生产物料的消耗与入库,各模块各司其职而不重复核心结构。


该模型继承了 mail.thread 与 mail.activity.mixin,因此可以直接在搬运单上记录变更、发送消息并安排任务,便于协同与跟踪。

模型中的关键字段


下面列出的是使用 stock.picking 时最常接触到的一批字段。理解它们的用途有助于你更精准地操作调拨与库存流程。


1. name(单据编号)

类型:字符。用于存放调拨的唯一参考号,通常由序列自动生成(例如 WH/OUT/00001)。该编号显示在单据抬头,是用户识别该调拨的主要方式。


2. origin(来源单据)

类型:字符。记录此调拨关联的源单号:对出库通常是销售单号,对入库是采购单号。便于追溯业务来源和做审计。


3. state(状态)

类型:选择。反映调拨当前的处理阶段,常见值有 Draft、Waiting Another Operation、Waiting、Ready、Done、Cancelled。状态控制可执行动作,系统也会依据相关 stock.move 计算并更新该字段。


4. picking_type_id(作业类型)

类型:Many2one(stock.picking.type)。定义这是一笔收货、发货还是内部调拨。该类型决定默认的源/目标库位与处理行为,是创建时必须指定的字段。


5. move_ids(库存移动行)

类型:One2many(stock.move)。每条 move 代表一种产品及其移动数量,是调拨的核心行项。可用量预留、分配等逻辑都作用于这些 move。


6. move_line_ids(移动明细)

类型:One2many(stock.move.line)。更细粒度的操作行,存放批次、序列号与具体库位信息,常用于拣货、打包与最终验收。


7. location_id(源库位)

类型:Many2one(stock.location)。货物取出的起始位置。对于出库一般是公司库存;对于入库通常对应供应商位置。该字段为必填项。


8. location_dest_id(目标库位)

类型:Many2one(stock.location)。货物要移入的目标位置。出库通常为客户位置,入库则回到公司库存。该字段决定货物最终归属。


9. partner_id(关联联系人)

类型:Many2one(res.partner)。配送或收货的对象:出货为客户,收货为供应商。用于单据地址、交付凭证和承运商对接。


10. scheduled_date(计划处理时间)

类型:日期时间。标记预计要执行此调拨的时间点,用于排程与优先级排序。手动设置会影响其下属移动的预期时间。


11. date_deadline(承诺/截止日期)

类型:日期时间。通常由销售或采购单传入,用来标识是否逾期以及对外承诺的交付日期。


12. date_done(完成时间)

类型:日期时间。记录调拨被确认完成或取消的时间,只读且由系统在完成时自动填写。


13. priority(优先级)

类型:选择。用于控制库存分配顺序,高优先级的调拨在库存分配时会优先得到物料,适用于紧急订单处理。


14. move_type(出运策略)

类型:选择。决定发货策略,例如立即尽可能发货(允许部分发运)或等所有商品齐备再发(全部或不发)。该策略影响调拨何时能被执行。


15. user_id(负责人)

类型:Many2one(res.users)。分配给负责此调拨的用户,便于任务分配和工作量统计。默认创建者为当前用户。


16. company_id(公司)

类型:Many2one(res.company)。指明此调拨所属的公司,在多公司环境下决定账务与库存归属,通常从 picking type 继承而来。


17. group_id(采购/运单组)

类型:Many2one(procurement.group)。将同一业务产生的多条移动关联在一起,便于把来自同一订单的作业汇总管理。


18. backorder_id(原始单)

类型:Many2one(stock.picking)。当部分验收生成补单时,该字段指向原始单据,便于追踪拆单与后续处理。


19. backorder_ids(后续补单)

类型:One2many(stock.picking)。保存由当前调拨产生的后续补单,用于管理部分完成后的剩余作业。


20. return_id(退货关联)

类型:Many2one(stock.picking)。若此单为退货产生,则指向被退回的原始调拨,支持退货流程管理。


21. note(内部备注)

类型:Html。仓库内部可见的备注区域,可写入特殊操作说明或处理要求,方便作业人员参考。


22. signature(签字图片)

类型:Image。交付时捕获的签收图片,用作送货凭证并以附件形式保存。


23. is_signed(是否已签收)

类型:布尔。由 signature 计算得出,表示该交付单是否已经完成签收。


24. owner_id(物权归属)

类型:Many2one(res.partner)。在代销或第三方持有库存场景下,用来指定物品归属方,验证时可将所有权分配给此人。


25. package_level_ids(包裹层级)

类型:One2many(stock.package_level)。用于打包操作,将多条移动明细组合到包裹层级以便运输与扫描管理。


26. create_date(创建时间)

类型:日期时间。记录此记录何时被创建,由 Odoo 基础模型自动维护。


27. write_date(最后修改时间)

类型:日期时间。记录最近一次修改时间,由系统自动更新,便于审计与同步检查。


28. active(激活标记)

类型:布尔。软删除开关;设为 False 表示归档,记录仍可保留但不会出现在默认列表中。

该模型在企业流程中的应用场景


1. 销售与发货场景

销售订单一旦确认,系统会生成对应的发货单(stock.picking)。仓库按照单据拣货、打包并确认发运,单据状态随流程由草稿走向待处理再到完成。


2. 采购与收货场景

采购订单确认后会产生入库单,供应商发货后仓库接收并把货移入公司库存,partner_id 标识为供应商,确认后库存数量随之变更。


3. 库内调拨

跨库位或仓库的库存移动会生成内部调拨,picking_type_id 的类型通常是 code 为 'internal' 的作业类型,源与目标均为内部库位。


4. 退货与补单

顾客退货会创建退货调拨,并通过 return_id 关联原始出库;若部分验收则会生成补单,backorder_ids 用于保存未完成的剩余作业。


5. 生产与制造场景

在制造流程中,会为原材料的领用和成品的入库各生成对应的 pickings,mrp 模块会在 stock.picking 基础上扩展以实现生产相关的库存流转。

开发者如何扩展此模型


开发者可以通过多种方式扩展 stock.picking,模型继承是最常见且稳定的手段。


模型继承方式

在自定义模块中使用 _inherit = 'stock.picking' 来扩展模型:可以新增字段、覆盖方法或加入约束。通过继承而不是修改原代码,便于后续升级与维护。


新增字段

在继承的模型中声明新的字段,选择合适的字段类型(Char、Many2one、Boolean、Integer、Text、Selection 等)。在多公司环境下考虑 company-dependent 字段的影响。


Python 端扩展

可覆盖方法例如 button_validate、action_assign 或 _create_backorder 来加入业务逻辑,记得在适当位置调用 super(),并小心处理状态变化与移动记录的创建流程。


Odoo Studio 的使用

对于简单的界面字段或注释,Odoo Studio 可以快速完成无代码定制;但涉及复杂逻辑、外部承运对接或长期维护时,建议通过自定义模块实现更可靠的扩展。

最佳实践建议


  • 手动创建调拨时务必指定 picking_type_id,因为它决定了默认库位与后续行为。
  • 使用 origin 字段记录源单据编号,有助于报表统计与线上问题排查。
  • 在做 API 对接时,stock.picking 在 Odoo API 中是可见且可操作的:通过 move_ids 关系创建明细移动。切记不要创建没有任何 move 的空调拨,系统与库存一致性会受影响。
  • 合理使用 scheduled_date 进行排程与优先级控制,它会影响物料预留和作业调度。
  • 自定义字段请使用 x_ 或模块前缀命名以避免与未来 Odoo 版本的字段冲突。

常见错误与陷阱


  • 未在创建时指定 picking_type_id,可能导致默认库位错误或行为不符合预期。
  • 在不理解状态机的前提下于确认后随意修改 move_ids,会造成状态不同步或库存异常。
  • 忘记为发货单设置 partner_id,会影响承运商计算与单据打印地址等功能。
  • 覆盖 button_validate 时不调用 super(),常会破坏补单创建逻辑或影响其他模块的联动。
  • 默认假设 move_ids 与 move_line_ids 始终同步是错误的;move_line(明细)通常在预留或使用详细操作时才会被创建。

总结


stock.picking 是 Odoo 库存体系的核心,用来承载转移、发货与收货记录。掌握其关键字段与扩展点,能让你更高效地配置、定制与对接 Odoo。


无论你是负责仓库流程梳理的功能顾问,还是开发定制模块的工程师,熟练掌握 stock.picking 都能节省大量时间并降低实施风险。

准备好优化你的 Odoo 仓库了吗


Dasolo 擅长帮助企业实施、定制与优化 Odoo,尤其是在 API 对接与开发集成方面,我们对 Odoo 的数据架构与核心模型(如 stock.picking)有深入实践经验。


如果你需要在 Odoo 上做仓库模块定制、系统对接或实施支持,我们可以提供专业帮助。 预约演示 与我们讨论你的项目需求。

理解 Odoo 的 stock.picking 模型:入库、出库与仓库流程解析
Dasolo 2026年3月10日
分析这篇文章
登录 留下评论