跳至内容

深入解析 account.move:Odoo 发票与会计分录模型指南

面向开发者与功能顾问的 Odoo 核心会计模型全解析 — 从数据结构到业务流程与自定义实践
2026年3月10日
深入解析 account.move:Odoo 发票与会计分录模型指南
Dasolo
| 还没有评论

介绍


在 Odoo 中,模型决定了数据在数据库中的组织和保存方式。每一条业务数据——从销售订单到发票,再到会计分录——都由相应模型来承载和管理。


无论你是开发人员还是业务顾问,理解 Odoo 的模型设计都是必须的。模型是整个数据架构的基石,负责定义字段、实体间关系以及内置的业务逻辑。

本文聚焦于 Odoo 会计模块中最核心的模型之一:account.move。无论是做自定义报表、对接外部系统,还是设置开票流转,都会频繁打交道这个模型。

什么是 account.move 模型


account.move 用来表示会计凭证。在 Odoo 13 之后,原本分散的客户发票、供应商账单、红字发票与手工凭证都合并为统一的 account.move 记录,简化了凭证处理与扩展路径。


该模型归属会计模块,并且是 account.move.line 的父对象。具体的借贷明细存放在 move.line 中:一张发票或凭证就是一条 account.move,配套若干条 line。


模型在 account 应用里定义,其他应用通过继承对其扩展。例如销售模块会在下单/交付后生成发票,采购模块会生成供应商账单,各模块各司其职地补充业务所需的字段与逻辑。

模型中的关键字段


下列字段是理解 account.move 时最常用、最关键的字段。熟悉它们能让你更顺畅地处理发票、账单与凭证。


1. name

类型:字符(Char)。通常保存凭证或发票编号,由日记账的序列自动生成。它出现在列表视图和打印文档的显著位置,便于识别。


2. move_type

类型:选择(Selection)。标识凭证种类:手工凭证(entry)、销售发票(out_invoice)、销售退款(out_refund)、采购账单(in_invoice)和采购退款(in_refund)等。该字段决定使用的视图与处理流程。


3. state

类型:选择(Selection)。工作流状态:draft(草稿)、posted(已过账)或 cancel(取消)。草稿可编辑,已过账会影响总账并被锁定,取消状态表示已作废。


4. date

类型:日期(Date)。单据日期,用于报表、账龄及会计期结算。发票通常以发票日期作为该字段。


5. journal_id

类型:Many2one(account.journal)。凭证所属日记账:销售、采购、银行或杂项等。日记账决定序列规则与默认科目。


6. company_id

类型:Many2one(res.company)。多公司环境下标明凭证属于哪家公司,影响访问权限与合并报表。


7. partner_id

类型:Many2one(res.partner)。关联的客户或供应商。发票与账单通常必须填写,用于账龄分析、对账与单据抬头显示。


8. currency_id

类型:Many2one(res.currency)。凭证使用的币种。金额以该币种保存,多币种环境下还会有公司本位币的换算用于合并与报表。


9. amount_total

类型:货币(Monetary)。凭证的总额;对发票而言即应付/应收总额,通常由明细行计算得出。


10. amount_residual

类型:货币(Monetary)。未清金额。已付款的发票此值为零,账龄与收付款匹配都依赖该字段。


11. payment_state

类型:选择(Selection)。付款状态:not_paid、in_payment、paid、partial、reversed 等。用于催收、提醒和财务报表。


12. line_ids

类型:One2many(account.move.line)。凭证的借贷明细,每条明细包含科目、借方或贷方金额。所有借方合计必须等于贷方合计以保证平衡。


13. invoice_line_ids

类型:One2many(account.move.line)。发票/账单中的产品或服务行项;在过账时每个发票行会生成相应的会计分录行。


14. invoice_date

类型:日期(Date)。发票日期,关系到税期与开票周期,在某些配置下可以与凭证日期不同。


15. invoice_date_due

类型:日期(Date)。应付/应收到期日,由付款条款计算或手动设置,用于账龄和催收流程。


16. ref

类型:字符(Char)。外部参考号或供应商单据号,便于与外部单据核对和对账。


17. invoice_origin

类型:字符(Char)。来源单据标识,例如来源的销售订单号,有利于从订单追溯到发票。


18. create_date

类型:日期时间(Datetime)。记录创建时间,由系统自动维护,用于审计与历史追踪。


19. write_date

类型:日期时间(Datetime)。记录最后一次修改时间,同样由系统自动管理。


20. narration

类型:文本(Text)。内部备注或凭证摘要,会显示在打印凭证上,但通常不对客户展示。


21. fiscal_position_id

类型:Many2one(account.fiscal.position)。税务定位规则,根据客户/国家决定应适用哪些税率或税项。


22. invoice_payment_term_id

类型:Many2one(account.payment.term)。付款条款(如货到30天),用于计算到期日与分期付款计划。


23. invoice_user_id

类型:Many2one(res.users)。发票负责人或业务员,用于业绩、佣金与分析报表。


24. reversed_entry_id

类型:Many2one(account.move)。冲销凭证关联到被冲销的原始凭证,便于审计线索与追踪修改历史。


