跳至内容

理解Odoo采购订单架构:采购订单模型解析

Odoo采购订单模型的完整指南,适用于开发人员和功能顾问
2026年3月11日
理解Odoo采购订单架构:采购订单模型解析
Dasolo
| 还没有评论

介绍


在 Odoo 中,模型定义了数据在数据库中的结构和存储方式。您处理的每一项业务数据,从采购订单到发票再到库存,都存在于一个模型中。


理解 Odoo 模型对于开发者和功能顾问都是至关重要的。模型是 Odoo 数据架构的基础。它们定义了 Odoo 字段、关系和业务逻辑。


本文重点介绍 Odoo 中最重要的模型之一:purchase.order。无论您是在构建自定义模块、集成外部系统,还是配置采购工作流程,您都将与该模型打交道。

什么是 purchase.order 模型


purchase.order模型代表Odoo中的采购订单和报价请求(RFQ)。这是一个集中地点,所有采购交易在成为收据或供应商账单之前都会被记录在此。


Odoo中的这个模型由采购模块使用。当买方创建RFQ时,他们会创建一个purchase.order记录。当供应商确认或买方批准时,订单会从草稿状态变为确认状态。Odoo中的同一模型同时保存草稿RFQ和确认的采购订单。状态字段跟踪生命周期。


其他模块通过Odoo模型继承扩展此模型。库存模块添加收据和拣货逻辑。会计模块添加供应商账单字段。制造模块可以从物料清单创建采购订单。每个模块根据需要添加内容,而不重复核心结构。

模型中的关键字段


以下是purchase.order模型中最重要的Odoo字段。理解这些字段将帮助您有效地处理采购订单。


1. name

类型:Char。此字段存储订单参考(例如PO00042)。通常是自动生成的,并在列表视图和文档中显示。它是采购订单的主要标识符。


2. state

类型:Selection。跟踪订单生命周期。值:草稿(RFQ)、已发送(已发送给供应商)、待批准(等待批准)、采购(已确认)、完成(已完全接收并开票)、取消(已取消)。状态决定可用的操作。


3. partner_id

类型:Many2one(res.partner)。供应商或供货商。必填。这是订单的主要联系人或公司。用于所有与供应商相关的逻辑和报告。


4. partner_ref

类型:Char。供应商参考或供应商PO编号。当供应商提供他们自己的订单参考时使用。显示在文档上,并有助于匹配收据和账单。


5. date_order

类型:日期时间。订单日期。对于草稿订单:创建日期。对于确认订单:确认日期。用于报告、排序,以及作为订单行的默认预期日期。


6. date_approve

类型:日期时间。批准或确认日期。当订单进入采购状态时设置。只读。用于报告和审计跟踪。


7. order_line

类型:一对多(purchase.order.line)。订单行。每行包含产品、数量、价格和税。这是采购订单的核心细节。


8. amount_untaxed

类型:浮点数。税前小计。从订单行计算。用于报告和显示。


9. amount_tax

类型:浮点数。总税额。从订单行根据税务配置计算。显示在订单和供应商账单上。


10. amount_total

类型:浮点数。包括税的总金额。开票和报告的主要金额。


11. currency_id

类型:Many2one (res.currency)。货币。通常从公司或供应商继承。所有货币字段使用此货币。


12. origin

类型:Char。源文档。例如,当订单是从销售订单(直邮)或制造订单创建时,源名称存储在这里。用于可追溯性。


13. dest_address_id

类型:Many2one (res.partner)。送货地址。如果未设置,默认为公司地址。用于直邮,当货物直接送到客户时。


14. priority

类型:Selection。订单优先级:正常或紧急。用于排序和突出显示。紧急订单可能在工作流程中获得特殊处理。


15. invoice_status

类型:Selection。跟踪发票状态:无(未开票)、待开票(准备开票)、已开票(完全开票)。驱动创建账单操作的可见性。


16. invoice_count

类型:Integer。相关供应商账单的数量。计算得出。用于显示和打开账单列表。


17. invoice_ids

类型:一对多(account.move)。相关的供应商账单。将采购订单链接到会计。用于三方匹配和付款跟踪。


18. picking_ids

类型:一对多(stock.picking)。相关的交货订单或收据。当采购模块与库存一起安装时使用。


19. picking_count

类型:整数。相关拣货的数量。计算得出。用于显示和打开收据列表。


20. create_date

类型:日期时间。存储记录创建的日期和时间。由Odoo自动管理。对报告和审计很有用。


21. write_date

类型:日期时间。存储最后修改的日期和时间。同样由系统自动管理。帮助跟踪数据最后一次更新的时间。


22. notes

类型:文本。条款和条件或内部备注。可以在采购订单上显示。用于向供应商提供特殊指示。


23. company_id

