企业 会计资产

Odoo 企业版供应商账单为什么会“顺手长出固定资产”:账单行、资产模型与冲销链路讲透

account_asset 的关键不是自动建一张资产卡,而是让供应商账单、分析分布、折旧分录和冲销动作沿着同一条资产链回流。

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

account_asset 的关键不是自动建一张资产卡,而是让供应商账单、分析分布、折旧分录和冲销动作沿着同一条资产链回流。

主要参考:

- `enterprise/account_asset/models/account_move.py`
  • enterprise/account_asset/models/account_asset.py
  • enterprise/account_asset/tests/test_account_asset.py


    一、这不是单模块按钮,而是一条跨模块链路

    很多人把这个功能理解成某个界面上的一个按钮、一个 smart button,或者一次自动创建。但从源码看,真正重要的是:上游对象先保留业务上下文,中间层做状态/域/权限判断,下游对象再接住这个上下文继续工作。只看最后一个界面动作,很容易把问题看窄。

    二、核心跨链路是怎么跑通的

    1. 账单过账时,_post() 会调用 _auto_create_asset(),检查科目是否允许自动建资产、行金额是否有效、是否已有资产关联。
    2. 生成资产时会把账单行的 analytic_distribution、原始 move line、acquisition_date 一起带进资产对象,后续折旧继续沿用。
    3. 资产折旧分录通过 _prepare_move_for_asset_depreciation() 回写 partner、折旧费用科目与分析分布,因此项目或部门利润不会和资产台账脱节。

    这就是为什么我把它归类为“跨模块链路”题:这里至少同时牵涉了业务对象、会计/项目/销售对象,以及状态或权限判断,而不是单个模型内部的小机制。

    三、最容易踩错的边界

    • 税行、零金额行、销售方向的资产科目行不会被误判成固定资产创建来源。
    • 如果是多资产模式,一张账单行会按整数数量拆成多个资产对象,而不是强行塞进一张卡片。
    • 冲销折旧分录时,系统会把价值推回下一张 draft 折旧或补建新草稿,避免资产状态与会计分录脱节。

    这些边界决定了数据是否还能回到正确的模块继续流动。如果边界被自定义绕开,后面最常见的结果就是:报表看起来还能出, drill-down 却已经解释不通。

    四、落地时最值得先验的三件事

    1. 资产模型、自动验证策略和科目配置要先梳理,否则自动创建只会把错误放大。
    2. 想做项目维度资产成本归集时,先验证账单行分析分布是否完整。
    3. 遇到 reset to draft 失败,优先检查关联资产是否已 posted。

    五、结论

    自动建资产只是入口,真正关键的是分析分布、折旧和冲销都不能断链。 这也是企业版功能最容易被低估的地方:看上去只是一个入口,实质上是在多个子系统之间持续传递状态、上下文、数据或权限。

DISCUSSION

评论区

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