Odoo14社区版销售/采购/财务模块全局与行折扣财务侧集成方案咨询
Odoo 14 财务模块自定义折扣集成修改方案
核心原则
不要全量复制原生方法覆盖实现,优先通过super()调用原生逻辑后扩展调整,避免后续版本升级、补丁更新出现兼容性问题。
需要继承修改的方法列表
一、account.move.line (行级折扣处理)
_get_price_total_and_subtotal_model
这是行级金额计算的核心方法,无需完全重写,调用原生super方法获取默认的未税小计、含税总额等值后,代入你已经实现的行级折扣(百分比/金额)逻辑,调整计税基数和行小计返回值即可。
同时需要把你新增的discount_line_amount、discount_line_percent字段追加到该方法的depends依赖列表中,确保折扣变动时自动触发重算。_onchange_price_subtotal
仅需将你的行折扣字段添加到onchange触发字段列表,调用super后如果需要调整行余额可做小幅修改,无需全量覆盖。
二、account.move (全局折扣+整单计算处理)
_compute_amount_all
该方法负责计算整单的未税金额、税额、总金额,调用super拿到原生计算结果后,代入你的全局折扣逻辑,更新amount_untaxed、amount_tax、amount_total三个核心字段即可。_recompute_dynamic_lines
这是整单动态行(税金行、应收/应付行)重算的入口,调用super后需要做两个处理:- 新增全局折扣对应的会计分录行,绑定提前配置好的销售/采购折扣损益科目
- 调整应收/应付行的金额,确保折扣额、总金额、借贷方金额完全匹配
_recompute_tax_lines
仅需要确保传入计税的base值为行折扣+全局折扣折算后的金额即可,不要全量重写该方法,避免税金计算逻辑混乱。
手动创建账单适配
在account.move和account.move.line的表单视图中添加你新增的折扣字段,给字段设置onchange触发规则,例如修改全局折扣百分比时自动计算对应折扣金额,确保手动录入场景下也能触发全量重算。
注意事项
- 折扣的计税规则要符合当地税法要求,国内场景默认按折扣后金额计税,需确保税金计算基数为折扣后的实际成交金额
- 不要直接修改原生表的核心字段存储逻辑,所有调整都通过compute或方法扩展实现
- 测试时重点验证借贷平衡、税金计算、应收/应付金额三个核心节点,避免出现账务错误
内容的提问来源于stack exchange,提问作者holydragon
相关产品推荐
相关产品推荐