25. to_check

类型:布尔(Boolean)。需要人工复核的标记,常用于银行对账或异常处理流程。


26. active

类型:布尔(Boolean)。软删除开关,设为 False 时表示档案已归档。被取消的凭证通常会被置为 inactive。


27. sequence_number

类型:整数(Integer)。来自日记账序列的顺序号,用于排序与显示,由序列混入(mixin)管理。


28. amount_untaxed

类型:货币(Monetary)。不含税的小计,发票的税前金额总和。


29. amount_tax

类型:货币(Monetary)。税额合计,由发票行税率与配置计算得出。


30. invoice_source_email

类型:字符(Char)。用于从邮件创建的供应商账单,记录来源邮件地址,便于账单自动归档与匹配。

该模型在业务流程中的应用场景


1. 客户开票流程

当销售交付完成后,系统会生成一条 move_type 为 out_invoice 的 account.move,发票行来自销售订单。过账后系统同时产生对应的会计分录并增加应收科目。


2. 供应商账单处理

采购订单可自动生成账单,也可人工录入。供应商账单以 move_type 为 in_invoice 保存,过账后系统会更新应付科目。


3. 付款与对账

系统通过 amount_residual 和 payment_state 将付款与发票匹配;对账时关联付款凭证与发票凭证,清除未清金额,从而达到账面平衡。


4. 手工凭证录入

会计人员可创建 move_type 为 entry 的手工凭证以处理调整、计提或更正;需手动填入 line_ids,保证借贷平衡后方可过账。


5. 红字发票与退款

退款或红字发票使用 out_refund 或 in_refund 类型,逻辑上是对原始发票的冲销,reversed_entry_id 可指回原单以便审计追溯。

开发者如何扩展该模型


开发者对 account.move 的扩展依赖 Odoo 的几种机制,其中模型继承是最常用的方式。


模型继承概述

在自定义模块中使用 _inherit = 'account.move' 来扩展模型:新增字段、重写方法或增加约束。通过继承把改动集中在外部模块里,便于升级与维护。


添加自定义字段

在继承模型中声明新的字段,选对字段类型(Char、Many2one、Boolean、Integer、Text、Selection 等)。多公司场景考虑 company-dependent 字段;若字段只在发票类凭证生效,可配合 move_type 做限制。


Python 端扩展

可重写 create、write、_post 或 button_draft 等方法以注入业务逻辑,但记得调用 super() 保持原有行为。注意计算字段的依赖与装饰器(@api.model、@api.depends 等)以确保方法在正确时机运行。


使用 Odoo Studio

Odoo Studio 能让非开发人员快速添加字段与界面调整,适合简单需求。但若涉及复杂校验、自动化或长期维护,还是建议走模块化开发路线。


重要提示:account.move 是普通的持久化模型,而非抽象模型或临时模型。抽象模型不建表,临时模型用于向导;account.move 则存储真正的会计数据,需要谨慎设计与保护。

最佳实践建议


  • 在报表与对接中务必根据 move_type 做过滤,不同类型的凭证在必填字段与处理逻辑上存在差异。
  • 务必为每类凭证选择合适的日记账。不当的日记账会导致序列错乱与统计错误。
  • 通过 API 创建凭证时,先保证 line_ids 的借贷平衡(借方=贷方),否则过账会被校验拦截。
  • 从外部系统导入发票时,要把外部单据类型正确映射为 move_type:销售单对应 out_invoice,采购单对应 in_invoice。
  • 自定义字段建议以 x_ 前缀命名,以降低与未来 Odoo 版本字段冲突的风险。

常见错误与陷阱


  • 常见错误一:试图过账不平衡的凭证。Odoo 会拒绝,务必在过账前验证借贷总额相等。
  • 常见错误二:直接修改已过账凭证。已过账记录应通过冲销并新建凭证来更正,而不是在原单上直接改动。
  • 常见错误三:忘记为客户或供应商凭证设置 partner_id。许多报表、对账与自动化流程依赖该字段。
  • 常见错误四:混淆凭证类型。不要用负数发票替代 out_refund;应使用正确的 move_type 来表示退款或冲销。
  • 常见错误五:重写核心方法却不调用 super()。这会破坏其他模块的期望行为并增加升级风险。

总结


account.move 在 Odoo 会计体系中居于核心位置——它以统一的结构承载发票、账单与会计凭证。掌握它的字段与扩展方式,能让你在配置、定制与系统对接时事半功倍。


无论你负责流程梳理的功能顾问,还是编写扩展模块的开发者,理解 account.move 都能显著减少实施时间并降低差错率。

需要我们协助您的 Odoo 实施吗?


Dasolo 帮助企业实施、定制与优化 Odoo,擅长 API 对接与开发。我们的团队对 Odoo 的数据架构及像 account.move 这样的核心模型有丰富实战经验。

如果您在实施、定制模块或系统集成方面需要支持,我们可以提供专业服务。 预约演示 与我们洽谈您的项目。

深入解析 account.move:Odoo 发票与会计分录模型指南
Dasolo 2026年3月10日
分析这篇文章
登录 留下评论