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

Odoo V16借贷方允许负值:修改后过账值归零问题解决

解决Odoo V16中Debit/Credit允许输入负值且过账后值不丢失的问题

问题根源

你清空了_compute_debit_credit和反向函数的逻辑,却保留了Debit、Credit字段的compute属性。过账时Odoo会计模块会触发计算字段的重新计算,空的compute函数会导致Debit、Credit被重置为0;同时_compute_balance的依赖设置错误,未关联Debit和Credit的变化,无法同步数值。

修正方案

调整字段逻辑,让Debit和Credit支持直接输入负值,同时保证Balance自动计算,且过账时不会被重置:

1. 修改字段定义

移除Debit和Credit的compute、inverse属性,将它们设为可直接编辑的存储字段;调整Balance的依赖为Debit和Credit:

debit = fields.Monetary(
    string='Debit',
    store=True,
    currency_field='company_currency_id',
    default=0.0,
)
credit = fields.Monetary(
    string='Credit',
    store=True,
    currency_field='company_currency_id',
    default=0.0,
)
balance = fields.Monetary(
    string='Balance',
    compute='_compute_balance',
    store=True,
    readonly=True,
    precompute=True,
    currency_field='company_currency_id',
)

2. 调整Balance计算函数

让Balance基于Debit和Credit自动计算,依赖设置为这两个字段:

@api.depends('debit', 'credit')
def _compute_balance(self):
    for line in self:
        line.balance = line.debit - line.credit

3. 移除冗余空函数

删除_compute_debit_credit、_inverse_debit、_inverse_credit这三个空函数——现在Debit和Credit是直接编辑字段,不再需要这些计算和反向逻辑。

额外注意

  • 若需保留Storno凭证(反向过账)逻辑,可在凭证行创建/修改时单独处理,不影响Debit/Credit的直接输入
  • 测试过账流程时,需确保会计模块的其他校验(如凭证平衡)不受负值影响,必要时调整相关校验逻辑

原修改失效原因

原修改中Debit和Credit仍为计算字段(保留compute='_compute_debit_credit'),但对应的compute函数为空。过账时Odoo触发计算字段重算,空函数未给Debit、Credit赋值,导致字段被重置为默认值0;同时Balance的依赖未关联Debit/Credit,无法同步数值。

内容的提问来源于stack exchange,提问作者Grant.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:05:40