介绍
在 Odoo 中,模型定义了数据在数据库中的结构和存储方式。您处理的每一条业务数据,从销售订单到库存转移再到仓库操作,都存在于一个模型中。
理解 Odoo 模型对于开发者和功能顾问都至关重要。模型是 Odoo 数据架构的基础。它们定义了字段、关系和业务逻辑。
本文重点介绍库存应用中最重要的模型之一:stock.picking。无论您是在构建自定义仓库模块、集成外部系统,还是配置工作流程,您都将与该模型打交道。
什么是 stock.picking 模型
stock.picking 模型表示 Odoo 中的转移。它是跟踪仓库操作的中心位置。每个拣货记录代表从一个位置到另一个位置的单个货物转移。
Odoo 中的此模型在库存模块中使用。收货、交付和内部转移都会创建 stock.picking 记录。当您确认销售的交付订单、接收采购的货物或在仓库之间移动库存时,您正在创建或更新 stock.picking 记录。
该模型在库存模块中定义。其他模块通过 Odoo 模型继承扩展它。销售模块添加与交付相关的字段。采购模块添加收货工作流。制造模块添加生产移动。每个模块根据需要添加内容,而不重复核心结构。
stock.picking 模型继承自 mail.thread 和 mail.activity.mixin。这意味着您可以直接跟踪更改、添加聊天消息并安排转移活动。
模型中的关键字段
以下是 stock.picking 模型中最重要的 Odoo 字段。理解这些将帮助您有效地处理转移和仓库操作。
1. name
类型:Char。此字段存储转移的参考。它通常是从序列自动生成的(例如 WH/OUT/00001)。它显示在转移表单的标题中,是拣货的主要标识符。
2. origin
类型:Char。源文档参考。对于交付,这可能是销售订单名称。对于收货,则是采购订单。它有助于追踪转移的来源。
3. state
类型:Selection。转移的状态。值:草稿、等待其他操作、等待、准备、完成、已取消。每个状态决定可用的操作。Odoo 根据相关的库存移动计算此值。
4. picking_type_id
类型:Many2one (stock.picking.type)。操作类型。定义这是收货、发货还是内部转移。必填。每种拣货类型都有默认的源和目的地位置。
5. move_ids
类型:One2many (stock.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
类型:多对一(res.users)。负责的用户。用于分配和工作负载跟踪。创建时默认为当前用户。
16. company_id
类型:Many2one (res.company)。公司。与拣货类型相关。在多公司设置中,这决定了哪个公司拥有该转移。
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
类型:图像。交付验证时捕获的签名。用于交付证明。作为附件存储。
23. is_signed
类型:布尔值。根据签名计算。指示交付是否已签署。
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. 销售与交付
当销售订单被确认时,Odoo 创建一个交付订单(stock.picking)。该交付通过 origin 链接到销售订单。仓库工作人员进行拣货和打包,然后进行验证。状态从草稿变为准备就绪,再到完成。
2. 采购与收货
当采购订单被确认时,Odoo 创建一个入库收据。该收据将产品从供应商位置接收至库存。partner_id 是供应商。验证更新库存数量。
3. 内部转移
在仓库或位置之间移动库存会创建内部拣货。picking_type_id 的代码为 'internal'。位置和目的地都是内部库存位置。
4. 退货与补货
当销售被退回时,会创建一个退货拣货。return_id 链接到原始交付。当交付部分验证时,backorder_ids 保存剩余工作。
5. 制造与生产
制造订单为原材料(消耗)和成品(生产)创建拣货。stock.picking 模型通过 mrp 模块扩展以支持这些流程。
开发者如何扩展该模型
开发人员使用多种模式扩展 stock.picking。Odoo 模型继承是主要机制。
模型继承
使用 _inherit = 'stock.picking' 来扩展模型。添加新字段、重写方法或添加约束。Odoo 中的继承模型将您的更改保存在单独的模块中,以便于升级。
添加字段
在您继承的模型中定义新的 Odoo 字段。使用正确的字段类型:Char、Many2one、Boolean、Integer、Text、Selection。考虑多公司环境下的公司相关字段。
Python 扩展
重写 button_validate、action_assign 或 _create_backorder 来添加逻辑。使用 super() 调用原始方法。注意状态转换和移动创建。
Odoo Studio
Odoo Studio 让您无需代码即可添加字段。适合快速自定义,如自定义标签或额外备注。对于复杂逻辑或承运人集成,自定义模块更易于维护。
最佳实践
- 手动创建拣货时,始终设置 picking_type_id。它驱动默认位置和行为。
- 使用 origin 字段追溯到源文档。这有助于报告和调试。
- 在构建 API 集成时,stock.picking 模型通过 Odoo API 完全暴露。通过 move_ids 关系创建移动。不要在没有移动的情况下创建拣货。
- 使用 scheduled_date 进行规划。它影响保留和优先级。
- 对于自定义字段,请使用
x_前缀或模块前缀,以避免与未来的Odoo版本发生冲突。
常见错误
- 创建拣货单时未设置picking_type_id。这可能导致默认位置错误。
- 在确认后修改move_ids而不理解状态机。状态转换可能很复杂。
- 忘记为交付设置partner_id。承运人和文档需要联系信息。
- 重写button_validate而不调用super()。这可能会破坏补货单的创建和其他模块。
- 假设move_ids和move_line_ids始终保持同步。移动行在您保留或使用详细操作时创建。
结论
stock.picking模型是Odoo库存的核心。它存储转移、交付和收据。理解其字段以及模块如何扩展它将帮助您有效配置、定制和集成Odoo。
无论您是映射仓库流程的功能顾问,还是构建自定义模块的开发人员,扎实掌握stock.picking将节省时间并防止错误。
准备优化您的 Odoo 仓库
Dasolo帮助公司实施、定制和优化Odoo。我们专注于API集成和Odoo开发。我们的团队在Odoo数据架构和像stock.picking这样的模型方面拥有丰富的经验。
如果您需要帮助进行Odoo实施、自定义仓库模块或集成,我们随时为您提供帮助。 预约演示 以讨论您的项目。