BOM 文档

Odoo BOM 上的附件为什么不是“上传个 PDF”而已:产品文档、可见范围与现场指令边界讲透

很多团队把 BOM 附件当静态资料库,但 Odoo 的产品文档其实有可见范围和挂载语义。配错了,现场就看不到;配对了,BOM 会自动带出关键文档。

制造
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 5 阅读

先说结论

Odoo 里 BOM 上能看到的附件,并不是“谁上传了文件谁就都能看见”。

真正起作用的,是 product.document 上的制造可见范围字段。只有当文档被标记为 attached_on_mrp = bom 时,它才会被 Odoo 当成“这张 BOM 的附加制造文档”带出来。

所以很多人以为系统丢文件,实际常见原因只是:文件挂在产品上了,但没有声明要在制造场景透出。

这套机制为什么值得理解

制造现场的文件有三类:

  • 产品级说明:通用图纸、规格书、合规声明
  • BOM 级说明:某个制造配方或工艺专用附件
  • 工序级说明:更接近工作指导书、作业卡、检查点

Odoo 社区版这里做得很克制:它没有把所有文件都一股脑塞进工单,而是先通过 product.document 定义“这个文件在制造里是否可见、可见到哪一层”。

源码里的关键点

product.document 上,MRP 扩展了一个字段:attached_on_mrp,选项至少有:

  • hidden
  • bom

默认逻辑也很明确:如果上下文是 attached_on_bom,默认就挂到 bom;否则默认 hidden

这意味着 Odoo 的设计思路是:

  1. 文件先属于产品或模板
  2. 再通过制造可见性声明它是不是应该在 BOM 层展示
  3. BOM 在读取额外附件时,按这个声明去筛

不是“只要跟产品有关,就自动在所有制造对象上出现”。

BOM 为什么能自动带出附件

mrp.bom._get_extra_attachments() 里,Odoo 会收集:

  • BOM 的 product_id
  • BOM 的 product_tmpl_id
  • 如果启用了副产品,还会把副产品也纳入候选

然后再按 attached_on_mrp = bom 去搜对应 product.document,最后取其真实的 ir_attachment

这说明 BOM 附件展示,本质上是一次按产品 / 模板 / 副产品维度的受控聚合,而不是 BOM 自己独立存了一份文件。

最容易踩的坑

1. 文件上传到了产品,但 BOM 看不到

通常不是权限问题,而是 attached_on_mrp 还在 hidden

2. 以为 BOM 附件是“只属于这张 BOM”

很多时候它其实来源于产品或模板级文档,所以多个 BOM 可能共享同一份附件。

3. 把所有文档都挂 BOM

这样会让现场文件越来越乱。真正应该挂 BOM 的,是制造时必须看到的文档,不是所有归档资料。

4. 忽略副产品带来的附件暴露

如果你开启了副产品能力,BOM 附件聚合范围会更广,不是只有主成品一条线。

实战上怎么配置更稳

建议按这个原则:

  • 通用资料:保留在产品层,制造可见性设为 hidden
  • 现场必须看:设为 bom
  • 经常变化的作业指引:不要混成产品长期附件,最好建立清晰版本管理

你要追求的不是“文件都能找到”,而是“现场只看到此刻必须看的文件”。

排错顺序

如果车间说 BOM 上看不到文件,按这个顺序查:

  1. 文件到底在 product.product 还是 product.template
  2. attached_on_mrp 是不是 bom
  3. 当前 BOM 对应的是具体变体还是模板
  4. 是否有副产品造成你误以为文件应该出现在另一张 BOM
  5. 最后再查权限和附件本身是否损坏

一句话记忆法

Odoo 的 BOM 附件不是“上传即可见”,而是“先挂产品,再声明制造可见范围,最后由 BOM 按规则聚合显示”。

DISCUSSION

评论区

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