先说结论
Odoo 采购里的分析分布,不是你在订单上填了就“固定不变”。
它更像一条可继承、可覆盖、可继续向下游传递的链:
- 采购行先根据产品、分类、供应商和公司推导分析分布
- 这份分布会参与后续会计单据的分配逻辑
- 如果后续账单需要继承它,就不是简单复制字段,而是遵循分布模型
所以分析维度不是“挂在采购单上看看的标签”,它是会计链路的一部分。
_compute_analytic_distribution 在做什么
源码里,采购行会通过 _compute_analytic_distribution() 去找分析分布模型。
它会把这些信息送进去:
- 产品
- 产品分类
- 供应商
- 供应商类别
- 公司
然后由分布模型决定最终的 analytic_distribution。
这说明采购分析不是单一字段来源,而是多个业务维度共同决定的结果。
为什么它会“跟着账单走”
采购行上的分析维度,常常会继续影响后续账单的会计分配。
原因很简单:
- 采购单是业务起点
- Vendor Bill 是会计落点
- 分析维度需要从起点传到落点,才不会丢掉成本归属
因此这条链的关键,不是“采购有没有这个字段”,而是账单能不能拿到正确的分布语义。
为什么这不是普通字段复制
普通字段复制只管值。
但 analytic distribution 不是单值,它是一个分布语义:
- 可能对应多个分析账户
- 可能带比例
- 可能依赖上下文推导
所以从 PO 行到账单,最重要的是保持语义连续性,而不是简单拷贝文本。
调试时最容易看错的地方
很多人会只检查采购单行上的分布字段,忽略了:
- 分布是怎么计算出来的
- 账单侧有没有继承这份分布
- 后续改单时,是否需要重新推导或重分配
如果账单分析错了,不一定是账单层的问题,源头可能早在采购行计算阶段。
实战建议
- 不要把 analytic distribution 当作展示字段
- 先看它是怎么从产品、分类、供应商和公司计算出来的
- 如果账单分析错了,先回头检查采购行逻辑
- 改供应商或产品后,注意分布是否需要重新计算
- 对财务同学解释时,把它说成“成本归属的传递链”更容易理解
一句好记的话
采购分析分布不是一张贴纸,而是一条会从 PO 行传到 Vendor Bill 的成本归属链。
理解这一点,采购到会计的分析维度就不会再显得神秘。
DISCUSSION
评论区