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

Odoo发票计算字段实现运费总计计算的问题

问题诊断与修复方案

嘿,我一眼就发现你代码里的问题啦,这就是为啥运费总计一直显示0.00的原因:

核心问题分析

  1. 错误的集合判断逻辑
    你直接用record.invoice_line_ids.product_id == "FREIGHT"做判断,但invoice_line_ids是多条发票行的集合,而且product_id是关联到产品模型的字段(不是纯字符串),这种比较方式永远不会返回True,导致赋值代码根本没机会执行。

  2. 求和未过滤目标行
    就算判断逻辑正常,sum(record.invoice_line_ids.price_subtotal)会把所有发票行的小计都加起来,而不是只针对产品为"FREIGHT"的行。


修复后的计算代码

我假设你是用产品的default_code(内部参考)来标记"FREIGHT"的,如果是用产品名称的话,把product_id.default_code换成product_id.name就行:

for record in self:
    # 先过滤出所有产品为"FREIGHT"的发票行
    freight_lines = record.invoice_line_ids.filtered(
        lambda line: line.product_id.default_code == "FREIGHT"
    )
    # 只对过滤后的行的price_subtotal求和
    record['x_studio_freight_total'] = sum(line.price_subtotal for line in freight_lines)

额外验证提示

  • 确认产品标识:检查你的"FREIGHT"产品是用default_code还是name来标识的,对应调整lambda表达式里的判断字段。
  • 依赖项没问题:你设置的invoice_line_ids.price_subtotal, invoice_line_ids.product_id依赖项是正确的,能确保发票行变化时字段自动重新计算。
  • 空场景兼容:如果没有FREIGHT行,代码会自动返回0.00,符合预期。

现在测试一下:

  • 单条FREIGHT行(小计12.75):会正确显示12.75
  • 两条FREIGHT行(12.75+7.50):会得到20.25

内容的提问来源于stack exchange,提问作者Cameron Wolfe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:23:31