Печатные формы
Печатная форма — шаблон, по которому система собирает документ для печати: товарную накладную, счёт, кассовый ордер, акт инвентаризации. В разделе Шаблоны документов хранятся все шаблоны: печатные формы документов, ценники, письма клиентам и информационные страницы интернет-витрины. Здесь их можно поправить под свою компанию или добавить новые.
Как это работает
- Шаблон Шаблон — это страница с оформлением и местами для подстановки данных:
{{docnum}},{{organisation_name}}. - Тип У каждого шаблона есть тип: к какому документу или задаче он относится.
- Печать В документе кнопка «Печать» показывает все шаблоны его типа. Система подставляет в выбранный шаблон данные документа и открывает готовую страницу для печати.
Добавили шаблон типа «Печатная форма :: Заказ покупателя» — он появился в меню «Печать» каждого заказа.
Типы шаблонов
| Печатная форма :: Поступление | Товарная накладная, счёт-фактура, акт о расхождении, акт приёма на реализацию |
| Печатная форма :: Возврат | Накладная и счёт-фактура возврата поставщику |
| Печатная форма :: Перемещение, Товарная накладная | Накладные на перемещение между точками продаж |
| Печатная форма :: Списание | Акты по списанию товаров |
| Печатная форма :: Инвентаризация | Приказ, ИНВ-3, ИНВ-19 |
| Печатная форма :: Отгрузка со склада | УПД, счёт по отгрузке |
| Печатная форма :: Заказ покупателя | Счёт по заказу, бланк заказа |
| Печатная форма :: Заказ поставщику | Формы заказа поставщику |
| Печатная форма :: Установка розничных цен | Формы документа установки цен |
| Печатная форма :: Движение денег по главной кассе | Приходный и расходный кассовые ордера |
| Печатная форма :: Инкассация главной кассы | Препроводительная ведомость |
| Печатная форма :: Главная касса, Кассовая книга | Акт инвентаризации наличных, кассовая книга |
| Печатная форма :: Z-отчет | КМ-3, КМ-6 и другие формы по закрытой смене |
| Печатная форма :: Кассовая форма | Формы, которые печатаются с кассы: товарный чек |
| Ценники | Шаблоны ценников и этикеток — см. Ценники |
| Письма клиентам: приглашения, поздравления, триггерные рассылки — см. Рассылки клиентам | |
| Интернет-витрина :: Информация | Страницы витрины и мобильного приложения: доставка, оплата, оферта, соглашения |
Список шаблонов
Откройте Администрирование → Настройки системы, вкладку Прочее и нажмите Настройка печатных форм.

| Тип | К чему относится шаблон |
| Название | Под этим названием шаблон виден в меню «Печать» документа |
| Системное имя | Служебное имя шаблона |
| Тема | Тема письма — для шаблонов типа «EMail» |
Под заголовками колонок — фильтры: введите часть значения и нажмите Enter. Например, запрос «Заказ» в фильтре Тип оставит шаблоны заказов. Значок карандаша в строке открывает шаблон для изменения, значок корзины — удаляет его.
Как изменить шаблон
- Найдите шаблон в списке и нажмите на значок карандаша.
- Измените текст и оформление в редакторе — он работает как текстовый редактор: шрифты, таблицы, выравнивание.

