Odoo销售报表无订单行税款时隐藏税额列实现咨询
问题原因
你写的代码有三个核心问题导致未生效:
- 逻辑冲突:循环遍历所有订单行反复操作同一个表头节点,多次替换后结果不可控
- 结构不完整:仅修改了表头的税额列,未同步修改订单行的税额单元格,会出现表格列数不匹配错位的问题
- 判断条件不符合需求:你用的是单行是否有税的判断,而需求是全局判断整个订单所有行是否都无税才隐藏列
正确实现方案
直接用QWeb支持的any()方法全局判断所有订单行是否存在关联税款即可,完整代码如下:
<template id="testReport" inherit_id="sale.report_saleorder_document"> <!-- 替换税额表头 --> <xpath expr="//th[@name='th_taxes']" position="replace"> <th t-if="any(line.tax_id for line in doc.order_line)" name="th_taxes">税额</th> </xpath> <!-- 替换订单行的税额单元格 --> <xpath expr="//td[@name='td_taxes']" position="replace"> <td t-if="any(line.tax_id for line in doc.order_line)" name="td_taxes"> <t t-foreach="line.tax_id" t-as="tax"> <span t-esc="tax.name"/><br/> </t> </td> </xpath> </template>
逻辑说明
any(line.tax_id for line in doc.order_line)会遍历当前订单的所有行,只要存在任意一行有关联的税款就返回True,展示税额列;如果所有行都没有关联税款就返回False,自动隐藏表头和对应行的税额单元格,不会出现表格错位问题。
内容的提问来源于stack exchange,提问作者Abdala Hellmy
相关产品推荐
相关产品推荐

