Odoo会计对账原理、操作说明及常见问题

news/2025/10/31 7:43:54/文章来源:https://www.cnblogs.com/xushuotec/p/19178543

会计对账操作说明

本文档梳理 Odoo 17 银行对账(account.bank.statement.line)的操作步骤、注意事项及常见问题处理办法,帮助会计在遇到报错或异常状态时快速定位原因。


主要概念

  • 银行对账行(Statement line):导入或手工录入的银行流水行。
  • 银行行(Liquidity line):凭证中使用日记账默认银行/现金科目的分录行,account_type=asset_cash
  • 暂记科目行(Suspense line):凭证中用于暂存、待确认的对方科目行,通常 勾选“可对账”。
  • 部分核销(Partial reconcile)account.move.line 上的 matched_debit_ids / matched_credit_ids,表示已与其他凭证行发生匹配。
  • 验证(Validate):在对账小部件中点击“验证/确认”按钮后,系统会重写对应凭证行,将暂记科目替换为实际科目并完成核销。

标准对账流程

  1. 定位待处理的银行对账行

    • 列表视图中筛选“未匹配(Not matched)”。
    • 在开发者模式下,可查看 is_reconciled 字段确认真实状态。
  2. 检查是否存在历史核销

    • 若银行凭证行 matched_debit_ids / matched_credit_ids 有值,说明之前已经建立过部分核销。
    • 可以在对账界面点右上角“调试操作 ▸ 取消对账”,或在凭证表单页签勾选该行后选择“操作 ▸ 取消匹配”;如界面无此按钮,可在 shell 中执行 remove_move_reconcile()。务必在重新验证前清理残留核销。
  3. 在对账小部件中选择要匹配的单据

    • 只选择应收/应付、费用、收入等非银行科目的分录。
    • 如需调整金额或科目,可在界面中修改新增行的 account_id,务必避免再次选择银行科目。
  4. 验证

    • 点击“验证”后,系统会:
      1. 先创建/更新 partial reconcile(银行行与选中单据挂钩)。
      2. 清空原凭证行 [Command.clear()] 并按照界面行重建。
      3. 确保仅保留 条银行科目行,其余行改为真正的对方科目。
      4. 执行 _reconcile_plan 完成核销,is_reconciled 变为 True。
  5. 验证结果

    • 列表刷新后,该对账行将从“未匹配”过滤器中消失。
    • 若仍在“未匹配”,说明暂记行未被替换或残值未归零,需要检查错误处理部分。

暂记科目替换逻辑

  1. 用户在小部件中确认行内容

    • 第一行始终是银行科目(flag='liquidity'),系统会保留。
    • 其余行由用户选择的发票/费用等分录或手工新增行组成(flag='new_aml'flag='manual' 等)。
    • 这些行的 account_id 决定了替换暂记科目后要使用的真实科目。
  2. 验证时重写凭证

    • bank.rec.widget._action_validate()account_accountant/models/bank_rec_widget.py)会将上述行转换为 Command.create(...),写回原凭证:
      move_ctx.write({'partner_id': partner_to_set.id,'line_ids': [Command.clear()] + line_ids_create_command_list,
      })
      
    • Command.clear() 先删除原来的两条默认行(银行 + 暂记)。
    • 随后的 Command.create 会逐条创建新行:第一条仍为银行科目,其余行的 account_id 承袭界面设置,相当于直接把“暂记科目”替换掉。
  3. 替换成功的前提

    • 满足只有一条行使用银行科目;其它行必须是非 asset_cash 科目(如应收、应付、费用)。
    • 如果用户在界面上把第二行又选成了银行科目,写回后仍会得到两条银行行,导致 _seek_for_lines() 判定无效,后续取消或再对账都会失败。
  4. 如何确认替换结果

    • 验证后打开凭证,检查非银行行的 account_id 是否正确。
    • 确认 journal_entry.line_ids 中只有一条科目属于 asset_cash 且等于日记账默认银行科目。
  5. 替换失败的常见场景

    • 验证阶段报错(例如 _check_reconciliation()),导致暂记行未被删除,却已创建 partial reconcile,需先取消核销再重试。
    • 自定义对账模型返回了银行科目,或脚本在写入时覆盖了本应替换的科目。

掌握这一机制后,只要确保在验证前界面上的“新分录”行科目正确,系统就会自动将暂记科目替换为真实科目。若需重新指定,可在对账窗口直接编辑该行的科目字段,再执行验证。


常见错误与处理

