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

Odoo 16升级后XMLRPC PHP无法按编号查询发票问题

Odoo 16 升级后无法通过 ref 查询发票的排查方案

以下是几个可能的原因及对应的排查/解决步骤:

1. 发票编号存储字段变更

Odoo 16 对 account.move 字段的用途做了调整,部分场景下发票编号不再存储在 ref 字段中:

  • 若使用了本地化模块(如拉美、欧洲地区的税务模块),发票编号可能转移到了 l10n_latam_document_number 字段;
  • 标准场景下,正式发票的编号可能存储在 name 字段(即发票的"编号"字段,而非参考号)。

排查方法:
直接查询数据库确认字段值:

SELECT id, ref, name, l10n_latam_document_number FROM account_move WHERE ref = '20230307118' OR name = '20230307118' OR l10n_latam_document_number = '20230307118';

如果查询到记录,调整你的搜索domain对应的字段即可。

2. 记录权限/访问规则限制

Odoo 16 调整了 account.move 的默认记录规则,当前用户可能没有权限查看目标发票:

  • 比如默认规则可能限制用户只能查看自己创建的发票,或特定状态、类型的发票;
  • 管理员账号不受此限制,可以先用管理员账号测试查询,看是否能返回结果。

解决方法:

  • 检查 account.move 的记录规则(路径:设置 → 技术 → 安全 → 记录规则);
  • 给当前用户分配对应的权限组,或调整记录规则以允许访问目标发票。

3. 数据迁移不完整

升级过程中 ref 字段的数据可能未正确迁移,或存在索引异常:

  • 确认数据库中 account_move 表的 ref 字段确实存在目标值;
  • 若数据存在但查询不到,尝试重建字段索引:
CREATE INDEX IF NOT EXISTS account_move_ref_idx ON account_move (ref);

4. 默认搜索上下文过滤

Odoo 16 的 search_read 方法可能携带了默认上下文,过滤了部分发票:

  • 比如默认只显示已过账(state = 'posted')的发票,而目标发票可能处于草稿状态;
  • 尝试在domain中明确指定状态,或清空上下文参数:

调整后的查询代码:

$result = $models->execute_kw($this->base, $uid, $this->pass, 'account.move', 'search_read', 
    array(array(array('ref', '=', "20230307118"), array('state', 'in', ['draft', 'posted']))),
    array('context' => array())
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:32:38