企业 预算控制

Odoo 企业版预算理论值为什么不是“按月份平均摊”:含首尾日、analytic plan 与聚合口径讲透

account_budget 真正难的不是录一条预算线,而是 theoretical amount、achieved amount 与 analytic plan 过滤如何一起决定预算是否“超了”。

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

预算功能最常见的误解,就是把它当成一张“金额 + 起止日期”的台账。可一旦老板追问“今天为什么显示已经超预算”,真正决定结果的并不是录入动作,而是 account_budget 对理论值、实际值和分析维度的计算口径。

主要参考入口:

  • enterprise/account_budget/models/budget_line.py
  • enterprise/account_budget/tests/common.py
  • enterprise/account_budget/tests/test_theoreticalamount.py

一、理论值不是按月平均,而是按时间切片计算

test_theoreticalamount.py 很值得看,因为它覆盖的不是简单总额,而是预算线在不同日期点上的理论消耗。源码会考虑开始日、结束日、当下日期是否落在区间内,因此“月中查看预算”和“月末查看预算”天然会不同。

这意味着理论值不是报表装饰,而是一个动态时间函数:它试图回答“按照当前时点,这条预算理论上应该消耗到哪里”。

二、actual / achieved 也不只是凭证求和

budget_line.py 里,实际值会结合 analytic 维度、账户以及计划配置取数。企业版预算的关键不是把会计凭证简单汇总,而是只汇总对这条预算线有意义的那部分业务。analytic plan 一旦设错,预算看起来就会要么永远不动,要么莫名其妙被放大。

三、analytic plan 不是附加筛选,而是预算边界

很多实施项目只给用户解释“这里可以选分析账户”,却没讲清 account_budget 会沿着 analytic plan 去限制匹配集合。结果就是:同样一张费用单,在项目预算里能看到,在部门预算里却看不到,团队还以为是 bug。

本质上,这不是显示问题,而是预算对象定义问题。预算线只会对自己声明的分析边界负责。

四、最容易踩坑的地方

  • 把理论值当静态均摊值,忽略起止日期对首尾天数的影响。
  • 预算线和实际发生用的 analytic plan 不一致,导致取数错位。
  • 只看 achieved amount,不看 theoretical amount,于是看不出“超支”和“提前支出”的区别。

五、实战建议

  1. 建预算前先统一 analytic 维度,不要边做预算边补分析结构。
  2. 用测试思路验证关键日期:起始日、月中、截止日、超截止日,各自理论值应是多少。
  3. 向业务方解释两个问题:现在花了多少、按今天本来该花多少。预算看板要同时回答这两个问题才有用。

六、结论

预算真正难的不是录数,而是口径。account_budget 的价值,在于它把时间进度和分析边界一起编码进预算线,让“超预算”这件事有可解释的来源。

DISCUSSION

评论区

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