很多团队一讲月末处理,脑子里先浮现的是:
- 锁账;
- 税锁定;
- 汇兑重估;
- 折旧摊销。
但真正最容易把利润表和资产负债表拉歪的,往往是那些业务已经发生、单据却没完全同步的跨期差异:
- 货收到了,供应商票还没到;
- 票先来了,货还没到齐;
- 货已经交付,销售票还没开;
- 票已经开了,但履约还没完成。
Odoo 在 /home/ubuntu/odoo-temp/addons/account/wizard/accrued_orders.py 里其实提供了一套很成型的思路:account.accrued.orders.wizard。
它表达的不是“月末人工补一张杂项分录”,而是:
从订单未同步差额里,系统化提取应该跨期确认的收入或费用,并自动生成反转分录。
一、这个向导真正想解决什么问题
它不是为了替代正常开票,也不是为了永久调整库存或收入费用。
它解决的是一个典型的月末会计问题:
订单层面的业务事实,和发票层面的法律/结算事实,在截止日那一刻还没对齐。
于是你需要一张“截至某日”的应计凭证,把当期应该体现的那部分先挂出来; 下一期再自动反转,等真实发票或后续业务到来时,由正式单据接手。
所以它天生就是截止日视角,不是永久重分类工具。
二、为什么它是“按订单差额”而不是“按发票差额”
源码里向导既可以对:
purchase.order/purchase.order.linesale.order/sale.order.line
运行,也就是它抓的是订单履约差额,而不是单纯发票差额。
在 _compute_move_vals() 里,它会看:
amount_to_invoice_at_date- 采购侧的
qty_received_at_date与qty_invoiced_at_date - 销售侧的
qty_delivered_at_date与qty_invoiced_at_date
这很重要。
因为月末应计关注的是:
- 截止日之前,业务已经实质发生多少;
- 截止日之前,开票已经覆盖多少;
- 两者差多少。
所以它天然应该站在 order / fulfillment 视角,而不是只看 invoice。
三、采购和销售为什么走的是镜像逻辑
源码把采购和销售视为镜像:
采购侧
如果已经收货但还没完全开票,就需要把该确认的成本先应计出来。
销售侧
如果已经交付但还没完全开票,就需要把该确认的收入先应计出来。
所以它不是“采购专用工具”,而是一个订单履约与开票不同步时的期间切割工具。
四、为什么 perpetual valuation 还要单独补一层
源码里有一个很有意思的处理:
- 对 perpetual valuation 的产品,除了常规应计科目外;
- 还会根据产品账户取
expense_account与stock_variation_account; - 再补一组
(*) Goods Delivered not Invoiced/Goods Invoiced not Delivered风格的行。
这说明 Odoo 很清楚:
库存型产品的跨期差异,不只是收入费用时间差,还会牵涉库存变动与费用确认口径的桥接。
所以这个向导不是简单把金额借贷一翻,而是在尝试把订单差额和库存会计语义一起对齐。
五、为什么它会自动生成 reversal
create_entries() 里最关键的不是只创建一张 move,而是:
- 先创建 accrual move;
- 立即用
_reverse_moves()创建 reversal; - reversal date 默认取应计日次日,且必须晚于原日期。
这说明它的定位非常明确:
月末应计是期间性桥接,不是永久记账终点。
你在截止日先把该体现的部分挂出来; 到了下一期开始,系统先反转,避免双重确认; 后面再由真实采购票、销售票或其他正式业务分录接手。
六、为什么它比“手工总额补账”更稳
向导也允许你手工输入 amount 做整单应计,但从源码设计看,它更推荐按订单行自动拆。
因为自动拆时可以保留:
- 每条 order line 的数量差异说明;
- 产品相关科目;
- analytic distribution;
- 多币种下的金额转换;
- perpetual valuation 的额外桥接行。
这让应计分录不仅“金额对”,还更可解释、可追溯。
纯手工一张总额分录虽然快,但下月很难对账,也很难解释为什么这样挂科目。
七、这篇源码给月末处理一个很重要的启发
很多团队把月末应计当成会计人员凭经验补几张杂项分录。
而 Odoo 这套向导体现的思路是:
- 先把截止日当成一个计算边界;
- 再从订单履约事实里算“截至当天应确认多少”;
- 再生成一张可反转的桥接分录。
这比“月底凭感觉补账”成熟得多。
八、什么时候最适合用它
尤其适合以下场景:
- 收货频繁但供应商票常跨月;
- 大量项目型或按交付确认收入的销售;
- 想把月末 cut-off 流程标准化,而不是每月临时拉表补账;
- 希望后续 reversal 与正式票据衔接更清楚。
一句话记忆
Odoo 的 Accrued Orders Wizard 不是“月底补张杂项分录”,而是把订单履约与开票不同步的跨期差额,在截止日先桥接确认、下一期再自动反转。
DISCUSSION
评论区