Toggle navigation

Отчеты QWeb - Odoo 8.0

Отчеты пишутся в формате HTML / QWeb, как и все обычные представления в Одо. Вы можете использовать обычное: ref: [UNKNOWN NODE title_reference]. Сама рендеринг PDF выполняется wkhtmltopdf.

Если вы хотите создать отчет по определенной модели, вам нужно будет определить это: ref: [UNKNOWN NODE title_reference] и: ref:` reference / reports / templates`, которые он будет использовать. Если вы хотите, вы также можете указать конкретный: ref: [UNKNOWN NODE title_reference] для этого отчета. Наконец, если вам нужен доступ к более чем вашей модели, вы можете определить класс: ref: [UNKNOWN NODE title_reference], который даст вам доступ к большему количеству моделей и записей в шаблоне.

Отчет

Каждый отчет должен быть объявлен с помощью: ref: [UNKNOWN NODE title_reference].

Для простоты для определения отчета доступен сокращенный элемент `` <report> [UNKNOWN NODE problematic], а не настраивать: ref: [UNKNOWN NODE title_reference] и его окружение вручную. Этот `` <report> `` может принимать следующие атрибуты:

id

Сгенерированная запись: term: [UNKNOWN NODE title_reference]

name (обязательно)

Полезен только в качестве мнемоники/описания печатной формы, при поиске в списке форм

model (обязательно)

модель данных к которой относится ваша печатная форма

report_type (обязательно)

или qweb-pdf для создания PDF файлов печатных форм, или qweb-html для HTML

report_name

имя печатной формы (которое будет присвоено выданному PDF файлу)

groups

Many2many поле, в котором находятся ссылки на группы, которым разрешено просматривать/использовать текущую печатную форму.

attachment_use

Если установлено значение True, отчет будет сохранен как прикрепление к записи с использованием имени, сгенерированного выражением `` attachment'[UNKNOWN NODE problematic]; Вы можете использовать это, если вам нужно, чтобы ваш отчет генерировался только один раз (по юридическим причинам, например)

attachment

Выражение python, которое определяет имя отчета; Запись доступна как переменная `` объект``

Пример:

<report
    id="account_invoices"
    model="account.invoice"
    string="Invoices"
    report_type="qweb-pdf"
    name="account.report_invoice"
    file="account.report_invoice"
    attachment_use="True"
    attachment="(object.state in ('open','paid')) and
        ('INV'+(object.number or '').replace('/','')+'.pdf')"
/>

Шаблон отчета

Минимальный жизнеспособный шаблон

Минимальный шаблон будет выглядеть так:

<template id="report_invoice">
    <t t-call="report.html_container">
        <t t-foreach="docs" t-as="o">
            <t t-call="report.external_layout">
                <div class="page">
                    <h2>Report title</h2>
                    <p>This object's name is <span t-field="o.name"/></p>
                </div>
            </t>
        </t>
    </t>
</template>

Вызов external_layout добавит заголовок и нижний колонтитул по умолчанию в ваш отчет. Тело PDF будет содержимым внутри `` <div class="page">``. Шаблон id должен быть именем, указанным в декларации отчета; Например account.report_invoice для вышеупомянутого отчета. Поскольку это шаблон QWeb, вы можете получить доступ ко всем полям объектов `` документов '', полученным с помощью шаблона.

В отчетах доступны некоторые конкретные переменные, в основном:

Документация

Записи для текущего отчета

Номер документа

Список идентификаторов для записей `` docs``

`` doc_model``

Модель для записей `` docs``

1 раза

Ссылка на: mod: [UNKNOWN NODE title_reference] из стандартной библиотеки Python

`` Translate_doc``

Функция для перевода части отчета. Его необходимо использовать следующим образом:

<t t-foreach="doc_ids" t-as="doc_id">
  <t t-raw="translate_doc(doc_id, doc_model, 'partner_id.lang', account.report_invoice_document')"/>
</t>
user

Запись [UNKNOWN NODE title_reference] для пользователя, печатающего отчет

`` Res_company``

Запись текущей компании `` пользователь``

Если вы хотите получить доступ к другим записям / моделям в шаблоне, вам понадобится: ref: [UNKNOWN NODE title_reference].

Переводимые шаблоны

Если вы хотите перевести отчеты (например, на язык партнера), вам необходимо определить два шаблона:

  • Основной шаблон отчета

  • Переводимый документ

Затем вы можете вызвать translate_doc из вашего основного шаблона, чтобы получить переведенный документ. Если вы хотите просмотреть детали перевода в бэкэнд, вы можете перейти на: menuselection: [UNKNOWN NODE problematic]Настройки -> Отчеты -> Отчет -> <имя_репортажа> -> Искать связанные с ним представления QWeb -> <translatable_document> -> Связанные переводы.

Например, рассмотрим отчет о заказе на продажу из модуля «Продажа»

