月末关账

Odoo 月末应计为什么不是“手工补一张凭证”:Accrued Orders Wizard、已收未票/已票未交与反转分录讲透

月末关账里最容易被低估的,不是锁账,而是已收未票、已票未交、已交未票、已票未交这些跨期差异。本文基于 `/home/ubuntu/odoo-temp/addons/account/wizard/accrued_orders.py` 解释 Odoo 的 Accrued Orders Wizard 如何按订单差额生成应计与反转分录。

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

很多团队一讲月末处理,脑子里先浮现的是:

  • 锁账;
  • 税锁定;
  • 汇兑重估;
  • 折旧摊销。

但真正最容易把利润表和资产负债表拉歪的,往往是那些业务已经发生、单据却没完全同步的跨期差异:

  • 货收到了,供应商票还没到;
  • 票先来了,货还没到齐;
  • 货已经交付,销售票还没开;
  • 票已经开了,但履约还没完成。

Odoo 在 /home/ubuntu/odoo-temp/addons/account/wizard/accrued_orders.py 里其实提供了一套很成型的思路:account.accrued.orders.wizard

它表达的不是“月末人工补一张杂项分录”,而是:

从订单未同步差额里,系统化提取应该跨期确认的收入或费用,并自动生成反转分录。


一、这个向导真正想解决什么问题

它不是为了替代正常开票,也不是为了永久调整库存或收入费用。

它解决的是一个典型的月末会计问题:

订单层面的业务事实,和发票层面的法律/结算事实,在截止日那一刻还没对齐。

于是你需要一张“截至某日”的应计凭证,把当期应该体现的那部分先挂出来; 下一期再自动反转,等真实发票或后续业务到来时,由正式单据接手。

所以它天生就是截止日视角,不是永久重分类工具。


二、为什么它是“按订单差额”而不是“按发票差额”

源码里向导既可以对:

  • purchase.order / purchase.order.line
  • sale.order / sale.order.line

运行,也就是它抓的是订单履约差额,而不是单纯发票差额。

_compute_move_vals() 里,它会看:

  • amount_to_invoice_at_date
  • 采购侧的 qty_received_at_dateqty_invoiced_at_date
  • 销售侧的 qty_delivered_at_dateqty_invoiced_at_date

这很重要。

因为月末应计关注的是:

  • 截止日之前,业务已经实质发生多少;
  • 截止日之前,开票已经覆盖多少;
  • 两者差多少。

所以它天然应该站在 order / fulfillment 视角,而不是只看 invoice。


三、采购和销售为什么走的是镜像逻辑

源码把采购和销售视为镜像:

采购侧

如果已经收货但还没完全开票,就需要把该确认的成本先应计出来。

销售侧

如果已经交付但还没完全开票,就需要把该确认的收入先应计出来。

所以它不是“采购专用工具”,而是一个订单履约与开票不同步时的期间切割工具


四、为什么 perpetual valuation 还要单独补一层

源码里有一个很有意思的处理:

  • 对 perpetual valuation 的产品,除了常规应计科目外;
  • 还会根据产品账户取 expense_accountstock_variation_account
  • 再补一组 (*) Goods Delivered not Invoiced / Goods Invoiced not Delivered 风格的行。

这说明 Odoo 很清楚:

库存型产品的跨期差异,不只是收入费用时间差,还会牵涉库存变动与费用确认口径的桥接。

所以这个向导不是简单把金额借贷一翻,而是在尝试把订单差额库存会计语义一起对齐。


五、为什么它会自动生成 reversal

create_entries() 里最关键的不是只创建一张 move,而是:

  1. 先创建 accrual move;
  2. 立即用 _reverse_moves() 创建 reversal;
  3. reversal date 默认取应计日次日,且必须晚于原日期。

这说明它的定位非常明确:

月末应计是期间性桥接,不是永久记账终点。

你在截止日先把该体现的部分挂出来; 到了下一期开始,系统先反转,避免双重确认; 后面再由真实采购票、销售票或其他正式业务分录接手。


六、为什么它比“手工总额补账”更稳

向导也允许你手工输入 amount 做整单应计,但从源码设计看,它更推荐按订单行自动拆。

因为自动拆时可以保留:

  • 每条 order line 的数量差异说明;
  • 产品相关科目;
  • analytic distribution;
  • 多币种下的金额转换;
  • perpetual valuation 的额外桥接行。

这让应计分录不仅“金额对”,还更可解释、可追溯。

纯手工一张总额分录虽然快,但下月很难对账,也很难解释为什么这样挂科目。


七、这篇源码给月末处理一个很重要的启发

很多团队把月末应计当成会计人员凭经验补几张杂项分录。

而 Odoo 这套向导体现的思路是:

  • 先把截止日当成一个计算边界;
  • 再从订单履约事实里算“截至当天应确认多少”;
  • 再生成一张可反转的桥接分录。

这比“月底凭感觉补账”成熟得多。


八、什么时候最适合用它

尤其适合以下场景:

  • 收货频繁但供应商票常跨月;
  • 大量项目型或按交付确认收入的销售;
  • 想把月末 cut-off 流程标准化,而不是每月临时拉表补账;
  • 希望后续 reversal 与正式票据衔接更清楚。

一句话记忆

Odoo 的 Accrued Orders Wizard 不是“月底补张杂项分录”,而是把订单履约与开票不同步的跨期差额,在截止日先桥接确认、下一期再自动反转。

DISCUSSION

评论区

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