You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo14打印发票提示account.account_invoices_without_payment外部ID不存在

Odoo14打印发票触发外部ID缺失报错解决方案

错误根因

该报错是Odoo14原生账户模块硬编码依赖的account.account_invoices_without_payment外部ID丢失导致。哪怕你选择自定义空白打印模板也会触发问题,因为账户模块底层重写了发票报告的_render_qweb_pdf方法,固定引用了该ID,和前端选择的模板无关。

注意:所有操作前请提前备份Odoo数据库和源码文件,避免操作失误导致业务中断。

解决方案

方案1:手动恢复缺失的外部ID(无侵入,最推荐)

  1. 开启Odoo开发者模式,依次进入设置->技术->序列与标识符->外部标识符
  2. 点击新建,填写以下参数:
    • 模块:account
    • 外部ID:account_invoices_without_payment
    • 模型:ir.actions.report
    • 记录ID:进入设置->技术->动作->报告,找到系统当前生效的标准发票报告,打开后URL中的id参数即为记录ID
  3. 保存后重启Odoo服务,清除浏览器缓存后即可正常打印

方案2:修改源码修复硬编码逻辑(适合二次开发场景)

找到源码路径/addons/account/models/ir_actions_report.py的第41行,原有代码为:

invoice_reports = (self.env.ref('account.account_invoices_without_payment'), self.env.ref('account.account_invoices'))

修改为增加缺失校验的逻辑:

# 兼容外部ID丢失场景
report_without_payment = self.env.ref('account.account_invoices_without_payment', raise_if_not_found=False)
if not report_without_payment:
    report_without_payment = self.env.ref('account.account_invoices')
invoice_reports = (report_without_payment, self.env.ref('account.account_invoices'))

修改完成后保存文件,重启Odoo服务即可生效

方案3:升级原生账户模块快速恢复

如果是之前卸载自定义发票模块导致原生ID被误删,可以直接升级原生account模块恢复:
命令行执行升级指令:

./odoo-bin -c 你的Odoo配置文件路径 -u account

升级完成后重启Odoo服务即可恢复原生的外部ID配置

内容的提问来源于stack exchange,提问作者Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:54:05