- Не трогайте места подстановки в двойных фигурных скобках, если не хотите убрать эти данные из документа.
- Нажмите «Сохранить» над редактором.
- Откройте любой документ этого типа, нажмите «Печать» и проверьте результат.
Совет. Прежде чем менять стандартный шаблон, сделайте его копию: создайте новый шаблон того же типа и перенесите в него содержимое через кнопку «Источник». Если правка не удастся, останется рабочий вариант.
Кнопка «Источник» в редакторе показывает шаблон в виде HTML-кода. Сложные формы — со множеством таблиц и точным расположением полей — надёжнее править в этом режиме, см. Как править HTML-код шаблона. Какие конструкции можно использовать и где брать имена полей — в разделах Синтаксис шаблона и Переменные по типам документов.
Как добавить шаблон
- Нажмите «Добавить» над списком.
- Заполните Название — под ним шаблон появится в меню «Печать».
- Выберите Тип. После сохранения тип не меняется.
- Для шаблона письма заполните Тему.
- Составьте шаблон в редакторе и нажмите «Сохранить».
Где какой синтаксис работает
Шаблоны разных типов собираются по-разному, поэтому и возможности у них разные.
| Печатные формы документов | Полный синтаксис: подстановка, циклы, условия, форматирование чисел, штрихкоды — см. Синтаксис шаблона |
| Печатная форма :: Кассовая форма | Подстановка, циклы {{#each}} и условия {{#if}}, {{#unless}}. Форматирование чисел, сравнение и штрихкоды недоступны |
Только подстановка значений: {{first_name}}. Циклы и условия не работают — конструкция останется в письме как текст |
|
| Ценники | Свой набор полей — см. Ценники |
| Интернет-витрина :: Информация | Обычная страница, подстановок нет |
Синтаксис шаблона
Шаблон — это HTML-страница, в которую вставлены конструкции в двойных фигурных скобках. При печати система заменяет их данными документа. Используется шаблонизатор Handlebars.
Значения
{{docnum}} | Значение поля документа |
{{supplier.name}} | Поле вложенной записи — через точку: название поставщика, ИНН юридического лица |
{{orders_item.0.name}} | Поле конкретной строки документа. Строки нумеруются с нуля |
{{orders_item.length}} | Количество строк |
{{{comment}}} | Значение без защиты: если в поле записан HTML-код, он сработает как разметка. В двойных скобках тот же код выводится как текст |
{{!-- примечание --}} | Комментарий: в документ не попадает |
Если поля с таким именем нет или оно не заполнено, на его месте будет пусто — ошибки не возникнет.
Циклы
Цикл повторяет фрагмент для каждой строки документа — так строится таблица товаров.
<table> <tbody> {{#each orders_item}} <tr> <td>{{index}}</td> <td>{{name}}</td> <td>{{quantity}} {{okei_name}}</td> <td>{{price}}</td> <td>{{amount}}</td> </tr> {{else}} <tr><td colspan="5">В заказе нет товаров</td></tr> {{/each}} </tbody> </table>
{{#each строки}} … {{/each}} | Повторяет фрагмент для каждой строки. Внутри цикла имена полей относятся к строке: {{name}} — название товара в строке |
{{else}} внутри цикла | Что вывести, если строк нет |
{{index}} | Номер строки с единицы — готовое поле в строках документов |
{{@index}} | Номер строки с нуля — считает сам шаблонизатор |
{{#if @first}}, {{#if @last}} | Первая и последняя строка: удобно для разделителей и итогов |
{{../docnum}} | Поле документа изнутри цикла: ../ поднимает на уровень выше |
{{#each_with_sort orders_item "name"}} … {{/each_with_sort}} | Тот же цикл, но строки отсортированы по указанному полю по возрастанию. Порядок сохраняется и для циклов ниже по шаблону |
{{#times 10}} … {{/times}} | Повторяет фрагмент заданное число раз — так добавляют пустые строки в бланк. {{this}} внутри — счётчик с нуля |
В поступлении, возврате поставщику, перемещении и заказе поставщику порядок строк можно менять прямо на странице печати: над документом есть ссылка Сортировка: Товар.
Условия
{{#if shipping_address}} … {{/if}} | Выводит фрагмент, если поле заполнено. Пустая строка, ноль и пустой список считаются незаполненными |
{{#if paid}} … {{else}} … {{/if}} | Два варианта: для заполненного и пустого поля |
{{#unless customer_name}} … {{/unless}} | Наоборот: выводит фрагмент, если поле пустое |
{{#ifeq is_paid "Да"}} … {{else}} … {{/ifeq}} | Сравнение: выводит фрагмент, если значение поля равно указанному. То же делает {{#if_eq}} |
{{#with supplier}} {{name}}, ИНН {{inn}} {{/with}} | Переходит внутрь вложенной записи, чтобы не повторять её имя |
Пример: строка с адресом доставки печатается, только если адрес указан.
{{#if shipping_address}}
<p>Адрес доставки: {{shipping_address}}</p>
{{/if}}
Числа и текст
{{toFixed cogs 2}} | Число с заданным количеством знаков после запятой: 760 → 760.00. Без второго значения — округление до целого |
{{removeZeros count}} | Убирает лишние нули: 2.000 → 2, 1.500 → 1.5 |
{{concat docnum " от " docdate_readable}} | Склеивает несколько значений и текст в одну строку |
Шаблон не умеет считать: сложить, умножить или сравнить «больше — меньше» в нём нельзя. Всё нужное уже посчитано в данных документа: суммы и итоги, суммы прописью (поля с окончанием _text или Text), даты в привычном виде (docdate_readable), дата по частям для бланков (docdate_parts.d, docdate_parts.mText, docdate_parts.Y).
Штрихкод
{{> barcode data=docnum}}
{{> barcode data=docnum type="qrcode"}}
{{> barcode data="4600000010526" type="ean13" includeText="true"}}
data | Что закодировать: имя поля или текст в кавычках |
type | Вид кода: code128 (по умолчанию), ean13, qrcode |
includeText | "true" — подписать значение под штрихкодом |
scale, width, rotate | Масштаб, ширина и поворот изображения |
Подсказка. Изображение штрихкода строит внешний сервис quickchart.io: при печати компьютеру нужен доступ в интернет, а закодированное значение передаётся этому сервису. Не кодируйте так персональные данные.
Переменные по типам документов
Где смотреть имена полей
Откройте шаблон на изменение и раскройте под редактором блок «Показать структуру данных документа для автоподстановки». В нём показаны все поля на примере одного из существующих документов этого типа.

[docnum] => 1052 | Поле документа. В шаблоне: {{docnum}} |
[organisation] => Array и поля с отступом ниже | Вложенная запись. В шаблоне — через точку: {{organisation.inn}} |
[orders_item] => Array, внутри [0] => Array | Строки документа. В шаблоне — цикл {{#each orders_item}}, внутри него поля строки: {{name}} |
В примере показана только первая строка документа — этого достаточно, чтобы узнать имена полей. Если документов этого типа ещё нет, блок пуст: создайте хотя бы один документ.
Внимание. У кассовых форм блока нет — их поля перечислены ниже. Для писем блок показывает готовый список переменных.
Общие поля
В печатных формах документов доступны все поля самого документа и общие поля:
currency_symbol, currency_sub_symbol | Обозначение валюты и её дробной части |
user_full_name, user_short_name | Ф.И.О. сотрудника, который печатает документ, — полностью и с инициалами. Есть в поступлении, возврате, перемещении, отгрузке и заказе поставщику |
attribute1 … attribute15 | Пользовательские поля документа. Какое поле под каким номером, видно по значениям в блоке структуры данных |
warehouse.name, warehouse.address, warehouse.phone | Точка продаж документа |
warehouse.organisation.name, .legal_name, .inn, .kpp, .ogrn, .okpo, .address | Юридическое лицо точки продаж |
supplier.name, .legal_name, .inn, .kpp, .address, .phone, .bank_name, .BIK, .bankaccount, .corraccount | Поставщик или контрагент и его банковские реквизиты |
item.name, item.print_name, item.article, item.unit, item.barcodes, item.manufacturer.name | Товар строки — внутри цикла по строкам |
Документы
Имена полей со строками и основных итогов. Полный список для типа — в блоке структуры данных.
| Тип | Строки | Поля строки | Итоги и даты |
|---|---|---|---|
| Поступление | inflow_items | quantity, cogs, cogsum, vat_rate, vat_sum, sum_minus_vat, price_minus_vat, retail_price, retail_sum, lot_number, expir_date, item.* | waybill, docdate_readable, accept_date_readable, docdate_parts, inflow_sum.*, inflow_items_count, inflow_items_count_text, consignee.*; расхождения — difference_report |
| Возврат | returns_items | quantity, cogs, cogsum, vat_rate, vat_sum, sum_minus_vat, lot_number, item.* | amount, docdate_readable, returns_sum.*, returns_items_count_text, consignee.* |
| Перемещение, Товарная накладная | movegood_items | count, cogs, amount, src_retail_price, dst_retail_price, vat_rate, vat_sum, lot_number, expir_date, item.* | amount, amountText, retail_amount, retailAmountText, totalCount, item_count, item_count_text, docdate_readable, docdate_parts, source.*, destination.* |
| Списание | writeoff_item | quantity, cogs, cogsum, retail_price, lot_number, formatted_expir_date, item.* | amount, amountText, quantity, formatted_date, reason_readable |
| Инвентаризация | pages → inventory_items | quantity_initial, quantity, cogs, item_sum, item_fact_sum, item.* | docnum, formatted_date, sum, fact_sum, quantity_sum, fact_quantity_sum, fact_sum_str; расхождения — pages_diff |
| Отгрузка со склада | shipment_items | index, name, article, okei_code, okei_name, quantity, price_without_vat, amount_without_vat, vat_rate, vat_amount, amount_with_vat, kiz_codes | docnum, docdate_readable, total_amount_without_vat, total_vat_amount, total_amount_with_vat, total_amount_with_vat_text, shipment_items_count, shipment_items_count_text |
| Заказ покупателя | orders_item | index, name, article, okei_name, quantity, price, discount_formatted, amount, item.* | docnum, docdate_readable, total_amount, total_amount_text, order_discount, shipping_cost_formatted, total_amount_final, total_amount_final_text, orders_item_count |
| Заказ поставщику | purchase_order_items | index, quantity, price, amount, item.* | docnum, docdate_readable, expected_date, docdate_parts, total_quantity, total_amount, total_amount_text, items_count, items_count_text |
| Установка розничных цен | lines | price_old, price_new, price2_old, price2_new, item.* | docNum, dateDay, dateMonth, dateYear, pricelist.* |
| Движение денег по главной кассе | — | — | doc_num, doc_date, doc_date_data.*, amount, amount_data.*, typeName, subtypeName, responsibleUser.fioName, cash_before_data.*, cash_after_data.* |
| Главная касса | — | — | cash, doc_date, doc_date_data.day, .month_string, .year, cash_data.whole_part, .fraction_part, .string_format |
| Кассовая книга | pages → items | index, title, in_amount, out_amount, account | doc_date, doc_date_data.*, organisation.*; у страницы — page_number |
| Инкассация главной кассы | note_set | den, count, sum | transaction.* — данные движения денег |
| Z-отчет | returnReceipts | поля чека возврата | doc_num, date, time, amountCash, amountCard, amountSbp, amountReturn, totalIncome, totalIncomeText, terminal.*, openUser.fioName, closeUser.fioName |
Суммы с набором вариантов записи (amount_data, cash_before_data, cash_data) раскрываются через точку: .money_format — число с копейками, .string_format — прописью, .whole_part и .fraction_part — целая и дробная части отдельно.
Подсказка. В заказе покупателя и отгрузке со склада реквизиты продавца вынесены в отдельные поля: organisation_name, organisation.inn, organisation.kpp, organisation_bank_name, organisation_bik, organisation_account, organisation_corr_account. Банк берётся из первого банковского счёта юридического лица. Покупатель в заказе — customer_name, customer_contact, customer.*; в отгрузке — supplier_name и supplier.*.
В перемещении себестоимость (cogs, amount) видит только сотрудник с правом console.movegoods.showcostprice. Остальным в эти поля подставляется розничная цена.
Кассовые формы
Кассовые формы печатает касса, данные берутся из открытого чека или смены. Касса находит шаблон по системному имени, поэтому меняйте существующие шаблоны «Товарный чек», «КМ-3» и «КМ-6»: новый шаблон этого типа касса печатать не будет.
company.name, .inn, .kpp, .ogrn, .okpo | Юридическое лицо |
company.warehouseName, .address, .phone, .warehouse_time_open, .warehouse_time_close | Точка продаж и часы работы |
user.shortFio, user.shortName, user.lastName, .firstName, .middleName | Кассир |
number, date, time | Номер, дата и время чека — товарный чек |
amount, amount_text | Сумма чека со скидками — числом и прописью |
customer_fname, customer_lname, customer_phone | Покупатель |
items | Строки чека: index, name, quantity, price, discount, discount_name, amount, amount_original |
inCash, inCard, inBonus, moneyChange, net_amount, net_amount_text | Оплата: наличные, карта, баллы, сдача, сумма к оплате без баллов. Заполняются после оплаты чека |
shift.* | Данные смены в формах КМ-3 и КМ-6. Имена полей смотрите в стандартных шаблонах |
Письма
В шаблонах типа «EMail» — в тексте и в теме письма — работают эти переменные:
{{first_name}}, {{last_name}}, {{middle_name}} | Имя, фамилия и отчество клиента |
{{email}}, {{phone}} | Почта и телефон |
{{sales_amount}} | Сумма покупок клиента |
{{mobile_app_link}}, {{mobile_invite_code}} | Ссылка на мобильное приложение и код приглашения |
{{shop_name}} | Название сети из настроек системы |
Имя переменной пишите слитно со скобками, без пробелов: {{ first_name }} в письме не сработает.
Как править HTML-код шаблона
Редактор показывает шаблон в двух видах: как оформленную страницу и как HTML-код. Сложные формы — со множеством таблиц, циклами и условиями — правят в коде.
- Откройте шаблон на изменение и нажмите «Источник» — первую кнопку на панели редактора. Вместо страницы появится HTML-код.

- Внесите правки в код.
- Нажмите «Источник» ещё раз, чтобы вернуться к оформленной странице. Циклы и условия в ней показаны как текст в фигурных скобках — это нормально.
- Нажмите «Сохранить» над редактором.
- Откройте документ этого типа, нажмите «Печать», выберите шаблон и проверьте результат. Чтобы отправить документ на принтер, нажмите «Печатать» над ним.
Совет. Большой шаблон удобнее править во внешнем редакторе кода: скопируйте код из режима «Источник», измените и вставьте обратно целиком. Копию исходного кода сохраните в файл — так шаблон можно вернуть.
Что нужно знать о редакторе:
| Вставка кода | Вставляйте HTML-код только в режиме «Источник». В обычном режиме редактор вставит его как текст, и вместо таблицы в документе окажутся теги |
| Переформатирование | При переключении видов редактор выравнивает отступы и переносы строк по-своему. На документ это не влияет |
| Циклы в таблицах | {{#each}} и {{/each}} ставьте внутри <tbody>, вокруг строки <tr> целиком — как в примере выше |
| Парные конструкции | Каждой открывающей части нужна своя закрывающая: {{#if}} — {{/if}}, {{#each}} — {{/each}} |
| Перенос строки | Клавиша Enter в обычном режиме ставит перенос строки <br>, а не новый абзац |
Оформление задаётся обычными средствами HTML и CSS:
| Стили | Блок <style> … </style> в начале шаблона или атрибут style у тега. Давайте классам свои имена с общей приставкой, например schet-: стили шаблона действуют на всю страницу печати |
| Размер и поля страницы | @media print { @page { size: A4 portrait; margin: 10mm; } } внутри блока <style>. Для альбомной ориентации — A4 landscape |
| Размеры | Ширину формы и колонок задавайте в миллиметрах: width: 190mm |
| Разрыв страницы |
— всё, что ниже, печатается с новой страницы
|
| Масштаб | При печати документ уменьшается до 90 % |
Права доступа
console.htmltemplate.manage | Список шаблонов |
console.htmltemplate.view | Просмотр шаблона |
console.htmltemplate.create | Добавление шаблона |
console.htmltemplate.update | Изменение шаблона |
console.htmltemplate.delete | Удаление шаблона |
console.htmltemplate.print | Печать документа по шаблону. Нужно каждому, кто печатает документы |
console.htmltemplate.* | Полный доступ к разделу |
Ссылка на раздел находится на вкладке Прочее настроек системы — для неё нужно право console.config.etc.
Частые ошибки
| Ситуация | Причина | Что делать |
|---|---|---|
| В меню «Печать» документа нет нужной формы | Шаблон создан с другим типом или удалён | Проверьте Тип шаблона в списке; при необходимости создайте шаблон заново |
| В напечатанном документе пустые реквизиты | Не заполнены реквизиты юридического лица, банковский счёт или данные покупателя | Заполните справочники — см. Юридические лица |
| В документе пусто на месте значения | В имени поля опечатка, такого поля у документа нет или оно не заполнено | Сверьте имя с блоком «Показать структуру данных документа для автоподстановки» или с таблицей полей по типам |
| Таблица товаров пустая или выводит одну строку | Повреждена конструкция {{#each}} … {{/each}} или в ней неверное имя поля со строками | Откройте шаблон в режиме «Источник», проверьте имя и восстановите открывающую и закрывающую части |
| Блок «Показать структуру данных…» пуст | Документов такого типа ещё нет или это кассовая форма | Создайте документ этого типа или возьмите имена полей из раздела Переменные по типам документов |
В письме клиенту остался текст {{#if …}} | В шаблонах писем работает только подстановка значений | Уберите циклы и условия, оставьте переменные из списка |
| Вместо штрихкода пустое место или значок битой картинки | Нет доступа в интернет или значение не подходит для выбранного вида кода | Проверьте интернет на компьютере; для ean13 значение должно состоять из 12–13 цифр |
| Изменённый шаблон товарного чека не печатается на кассе | Создан новый шаблон, а касса печатает по стандартному | Внесите правки в существующий шаблон «Товарный чек» — см. Кассовые формы |
| После правки форма «поехала» | Редактор изменил разметку таблиц | Верните шаблон из копии и правьте в режиме «Источник» |
| Поле Тип недоступно | Тип задаётся при создании и не меняется | Создайте новый шаблон нужного типа |
| Кнопка «Печать» в документе не открывает форму | Нет права console.htmltemplate.print | Попросите администратора выдать право |