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
相关产品推荐
相关产品推荐

