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

Odoo15 QWeb-PDF条件合并子报表实现问题求助

Odoo报表合并问题修复建议

核心问题排查与修复步骤

  • 变量未传递:checkuppaper_bool需要在报表的Python逻辑(如_get_report_values方法)中定义并传入模板上下文,否则模板无法识别该变量。
  • 搜索条件错误:search里的'partner_id'是字符串常量,要替换为当前订单的合作伙伴ID,即order_doc.partner_id.id,否则查不到对应数据。
  • 子模板数据传递错误:直接在t-call内部写t-foreach无法正确传递上下文给子模板,应先获取检查单数据,再传递给子模板。
  • 变量命名冲突:外层循环已用doc作为订单变量,内层循环要换个变量名,避免上下文混乱。

修改后的模板代码示例

<template id="a_report_order">
    <t t-call="web.html_container">
        <t t-foreach="docs" t-as="order_doc">
            <t t-call="web.internal_layout">
                <div class="page">
                    <!-- 原订单报表内容 -->
                </div>
                <t t-if="checkuppaper_bool">
                    <!-- 获取当前订单对应的检查单数据 -->
                    <t t-set="checkup_docs" t-value="self.env['a.checkup'].search([('partner_id', '=', order_doc.partner_id.id)])"/>
                    <!-- 将数据传递给子模板 -->
                    <t t-call="a.b_report_checkup" t-set="docs" t-value="checkup_docs"/>
                </t>
            </t>
        </t>
    </t>
</template>

额外注意事项

  • 确保报表Python控制器中,把checkuppaper_bool加入_get_report_values的返回字典,示例:
def _get_report_values(self, docids, data=None):
    docs = self.env['sale.order'].browse(docids)
    # 根据业务逻辑设置checkuppaper_bool的值
    checkuppaper_bool = self._check_need_checkup(docs)
    return {
        'doc_ids': docids,
        'docs': docs,
        'checkuppaper_bool': checkuppaper_bool,
    }
  • 检查子模板a.b_report_checkup结构,确保它能处理传入的docs变量,通常子模板会用t-foreach="docs" t-as="doc"循环渲染内容。
  • 若子模板是独立报表,要去掉外层的web.html_container和web.internal_layout,只保留内容片段,避免重复渲染页面结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:55:56