企业 银行同步

Odoo 企业版银行同步为什么不是“拉流水进来就行”:opening statement、重复交易识别与异步补抓讲透

account_online_synchronization 的难点从来不是连上银行,而是首次同步开账、重复交易过滤、挂起批量导入和补抓缺失流水的完整链路。

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

“银行同步”听起来像一个外部接口问题,但 account_online_synchronization 真正难的是会计一致性:第一次同步怎么开账、重复流水怎么识别、导入量太大时怎么拆批处理,都会直接影响后续对账质量。

主要参考入口:

  • enterprise/account_online_synchronization/models/account_online.py
  • enterprise/account_online_synchronization/models/account_bank_statement.py
  • enterprise/account_online_synchronization/models/account_journal.py

一、首次同步不是简单从最新交易开始拉

源码里专门处理 opening statement。原因很现实:如果银行当前余额和已拉回的交易总额不完全一致,系统需要补一张“首次同步开账”来对齐起点。否则账上会出现一段无法解释的历史差额。

二、重复交易检测不是只靠 transaction id

account_journal.py 里能看到两类思路:既检查在线交易标识,也检查金额 + 日期 + 账户组合,甚至还会识别 provider 标记的 duplicated 记录。这说明企业版默认假设:银行侧、连接侧、用户侧都可能制造重复流水,所以去重要多层兜底。

三、批量导入和异步补抓是为了避免“前台卡死 + 后台导重”

account_online.pyaccount_bank_statement.py 中,大批量交易不会一次性全塞进前台流程,而是先导一部分、剩余交给 cron 或等待同步任务继续处理。源码里甚至会在关键点显式提交,目的就是避免多线程 / 多请求并发时重复导入。

四、缺失流水与重复流水要分开看

很多财务看见余额不对,就怀疑“是不是有重复”。但系统其实把这两个问题拆开:有缺失流水时,可打开 pending / missing transaction 相关动作;怀疑重复时,则走 duplicate transaction wizard。它们解决的不是同一类错误。

五、实施注意事项

  • 首次上线时先确认历史对账截止日,不要让系统从一个模糊起点开始。
  • 银行连接改绑、重连或更换 provider 后,优先检查 duplicate wizard。
  • 大量流水导入时,不要把“前台没全显示”误判成“没导入成功”,先看等待同步任务是否仍在推进。

六、结论

企业版银行同步的重点,不是“把接口打通”,而是让流水进入会计系统时仍然保持唯一、连续、可追溯。真正成熟的同步,永远同时处理开账、去重和异步补抓。

DISCUSSION

评论区

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