QWEB - IndexError: список индексов вне диапазона

Я пытаюсь создать отчет QWeb. У меня есть список продуктов, и я хотел бы распечатать каждый этикет на той же странице. Это мой код:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <!-- Déclaration des rapports -->
            <report 
                id="etiquette_produit"
                model="product.template"
                string="Etiquette Produit"
                report_type="qweb-pdf"
                file="Product_Etiquette_QWeb.produit_etiquette"
                name="Product_Etiquette_QWeb.produit_etiquette"
            />

        <template id="produit_etiquette">
            <t t-call="report.external_layout">
                <t t-foreach="docs" t-as="o">
                    <div class="page">
                        <table class="table table-striped">
                            <tr>
                                <td class="col-xs-1"><span t-field="o.default_code"/></td>
                                <td class="col-xs-5 text-center"><span t-field="o.name"/></td>
                                <td class="col-xs-1"><span t-field="o.default_code"/></td>
                                <td class="col-xs-5 text-center"><span t-field="o.name"/></td>
                            </tr>
                            <tr>
                                <td colspan="2" class="text-center">* M E 2 1 5 9 *</td>
                                <td colspan="2" class="text-center">* M E 2 0 1 7 *</td>
                            </tr>
                        </table>
                    </div>
                </t>
            </t>
        </template>
    </data>
</openerp>

Проблема: когда я выбираю все продукты для печати, у меня появляется ошибка (см. Ниже). Но когда я выбираю только один продукт, я могу распечатать отчет.

Odoo Server Error

Traceback (most recent call last):
  File "/opt/odoo/odoo-server/addons/report/controllers/main.py", line 116, in report_download
    response = self.report_routes(reportname, docids=docids, converter='pdf')
  File "/opt/odoo/odoo-server/openerp/http.py", line 405, in response_wrap
    response = f(*args, **kw)
  File "/opt/odoo/odoo-server/addons/report/controllers/main.py", line 65, in report_routes
    pdf = report_obj.get_pdf(cr, uid, docids, reportname, data=options_data, context=context)
  File "/opt/odoo/odoo-server/openerp/api.py", line 268, in wrapper
    return old_api(self, *args, **kwargs)
  File "/opt/odoo/odoo-server/addons/report/models/report.py", line 275, in get_pdf
    paperformat, specific_paperformat_args, save_in_attachment
  File "/opt/odoo/odoo-server/openerp/api.py", line 268, in wrapper
    return old_api(self, *args, **kwargs)
  File "/opt/odoo/odoo-server/addons/report/models/report.py", line 432, in _run_wkhtmltopdf
    head_file.write(headers[index])
IndexError: list index out of range

Любая идея?

1 ответ

Решение

Проблема связана с тем фактом, что механизм отчетов ожидает, что на каждой странице будет по 1 верхнему и нижнему колонтитулам. Вы создаете N страниц для 1 верхнего + нижнего колонтитула.

Вызов <t t-call="report.external_layout"> должен быть помещен в цикл for. Если вам нужно более одного элемента на одной странице, не используйте page Класс как обертка, так как это то, что он использовал движок для получения страниц отчета. Вы можете взглянуть на исходный код.

Другие вопросы по тегам