Создание шаблона печатной формы для одного заказа Рассмотрим добавление нового шаблона с примерами кода. false W3sidGl0bGUiOiLQndCw0YHRgtGA0L7QudC60LgiLCJ1cmwiOiIvdXNlcnMvYWRtaW5pc3RyYXRpb24vIn0seyJ0aXRsZSI6ItCX0LDQutCw0LfRiyIsInVybCI6Ii91c2Vycy9hZG1pbmlzdHJhdGlvbi9vcmRlci1zZXR0aW5ncy8ifSx7InRpdGxlIjoi0J/QtdGH0LDRgtC90YvQtSDRhNC+0YDQvNGLIiwidXJsIjoiL3VzZXJzL2FkbWluaXN0cmF0aW9uL29yZGVyLXNldHRpbmdzL3ByaW50aW5nLWZvcm1zLyJ9LHsidGl0bGUiOiLQl9Cw0LrQsNC30YsiLCJ1cmwiOiIvdXNlcnMvYWRtaW5pc3RyYXRpb24vb3JkZXItc2V0dGluZ3MvcHJpbnRpbmctZm9ybXMvb3JkZXItcHJpbnQtZm9ybXMvIn1d Настройки /users/administration/ ["users","Настройки"] ["users","Настройки","Заказы"] users

Создание шаблона печатной формы для одного заказа

Рассмотрим добавление нового шаблона с примерами кода.

Содержание

Примечание

Печатные формы также могут быть созданы автоматически по API, например, при подключении модуля службы доставки.

Для добавления новой печатной формы кликните по одноименной кнопке в разделе «Печатные формы».

Отобразится окно «Новая печатная форма» с вкладками: «Основные» и «Шаблон».

Во вкладке «Шаблон» можно настроить шаблон печатной формы в формате HTML с использованием Twig-шаблонов.

Особенности рендеринга HTML в PDF

Для генерации PDF-документов из вашего HTML-кода система использует стороннюю библиотеку wkhtmltopdf.

Это означает, что итоговое отображение печатной формы зависит от того, как эта библиотека обрабатывает HTML и CSS, а не от того, как вёрстка выглядит в браузере. Некоторые современные возможности CSS, например, justify-content из Flexbox, могут работать некорректно из-за известных ограничений или багов в wkhtmltopdf.

Если вы столкнулись с проблемами при вёрстке, рекомендуем сверяться с документацией и списком известных проблем библиотеки wkhtmltopdf для поиска решения.

Динамические данные и стили

  • Справочник доступных Twig-фильтров
  • Справочник доступных Twig-функций

При генерации печатной формы, по умолчанию устанавливается шрифт Nimbus. Также доступно подключение внешних шрифтов, например, Google Fonts.

Код шаблона счета-фактуры

Рассмотрим работу с шаблоном на примере счета-фактуры.

<!DOCTYPE HTML PUBLIC "-//W3C//Dtd HTML 3.2//EN">
<html>
<style>
body
{
    font-family:"Arial", sans-serif;
    font-size: 10pt;
}
p
{
    line-height: 150%;
}
table.footer
{
    font-size: 10pt;
    margin-top: 15px;
    line-height: 150%;
}
table.order
{
    border-collapse: collapse;
}
table.order td
{
    font-size: 10pt;
    border: 1px solid #000000;
}

