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

如何在Odoo的Qweb销售订单报表中按页打印订单行商品小计金额

Odoo销售订单Qweb报表分页小计实现方案

核心逻辑

Qweb报表的分页由wkhtmltopdf工具控制,原生遍历订单行时无法直接感知分页边界,我们可以通过固定单页行数累计(适合行高固定的场景)或者页脚JS动态计算(适合行高动态的场景)实现每页末尾打印当前页subtotal。

具体实现步骤(固定行高场景,适配你给出的12行/页示例)

  • 第一步:继承销售订单报表模板,声明临时变量
    你需要在自定义模块的Qweb模板中,继承原有销售订单报表,在订单行遍历前新增两个变量:
    <!-- 累计当前页总金额,初始值为0 -->
    <t t-set="current_page_subtotal" t-value="0"/>
    <!-- 单页最大显示订单行数量,你示例单页显示12个产品所以填12 -->
    <t t-set="single_page_line_limit" t-value="12"/>
    
  • 第二步:遍历订单行时同步累计金额,达到阈值输出小计并分页
    原有订单行渲染逻辑保持不变,每渲染一行就将该行金额累加到当前页小计变量,累计到单页上限时先输出当前页subtotal,再插入分页符并重置累计变量:
    <t t-foreach="doc.order_line" t-as="line">
        <!-- 原有订单行的渲染代码,保持不变 -->
        <tr>
            <td><span t-field="line.product_id.name"/></td>
            <td class="text-right"><span t-field="line.price_subtotal"/></td>
        </tr>
        <!-- 累加当前行金额到页小计 -->
        <t t-set="current_page_subtotal" t-value="current_page_subtotal + line.price_subtotal"/>
        <!-- 判断是否触达单页行数上限,且不是最后一行 -->
        <t t-if="(line_index + 1) % single_page_line_limit == 0 and not line_last">
            <!-- 输出当前页小计 -->
            <tr class="border-top fw-bold">
                <td>当前页小计</td>
                <td class="text-right" t-esc="current_page_subtotal"/>
            </tr>
            <!-- 插入强制分页符 -->
            <div style="page-break-after: always;"/>
            <!-- 重置累计变量,用于下一页计算 -->
            <t t-set="current_page_subtotal" t-value="0"/>
        </t>
    </t>
    
  • 第三步:输出最后一页的小计
    遍历完全部订单行后,输出最后不足12行的页面的小计金额:
    <t t-if="current_page_subtotal > 0">
        <tr class="border-top fw-bold">
            <td>当前页小计</td>
            <td class="text-right" t-esc="current_page_subtotal"/>
        </tr>
    </t>
    

动态行高场景适配方案

如果你的订单行存在产品名称换行、多行描述的情况,无法固定单页行数,可以改用页脚JS动态计算方案:

给所有订单行的金额单元格添加统一的类名比如order-line-subtotal,在报表的页脚模板中嵌入JS代码,渲染时遍历当前页所有带该类名的元素,求和后写入页脚的subtotal展示位即可,该方案不需要提前预设单页行数。

内容的提问来源于stack exchange,提问作者Sakthi Priya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:48:02