企业销售 / 公司间交易

Odoo 企业版公司间销售为什么不是“SO 自动生成 PO”就完了:中转库位、收货回写与 lot 镜像讲透

sale_purchase_stock_inter_company_rules 真正补齐的是跨公司库存语义:收货仓从哪来、直送何时改走 transit、另一家公司收货 move_line 又怎样镜像 lot 与已拣数量。

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

公司间交易一旦带库存,真正复杂的不是自动建单,而是“货到底发到哪、另一家公司怎么确认收到、lot/serial 怎么保持一致”。

核心链路

  1. models/sale_order.py_prepare_purchase_order_data() 在生成另一家公司 PO 时,不是随便找个收货类型,而是优先用 intercompany_warehouse_idintercompany_receipt_type_id。没配对仓库会直接抛错。
  2. 同文件中销售行 _get_location_final() 还判断 partner 是否代表另一家公司、partner 与 shipping 是否不同;满足条件时会把最终地点改成 inter-company transit,而不是直接送到客户地址。
  3. models/purchase_order.py 反向生成 SO 时,会把 warehouse、partner_shipping、产品自定义属性一起带过去;_get_destination_location() 在 dropship/直送场景下还会回落到对方公司的 transit customer location。
  4. 最关键的补强在 models/stock_picking.py。当本公司 delivery picking button_validate() 后,若另一家公司开启 intercompany_sync_delivery_receipt,系统会去找对应 PO 的 incoming/dropship receipt,并通过 _find_corresponding_move() 找相同产品的未 picked move。
  5. 随后 _prepare_move_lines() 会把 delivery 侧 move_line 的 lot_namelot_idquantitypicked=True 镜像到另一家公司的 receipt move_line。这样跨公司不只是单据联动,连实物批次和收货动作都被同步了。

关键源码位置

  • /home/ubuntu/odoo-temp/enterprise/sale_purchase_stock_inter_company_rules/models/sale_order.py
  • /home/ubuntu/odoo-temp/enterprise/sale_purchase_stock_inter_company_rules/models/purchase_order.py
  • /home/ubuntu/odoo-temp/enterprise/sale_purchase_stock_inter_company_rules/models/stock_picking.py

容易误解的地方

  • 误区一:自动生成 PO/SO 就算公司间流程打通。库存地点和收货镜像才是真正容易错的部分。
  • 误区二:直送永远直接到客户。跨公司场景下,源码可能改走 inter-company transit。
  • 误区三:对方公司自己再手工录 lot 就行。企业版已经提供 move_line 镜像,重复录入反而会出错。

实战注意事项

  • 做 intercompany 项目时,先配好 intercompany_warehouse_id 与 receipt type,再谈自动建单。
  • 若收货未自动同步,先确认 delivery picking 是否 done,以及目标公司是否开启 intercompany_sync_delivery_receipt
  • 序列号产品跨公司流转时,最好把“哪一侧是 lot 真源头”定清楚,避免双边都能改。

结语

企业版这些代码共同说明一件事:真正可上线的业务流程,靠的不是“页面上看起来能点通”,而是权限、状态、时机、对账口径和跨模块回写都被收紧。理解这些边界,实施和二开时就不容易走进“功能演示能跑、真实业务一用就散”的坑。

DISCUSSION

评论区

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