企业 销售多公司

Odoo 企业版销售:多公司内部交易,销售单为什么会自动长出采购单

sale_purchase_inter_company_rules 的关键不是“自动建采购单”五个字,而是确认时如何找到对方公司、切换 intercompany

企业 销售
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 5 阅读

多公司内部交易里,自动生成采购单看起来像是一个很简单的自动化动作。真正难的部分其实都藏在后面:到底该在哪家公司建、用谁的权限建、行上价格数量怎么换算、两边单据又怎么互相认得。

这篇文章主要参考了以下企业版源码入口:

  • enterprise/sale_purchase_inter_company_rules/models/sale_order.py

一、这篇功能真正解决什么问题

sale_purchase_inter_company_rules 解决的是同一集团内部销售与采购的文档同步。如果没有这层桥接,一家公司确认销售单后,另一家公司还得手工再打一张采购单,效率低不说,价格、日期和引用也容易错位。

二、核心链路怎么走

1. 销售确认后先判断是否命中公司间规则

_action_confirm() 会先走标准确认,再根据客户对应公司、intercompany_generate_purchase_orders 开关以及 auto_generated 标记判断,要不要继续生成采购单。这里的 auto_generated 很重要,它避免 SO/PO 互相触发时死循环。

2. 真正建单时会切到目标公司的 intercompany user

inter_company_create_purchase_order() 不是用当前销售用户直接建对方公司的 PO,而是切换到 company.intercompany_user_id,并同时切换 company/context。这样做的目的很明确:跨公司同步可以自动化,但权限边界仍然必须清楚。

3. 单据值和行值都会按采购语义重新准备

_prepare_purchase_order_data() 会重建采购单头,包括供应商、币种、付款条件和来源引用;_prepare_purchase_order_line_data() 则把销售行数量和价格换算到采购单位。生成后,系统还会把 PO 名称回填到销售单 client_order_ref,并在配置要求时直接确认采购单。

三、新手最容易踩的坑

  • 以为找到对应公司就能自动建单。没有 intercompany_user_id 或对方用户没有创建采购权限,链路会直接报错。
  • 以为公司间同步只是复制行。实际上单头、付款条件、税位、日期计划都要重新按目标公司语义准备。
  • 以为自动建 PO 后两边自然可追。若忽视 client_order_ref、origin message 等回写字段,后续排障会很痛苦。

四、实战落地时最该盯的点

  • 上线前先核对每家公司的 intercompany user 与采购权限,不要等首单确认时再暴雷。
  • 多公司如果有不同币种或不同 UoM 习惯,要重点验证行级换算是否符合预期。
  • 若企业希望自动确认 PO,务必和采购团队对齐风险承受度,因为这相当于把人工审核前移成配置动作。

五、结论

公司间 SO 自动长出 PO,真正难的不是“自动”本身,而是让公司识别、权限切换、采购语义重建和单据追溯同时成立。sale_purchase_inter_company_rules 把这条链做通了,集团内部交易才会真正顺手。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。