Перейти до основного контенту
База знань · виробничий облік USD41,42 ПДВ20% МЗП8 000

Odoo

Модуль

Друковані бланки — М-4, М-11, ЛЗК, видаткова, ТТН

Українські первинні форми як QWeb-шаблони Odoo: де брати готові, як писати свої, на що звертати увагу.

Шлях у меню
Налаштування → Технічні → Звіти QWeb
Технічна модель
ir.actions.report, ir.ui.view (QWeb)
Редакція
2026-05-28

Що це і навіщо

Бухгалтерія в Україні живе на первинних документах. Без видаткової — не реалізація. Без М-4 — не оприбутковано. Без ТТН — водія можуть зняти на блок-посту. Стандартний Odoo не знає жодної української форми: він друкує invoice, receipt і delivery slip за міжнародним зразком. Тому для UA-проєкту друковані форми — це окремий шар, який треба або купити, або написати.

Цей файл — про те, як організовано друковані шаблони в Odoo (механіка QWeb + ir.actions.report), які форми точно треба для виробничого підприємства, і де їх брати.

Як це працює

Модель проста: кожен бланк — це пара з двох записів.

  1. ir.actions.report — це «дія» друку. Містить назву, до якої моделі прив’язана (model='account.move'), формат (report_type='qweb-pdf'), посилання на шаблон.
  2. ir.ui.view із type='qweb' — це сам шаблон, HTML/XML з QWeb-директивами (t-esc, t-foreach, t-if).

Коли натискаєш «Print», Odoo бере дані з моделі, рендерить QWeb у HTML і конвертує через wkhtmltopdf або chromium у PDF. Усе.

<!-- Шаблон видаткової накладної (фрагмент) -->
<template id="report_vydatkova">
  <t t-call="web.html_container">
    <t t-foreach="docs" t-as="o">
      <t t-call="web.external_layout">
        <div class="page">
          <h2>Видаткова накладна № <span t-field="o.name"/></h2>
          <p>Від <span t-field="o.invoice_date"/></p>
          <table>
            <thead><tr><th>Товар</th><th>Кільк.</th><th>Ціна</th><th>Сума</th></tr></thead>
            <tbody>
              <tr t-foreach="o.invoice_line_ids" t-as="line">
                <td t-esc="line.product_id.name"/>
                <td t-esc="line.quantity"/>
                <td t-esc="line.price_unit"/>
                <td t-esc="line.price_subtotal"/>
              </tr>
            </tbody>
          </table>
        </div>
      </t>
    </t>
  </t>
</template>

Шлях у меню до перегляду: Settings → Technical → Reports (увімкнути developer mode).

У контексті українського обліку

Базовий комплект українських форм, без якого виробниче підприємство не запрацює:

  • Видаткова накладна (відпуск товарів покупцю).
  • ТТН — товарно-транспортна накладна, обов’язкова під час перевезення.
  • Акт наданих послуг.
  • М-4 — прибутковий ордер (надходження на склад).
  • М-11 — накладна-вимога на відпуск матеріалів у виробництво.
  • ЛЗК — лімітно-забірна картка (періодичний відпуск матеріалів).
  • Акт виробництва / звіт про випуск ГП.
  • Інвентаризаційна відомість (М-21/ІНВ-3).
  • Акт списання ТМЦ (М-4 у зворотний бік).
  • Довіреність М-2 — на отримання ТМЦ.
  • ПКО / ВКО + касова книга.
  • Авансовий звіт.
  • Акт звіряння взаєморозрахунків.

Звідки брати:

  • Oblik-ERP. 12+ форм у пакеті (видаткова, ТТН, акт, М-4, М-11, ПКО/ВКО, авансовий, акт звіряння, інвентаризаційна, довідка бухгалтерська). Найшвидший шлях.
  • Власна розробка. Якщо специфіка не вкладається у стандарт — пишеш QWeb сам. У defense здебільшого так і роблять: потрібен defense-штамп, посилання на контракт А-XXXX, додаткові підписи приймальника.
  • Сторонні модулі з Odoo Store. Трапляються, але якість плаває.

Як ми робимо (defense-контекст)

ТОВ «УкрПром-Тех» взяла Oblik-ERP за основу і додала свій шар:

  • М-11 з defense-смугою. Зверху додаткова шапка з номером контракту А-XXXX, підпис представника замовника, за потреби — гриф «обмежено».
  • Кастомна ТТН для перевезення в зону ООС. Додатково — реєстр охорони, маршрут і пункти контролю.
  • Сертифікат відповідності виробу. Власна форма, де перелічено всі компоненти з серійниками (з stock.lot), результати тестування і підписи. Формується автоматично, щойно закриваєш MO.
  • EUC (End-User Certificate). Для експорту ВТП. Власна QWeb-форма з прив’язкою до експортного контракту і дозволу ДСЕКУ.

Усі ці форми наш модуль kit_blanks_def навішує поверх стандартних моделей. Під час друку вибираємо потрібну версію — звичайну або defense.

Типові граблі

  • wkhtmltopdf vs chromium. Стандартний Odoo рендерить через wkhtmltopdf 0.12.x, а той не тягне багато CSS3. Якщо твій шаблон гарно виглядає у браузері, а в PDF — кошмар, перевір, чи не вжив ти grid, flex або нові шрифти. Або переходь на chromium-headless як рендерер.
  • Кирилиця ламається. Типовий шрифт у external_layout — Helvetica/Arial без кирилиці. Підключай свій через CSS і клади його в пакет report_type: найнадійніше DejaVu Sans, Roboto, Inter.
  • Поля з валютами в t-esc без форматування. Будуть «1234.56789», а не «1 234,57 ₴». Використовуй t-options="{'widget': 'monetary', 'display_currency': o.currency_id}".
  • Шаблон не оновився після правки. Activate developer mode → Settings → Technical → User Interface → Views, знайди свій. Або через CLI: restart Odoo --update модуль.
  • Один PDF на всіх. Натиснув «Print» на 50 інвойсах — отримав один файл. Це by design в Odoo. Треба окремо — пиши кастомний wizard.
  • Поле t-esc="o.partner_id.name", а в партнера ім’я порожнє. Покаже None або впаде з помилкою. Обгортай у t-esc="o.partner_id.name or ''" чи у t-if.
  • Підпис-зображення вбив макет. PNG-печатка 2000×2000 px різко гальмує рендер. Стискай заздалегідь до 400×400.

Дотичне

Де цей модуль зустрічається3