</style>

    <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title langs="ru">Счет</title>
    </head>
    <body bgcolor="white" lang="RU">

        <div class="Section1">

            <h1>Счет-фактура №{{ order.number }} от {{ order.createdAt|date("d.m.Y") }}</h1>
            <p>
                Продавец: {{ order.site.contragent.legalName }}<br>
                Адрес: {{ order.site.contragent.legalAddress }}<br>
                ИНН: {{ order.site.contragent.inn }}<br>
                Грузотправитель и его адрес: {{ order.site.contragent.legalName }} {{ order.site.contragent.legalAddress }}<br>
                Грузополучатель и его адрес: {{ order.customer.nickName }} {{ order.deliveryAddress }}<br>
                К платежно-расчетному документу №{{ order.number }} от {{ order.createdAt|date("d.m.Y") }}<br>
                Покупатель: {{ order.customer.nickName }}<br>
                Адрес: {{ order.customer.address }}<br>
                Валюта: наименование, код {{ defaultCurrency }}<br>
            </p>

            <table border="0" cellspacing="0" cellpadding="2" width="100%" class="order">
                <tr>
                    <td rowspan=2 align="center" valign=middle>Наименование товара (описание выполненных работ, оказанных услуг), имущественного права</td>
                    <td rowspan=2 align="center" valign=middle>Единицы измерения</td>
                    <td rowspan=2 align="center" valign=middle>Количество/объем</td>
                    <td rowspan=2 align="center" valign=middle>Цена (тариф) за единицу измерения</td>
                    <td rowspan=2 align="center" valign=middle>Стоимость товаров (работ, услуг) имущественных прав, без налога — всего</td>
                    <td rowspan=2 align="center" valign=middle>В том числе сумма акциза</td>
                    <td rowspan=2 align="center" valign=middle>Налоговая ставка</td>
                    <td rowspan=2 align="center" valign=middle>Сумма налога, предъявляемая покупателю</td>
                    <td rowspan=2 align="center" valign=middle>Стоимость товаров (работ, услуг), имущественных прав с налогом — всего</td>
                    <td colspan=2 align="center" valign=middle>Страна происхождения товара</td>
                    <td rowspan=2 align="center" valign=middle>Номер таможенной декларации</td>
                </tr>
                <tr>
                        <td align="left">Код</td>
                        <td align="left">Условное обозначение (национальное)</td>
                        <td align="left">Цифровой код</td>
                        <td align="left">Краткое наименование</td>
                </tr>
                <tr>
                    <td>1</td>
                    <td>2</td>
                    <td>2а</td>
                    <td>3</td>
                    <td>4</td>
                    <td>5</td>
                    <td>6</td>
                    <td>7</td>
                    <td>8</td>
                    <td>9</td>
                    <td>10</td>
                    <td>10а</td>
                    <td>11</td>
                </tr>

                {% for op in order.availableOrderProducts %}
                    <tr valign="top">
                        <td>
                            {{ op }}
                        </td>
                        <td>

                        </td>
                        <td>

                        </td>
                        <td>
                            {{ op.quantity }}
                        </td>
                        <td>
                            {{ op.price }}
                        </td>
                        <td>
                            {{ op.summ }}
                        </td>
                        <td>

                        </td>
                        <td>

                        </td>
                        <td>

                        </td>
                        <td>
                            {{ op.summ }}
                        </td>
                        <td>

                        </td>
                        <td>
                            {{ op.offer.product.manufacturer }}
                        </td>
                        <td>

                        </td>
                    </tr>
                {% endfor %}

                <tr valign="top">
                        <td colspan="5">
                            <h3>Всего к оплате:</h3>
                        </td>

                        <td>
                            {{ order.summ }}
                        </td>
                        <td colspan="2">
                            X
                        </td>
                        <td>

                        </td>
                        <td>
                            {{ order.totalSumm }}
                        </td>
                        <td colspan="3">

                        </td>
                </tr>

            </table>
            <table border="0" cellspacing="0" cellpadding="0" width="100%" class="footer">
                <tr>
                    <td width="20%">
                        Руководитель организации:
                    </td>
                    <td width="80%">
                        _______________________ / ______________________________ /
                    </td>
                </tr>
                <tr>
                    <td width="20%">
                        Гл. бухгалтер:
                    </td>
                    <td width="80%">
                        _______________________ / ______________________________ /
                    </td>
                </tr>
            </table>
        </div>
    </body>
</html>

Пояснения к коду

Доступные переменные: при выборе типа шаблона «Заказ» - переменная order (заказ), либо в случае типа шаблона «Список заказов» - переменная orders (массив заказов). Также доступна переменная defaultCurrency - текущая валюта.

Twig-код Cчет-фактура №{{ order.number }} от {{ order.createdAt|date("d.m.Y") }} в результате генерирует следующий html: <h1>Счет-фактура No123654 от 22.11.2019</h1>.

order — сущность заказа, у него есть поле number — это номер заказа, с помощью {{ }} выводим значение поля number на печать.

Также у заказа есть поле createdAt, указывающее на дату создания. Системе неизвестно, в каком виде должна быть распечатана дата, поэтому необходимо с помощью фильтра указать формат даты: order.createdAt|date("d.m.Y"). Здесь указан формат: день.месяц.год.

Twig-код Продавец: {{ order.site.legalEntity }} в результате формирует html Продавец: Интернет-магазин Кроссовки.рф. У order есть поле site, которое является сущностью магазина. У магазина есть поле legalEntity, которое обозначает официальное название магазина.

Валюта: наименование, код {{ defaultCurrency }} - в результате получится Валюта: наименование, код Российский рубль. Текущая валюта отображается в системных настройках.

<table border="0" cellspacing="0" cellpadding="2" width="100%" class="order">
{% for op in order.availableOrderProducts %}

    <tr valign="top">

   ...

        <td>
            {{ op.summ }}
        </td>

        ...

    </tr>
{% endfor %}
</table>

Выше показан стандартный способ построения таблицы, при котором в цикле выводится список строк, каждая из которых в данном случае является одной позицией товара в заказе.

<table border="0" cellspacing="0" cellpadding="2" width="100%" class="order">
    <tr valign="top">
   ...
        <td>
            123,0
        </td>
        ...
    </tr>
    <tr valign="top">
        ...
        <td>
            743,0
        </td>
        ...
    </tr>
    <tr valign="top">
        ...
        <td>
            8583,0
        </td>
        ...
    </tr>
    ...
</table>

{{ op.offer.product.manufacturer }} - из позиции заказа (op) достаем торговое предложение, которое было добавлено в заказ, потом получаем связанный товар, к которому относится торговое предложение и узнаем производителя товара.

В результате получим форму счета-фактуры следующего вида:

Пример счета-фактуры

Благодарим за отзыв.
Была ли статья полезна?
Нет
  • Рекомендации не помогли
  • Нет ответа на мой вопрос
  • Текст трудно понять
  • Не нравится описанный функционал
Да
Предыдущая статья
Основные настройки печатной формы
Печатная форма - файл, который генерируется из заказа или списка с подстановкой данных из заказа.
Следующая статья
Создание шаблона для списка заказов
Рассмотрим, как создать печатную форму для групповой печати.