1. “You cannot do this modification on a reconciled journal entry.”

  • 触发原因
    • 在验证阶段需要修改银行行的字段(account_idbalance 等),但该行已存在 matched_debit_ids/matched_credit_ids
  • 解决步骤
    1. 在凭证界面或 shell 中执行:
      env['account.move.line'].browse([银行行ID]).remove_move_reconcile()
      
    2. 返回对账界面重新匹配并验证。
  • 预防建议
    • 验证前如已手工匹配过,需要先取消原核销。
    • 自定义脚本不要只创建 partial 而未走完整验证流程。

2. “日记账分录 XXX 在其相关对账单行达到无效状态。…必须始终有涉及银行/现金科目的日记账项目。”

  • 触发原因
    • 凭证中包含 多条 asset_cash 类型的分录(例如暂记科目也配置成现金类、或被手工改成银行科目)。
    • _seek_for_lines() 找到超过一条银行行时会抛出该错误。
  • 解决步骤
    1. 手工编辑凭证,将非银行的对方行修正为应收/应付/费用等非 asset_cash 科目。
    2. 保存后再尝试取消对账或重新验证。
  • 预防建议
    • 对账模型、人工新增行务必选择非银行科目。
    • 暂记科目建议使用 asset_current 等非现金类型,并保持 reconcile=False

3. 对账后仍显示“未匹配”

  • 通常是暂记行未成功替换,残值仍不为零。amount_residual 仍由暂记行决定时,is_reconciled 会一直是 False。
  • 请确认是否存在残留 partial、是否报错中断、或是否误将对方科目设置成银行科目。必要时使用“取消对账”恢复默认两行后重新匹配。

操作注意事项清单

  • ✅ 仅保留 一条 银行科目行(银行日记账默认科目)。
  • ✅ 暂记科目默认不勾选“可对账”,也不应属于 asset_cash
  • ✅ 验证前若发现银行行已有历史 partial,先行“取消对账”。
  • ✅ 对账模型返回的科目必须是实际对方科目,切勿返回银行科目。
  • ✅ 报错后务必撤销残留的 partial,避免多次验证失败。
  • ❌ 不要直接在数据库或脚本中只写入 account.partial.reconcile 而未走完整流程。

流程图(Mermaid)

flowchart TDA[开始:列表筛选未匹配] --> B{银行行存在\nmatched_*?}B -- 否 --> C[正常选择要匹配的发票/费用行]B -- 是 --> D[取消对账\n(remove_move_reconcile)]D --> CC --> E{界面行科目选择正确?\n(非银行科目)}E -- 否 --> F[调整科目到应收/应付/费用等]F --> EE -- 是 --> G[点击验证]G --> H{报错?}H -- 是 --> I[根据错误信息处理\n(常见见上文)]I --> BH -- 否 --> J[验证成功\n凭证仅剩一条银行行]J --> K{列表仍显示未匹配?}K -- 是 --> L[检查暂记行残值/科目\n并修正]L --> BK -- 否 --> M[结束:对账完成]

附:常用 Shell 命令片段

# 查看某银行对账行的凭证及核销情况
st_line = env['account.bank.statement.line'].browse(64061)
for line in st_line.move_id.line_ids:print(line.id, line.account_id.code, line.matched_debit_ids.ids, line.matched_credit_ids.ids)# 撤销银行行已有的 partial reconcile
env['account.move.line'].browse([411956]).remove_move_reconcile()

若按照上述步骤仍无法完成对账,请记录报错信息、相关凭证行 ID,并联系系统管理员或实施顾问进一步排查。祝对账顺利。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/951273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM学习记录DAY13

📘今日学习总结 RLHF PPO PPO整体框架输入问题 \(q\) ,经过策略模型更新,生成问题回答 \(o\) ,然后输入到三个模型策略模型(Policy Model):负责生成决策 奖励模型(Reward Model):负责对生成决策的优劣程度进行…

JBoltAI:让企业级Java应用快速进入AI时代

JBoltAI:让企业级Java应用快速进入AI时代“董事会一句话:‘让AI真正落地到业务里。’ IT负责人李伟盯着满屏的Java代码,心里却在想:我的团队该从哪里开始?”“董事会一句话:‘让AI真正落地到业务里。’ IT负责人…

2025年10月黄褐斑改善产品推荐榜:五款热门单品横向对比排行

黄褐斑常被称作“斑中之王”,一旦形成便与激素波动、紫外线记忆、屏障受损纠缠不清,2025年10月正值秋季紫外线强度回落,是全年修护色素沉着的黄金窗口。国家药监局《化妆品监督管理常见问题解答(五)》指出,宣称“…

2025年10月黄褐斑改善产品口碑榜:五款温和淡斑单品排名一览

站在镜子前,你或许正为两颊那片对称的淡褐色斑块发愁:遮瑕膏越抹越厚,粉底色号越换越黄,激光预算被一次次延期,而色斑却在换季、熬夜、情绪起伏后悄然加深。黄褐斑的成因像一张多节点网络——紫外线刺激、激素波动…