<!-- Main template -->
<template id="sale.report_saleorder">
    <t t-call="report.html_container">
        <t t-foreach="doc_ids" t-as="doc_id">
            <t t-raw="translate_doc(doc_id, doc_model, 'partner_id.lang', 'sale.report_saleorder_document')"/>
        </t>
    </t>
</template>

<!-- Translatable template -->
<template id="report_saleorder_document">
    <t t-call="report.external_layout">
        <div class="page">
            <div class="oe_structure"/>
            <div class="row">
                <div class="col-xs-6">
                    <strong t-if="o.partner_shipping_id == o.partner_invoice_id">Invoice and shipping address:</strong>
                    <strong t-if="o.partner_shipping_id != o.partner_invoice_id">Invoice address:</strong>
                    <div t-field="o.partner_invoice_id" t-field-options="{&quot;no_marker&quot;: true}"/>
                <...>
            <div class="oe_structure"/>
        </div>
    </t>
</template>

Основной шаблон вызывает параметр translate_doc с параметром `` partner_id.lang``, что означает, что он использует: ref: [UNKNOWN NODE title_reference] для доступа к записи `` res.partner``.

Штрих-коды

Штрих-коды - это изображения, возвращаемые контроллером и легко встраиваемые в отчеты благодаря синтаксису QWeb:

<img t-att-src="'/report/barcode/QR/%s' % 'My text in qr code'"/>

Дополнительные параметры могут быть переданы как строка запроса

<img t-att-src="'/report/barcode/?
    type=%s&value=%s&width=%s&height=%s'%('QR', 'text', 200, 200)"/>

Полезные заметки

  • Щебетать классы Bootstrap и FontAwesome можно использовать в шаблоне отчета.

  • Локальный CSS можно поместить непосредственно в шаблон

  • Глобальный CSS можно вставить в основной макет отчета, унаследовав его шаблон и вставив свой CSS

    <template id="report_saleorder_style" inherit_id="report.style">
      <xpath expr=".">
        <t>
          .example-css-class {
            background-color: red;
          }
        </t>
      </xpath>
    </template>
    
  • Если кажется, что в вашем отчете PDF отсутствуют стили, проверьте: ref: [UNKNOWN NODE title_reference].

Формат бумаги

Форматы бумаги - это записи `` report.paperformat`` и могут содержать следующие атрибуты:

name (обязательно)

Полезен только в качестве мнемоники/описания печатной формы, при поиске в списке форм

Описание

Небольшое описание вашего формата

format

Либо предопределенный формат (от A0 до A9, от B0 до B10, законный, буква, таблоид, ...) или `` custom``; A4 по умолчанию. Вы не можете использовать нестандартный формат, если вы определяете размеры страницы.

DPI.

Выходной ДОИ; 90 по умолчанию

`` Margin_top``, [UNKNOWN NODE title_reference],` margin_left``, [UNKNOWN NODE title_reference]

Размеры полей в мм

`` Page_height``, `` page_width``

Размер страницы в мм

ориентированной позиции

Пейзаж или Портрет

`` Header_line``

Boolean для отображения строки заголовка

`` Header_spacing``

Межстрочный интервал в мм

Пример:

<record id="paperformat_frenchcheck" model="report.paperformat">
    <field name="name">French Bank Check</field>
    <field name="default" eval="True"/>
    <field name="format">custom</field>
    <field name="page_height">80</field>
    <field name="page_width">175</field>
    <field name="orientation">Portrait</field>
    <field name="margin_top">3</field>
    <field name="margin_bottom">3</field>
    <field name="margin_left">3</field>
    <field name="margin_right">3</field>
    <field name="header_line" eval="False"/>
    <field name="header_spacing">3</field>
    <field name="dpi">80</field>
</record>

Пользовательские отчеты

Модель отчета имеет стандартную функцию `` get_html``, которая ищет модель с именем: samp: [UNKNOWN NODE title_reference]. Если он существует, он будет использовать его для вызова движка QWeb; В противном случае будет использоваться общая функция. Если вы хотите настроить свои отчеты путем включения большего количества вещей в шаблон (например, записи других моделей), вы можете определить эту модель, перезаписать функцию `` render_html`` и передать объекты в словарной книге `` docargs`` :

from openerp import api, models

class ParticularReport(models.AbstractModel):
    _name = 'report.module.report_name'
    @api.multi
    def render_html(self, data=None):
        report_obj = self.env['report']
        report = report_obj._get_report_from_name('module.report_name')
        docargs = {
            'doc_ids': self._ids,
            'doc_model': report.model,
            'docs': self,
        }
        return report_obj.render('module.report_name', docargs)

Отчеты - это веб-страницы

Отчеты динамически генерируются модулем отчета и могут быть доступны напрямую через URL:

Например, вы можете получить доступ к отчету о заказе на продажу в режиме html, перейдя в http: // <server-address> /report/html/sale.report_saleorder/38

Или вы можете получить доступ к PDF-версии по адресу http: // <server-address> /report/pdf/sale.report_saleorder/38