类型:Many2one (res.company)。在多公司设置中,这表示订单属于哪个Odoo公司。影响记录的可见性和访问权限。


24. user_id

类型:Many2one (res.users)。买方或负责用户。用于审批工作流和活动分配。


25. fiscal_position_id

类型:Many2one (account.fiscal.position)。用于税务映射的财政位置。当供应商位于不同国家或具有特殊税制时应用。


26. payment_term_id

类型:Many2one (account.payment.term)。付款条款(例如:净30天,50%预付款)。在创建供应商账单时使用。


27. display_name

类型:Char。计算的显示名称。将名称与供应商信息结合。用于many2one下拉菜单和搜索结果。只读。


28. active

类型:Boolean。软删除标志。当为False时,记录被归档并从默认视图中隐藏。采购订单不会被物理删除以保留历史记录。

该模型在业务工作流程中的使用


1. 从报价请求到采购订单

买方创建报价请求(草稿)。添加行,发送给供应商。供应商确认或买方手动确认。订单被确认(状态 = 采购)。可以创建收货单和供应商账单。


2. 供应商收货

当货物到达时,用户从采购订单创建收货单。关联 picking_ids。收到的数量更新库存。产品成本根据采购价格更新。


3. 供应商账单

从确认的订单中,用户创建供应商账单。发票行从订单行中提取。payment_term_id 和 fiscal_position_id 来自订单。invoice_status 跟踪进度。


4. 直邮

当销售订单触发采购时,来源链接回销售。dest_address_id 设置为客户地址,以便供应商直接发货。purchase.order 模型是销售和采购之间的桥梁。



5. 制造和物料需求计划(MRP)

当制造订单需要组件时,可以为原材料创建采购订单。来源字段链接到制造订单。该模型是采购到支付周期的核心。

开发者如何扩展该模型


开发人员使用多种模式扩展 purchase.order。Odoo 模型继承是主要机制。


模型继承

使用 _inherit = 'purchase.order' 来扩展模型。添加新的 Odoo 字段,重写方法或添加约束。Odoo 中的继承模型将您的更改保存在单独的模块中,以便于升级。


添加字段

在您继承的模型中定义新的 Odoo 字段。使用正确的字段类型:Char、Many2one、Boolean、Integer、Text、Selection。考虑多公司环境下的公司依赖字段。


Python 扩展

重写 button_confirmcreatewrite 来添加逻辑。使用 super() 来调用原始方法。对计算字段及其依赖关系要小心。


Odoo Studio

Odoo Studio 允许您无需代码添加字段。适合快速定制。对于复杂逻辑或升级,自定义模块更易于维护。Odoo 中的 API 模型 (purchase.order) 通过 XML-RPC 和 JSON-RPC 完全公开,以便于集成。

最佳实践


  • 为每个阶段使用正确的状态。不要跳过状态或绕过确认逻辑。
  • 当供应商提供参考时,设置 partner_ref。这有助于匹配收据和账单。
  • 使用 origin 来追踪采购订单的来源。这对于直邮和制造至关重要。
  • 在构建 API 集成时,使用 XML-RPC 或 JSON-RPC API。purchase.order 模型是完全公开的。仔细映射外部 ID。
  • 对于自定义字段,使用 x_ 前缀或模块前缀,以避免与未来的 Odoo 版本发生冲突。

常见错误


  • 在未检查状态的情况下修改已确认的订单。已确认的订单有受限字段。请创建新订单或使用适当的工作流程。
  • 混淆 partner_id 和 dest_address_id。partner_id 是供应商;dest_address_id 是货物送达的地点(用于直邮)。
  • 在未调用 super() 的情况下覆盖 button_confirm。这可能会破坏其他模块或未来的升级。
  • 添加所需的自定义字段而没有默认值。现有订单在升级时将无法通过验证。
  • 在处理多货币供应商时忘记设置 currency_id。错误的货币可能导致成本和发票不正确。

结论


purchase.order 模型是 Odoo 采购的核心。它存储 RFQ 和已确认的采购订单。理解其 Odoo 字段以及模块如何扩展它将帮助您有效配置、定制和集成 Odoo。


无论您是映射采购流程的功能顾问,还是构建自定义模块的开发人员,深入了解 purchase.order 将节省时间并防止错误。

需要帮助进行 Odoo 实施吗?


Dasolo 帮助公司实施、定制和优化 Odoo。我们专注于 API 集成和 Odoo 开发。我们的团队在 Odoo 数据架构和像 purchase.order 这样的模型方面拥有深厚的经验。


如果您需要帮助进行 Odoo 实施、自定义模块或集成,我们随时为您提供帮助。 预约演示 以讨论您的项目。

理解Odoo采购订单架构:采购订单模型解析
Dasolo 2026年3月11日
分析这篇文章
登录 留下评论