当AI遇上Java团队:一个IT负责人的真实困境

当AI遇上Java团队:一个IT负责人的真实困境AI的价值不在于炫技,而在于真正推动业务增长和创新。李伟是一家大型制造企业的IT负责人。过去几年,他的团队一直在推动数字化转型:ERP、MES、CRM,一个个系统上线,业务流…

读AI赋能13读后总结与感想兼导读

读AI赋能13读后总结与感想兼导读1. 基本信息 AI赋能​[美]里德霍夫曼 [美]格雷格贝亚托 著浙江教育出版社,2025年05月出版1.1. 读薄率 书籍总字数18.5万字,笔记总字数36793字。 读薄率36793185000≈19.89% 1.2. 读厚方…

SM45640_SaveTJ保存并提交

using Salien.Utility; using Salien.Utility.SUWF; using Salien.Utility.WebControls; using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Web.UI.WebContro…

上证指数多日预测结果

=== 上证指数多日预测结果 === 生成时间: 2025-10-31 06:17:10 === 上证指数多日预测结果 === 数据截止日期: 2025-10-30 当前收盘价: 3986.9008 未来1日预测: Prophet-XGBoost: 下跌 (上涨概率: 0.4948) 随机森林: 下…

上证指数前瞻:未来5日多空解析

$上证指数(SH000001)$ 【数据更新】 📅 截止日期:2025-10-30 📊 当前收盘:3986.90 【模型预测明细】 🎯 1日展望: P-XGB:看跌 ↘(涨率46%) 随机森林:看跌 ↘(涨率48%) LSTM:看涨 ↗(涨率55%) 综合研…

【上证指数AI前瞻:未来5日多空密码解析】

【上证指数AI前瞻:未来5日多空密码解析】📊 当前锚点:3986.90点(截至10月30日),三大AI模型今日给出未来一周走势图谱,呈现"跌-涨-涨-涨-跌"的N型波动特征。 🔥 核心预测矩阵周期 三大模型观点 一致…

八字算卦股市分析报告

```html八字算卦股市分析报告body { font-family: "Microsoft YaHei", sans-serif; line-height: 1.6; color: rgba(51, 51, 51, 1); max-width: 900px; margin: 0 auto; padding: 20px; background-color: …

如何在舍友大叫开黑的情况下给麦克风降噪

如何在舍友大叫开黑的情况下给麦克风降噪如何使用 Win 10 或 Win 11 的各种电脑软件来对身处 4 人开黑热闹宿舍里的麦克风实施降噪行动,使其满足你直播或打语音电话的需求?你可以参考一下这篇文章。本文章适用于 Win…

Spring ehcache

Spring ehcache1、ehcache.xml<?xml version="1.0" encoding="UTF-8"?><ehcache dynamicConfig="false" monitoring="off" updateCheck="false" …

【CI130x 离在线】音频的原始码率和输出码率的区别

案例:mp3是16k采样率,16bit深度的,那么码率不应该是32kBps吗,为什么可以选16kbps 这是一个非常好的问题,它触及了数字音频编码的核心概念:原始数据量和压缩编码之间的区别。 你的计算完全正确,但只适用于未经压…

解决Kensington VeriMark系列指纹识别器提示指纹达到10个上限

问题症状 重装系统后设置Windows Hello时提示你已达到10个指纹限制。 解决方法 下载驱动与软件 下载对应VeriMark系列的软件,这里以VeriMark Desktop为例子。 https://www.kensington.com/software/verimark-setup/ve…

舍友大叫开黑的情况下给麦克风降噪

舍友大叫开黑的情况下给麦克风降噪速度博客园原文链接:https://www.cnblogs.com/QiFande/p/19178498,转载请注明。如果你对本篇文章感兴趣,不如来看看肉丁土豆表的其他文章,说不定也有你喜欢的。

Vue2随笔-251030

指令修饰符@click.stop 禁止子点击事件冒泡调用父标签事件。 @click.prevent 禁止标签默认行为。 @model.trim(number) 去除首尾空格,转为数字类型。 v-model默认值 与select标签绑定,默认值必须在option中存在。计算…

qw-110-

import org.apache.poi.ss.usermodel.Workbook;import org.springframework.core.io.buffer.DataBuffer;import org.springframework.core.io.buffer.DataBufferUtils;import org.springframework.http.MediaType;impo…

qw-33

import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.netty.http.client.HttpClient; import reactor.nett…

qw-12

import org.springframework.core.io.ByteArrayResource;import org.springframework.core.io.buffer.DataBuffer;import org.springframework.core.io.buffer.DataBufferUtils;import org.springframework.http.Media…