Документация Формулы
Разделы документации

Руководство

Обзор руководства

Бизнес-процессы и задачи

Бизнес-процессы и задачи

КОНСТРУКТОР

Печатные формы

Печатная форма — это шаблон документа на печать: счёт, накладная, акт, этикетка, прайс-лист. Шаблон описывается на HTML с подстановками (${...}), поэтому печатную форму можно оформить практически как угодно.

Печатные формы есть у справочников и документов. В мастере создания объекта шаг «Печатные формы» обязателен: без хотя бы одной формы объект создать нельзя (мастер скажет «Добавьте хотя бы одну печатную форму»).

# Открыть редактор

ПутьКогда
Конструктор → объект → кнопка Печатные формыВ любой момент
Мастер создания объекта → шаг Печатные формыПри создании объекта
В рабочем интерфейсе: карточка записи → ПечатьЧтобы напечатать конкретную запись

# Экран редактора

┌───────────────────────┬──────────────────────────────────────────────────────┐
│ [Поиск форм...]       │ [HTML] [JS Код] [CSS] [Описание] [Просмотр]         │
│ [+ Новая форма]       │ ┌──────────────────────────────────────────────────┐ │
│ ─────────────────     │ │ <html>                                           │ │
│ 📄 Счёт на оплату  1/2│ │   <body>                                         │ │
│ 📄 Товарная накладная │ │     <h1>Счёт № ${Номер}</h1>                     │ │
│                       │ │     ...                                          │ │
│                       │ └──────────────────────────────────────────────────┘ │
│                       ├──────────────────────────────────────────────────────┤
│                       │ Название: [Счёт на оплату] Формат:[A4] Ориент.:[Книжная]│
└───────────────────────┴──────────────────────────────────────────────────────┘

# Левая панель

ЭлементЧто делает
Поиск форм...Отбор по названию формы
Новая формаСоздаёт форму с именем «Новая форма»
Список формСлева — иконка, название и позиция вида 1/2 (номер формы из общего числа)
Меню формы (⋮)Дублировать — копия с именем <имя>_Копия; Удалить — с подтверждением
Нет печатных форм / Ничего не найденоПустые состояния списка

Меню ⋮ появляется при наведении на форму.

# Вкладки редактора

ВкладкаЧто редактируется
HTMLОсновной шаблон печатной формы — HTML с плейсхолдерами ${...}
JS КодJavaScript, который готовит дополнительные данные перед подстановкой
CSSСтили; вставляются в <head> формы
ОписаниеТекстовое описание назначения формы (подсказка «Опишите назначение печатной формы…»)
ПросмотрПредпросмотр в iframe. Если шаблон пуст — «Шаблон пуст. Напишите HTML в редакторе.»

# Нижняя панель

НастройкаЗначения
НазваниеИмя формы; именно оно появляется в меню Печать у пользователя
ФорматA4, A3, Letter, Legal
ОриентацияКнижная, Альбомная

# Если форма не выбрана

Показывается экран: «Выберите форму для редактирования или создайте новую.» с кнопкой Создать первую форму.

# Удаление

Диалог «Удаление печатной формы»: «Вы уверены, что хотите удалить эту печатную форму? Это действие нельзя отменить.» — кнопки Отмена и Удалить.

# Синтаксис шаблона

# Подстановка значений — ${...}

ПримерЧто подставится
${Номер}Значение реквизита шапки
${Контрагент.Наименование}Поле связанного объекта (через точку)
${Товары.Цена}Поле текущей строки табличной части (внутри цикла)
${bankInfo.БИК}Значение, которое вернул JS-код

Правила:

  • Путь идёт только по точкам. Записи вида ${stockByProduct[id]} не поддерживаются.
  • Пустое значение (null, undefined, объект) выводится как пустая строка.
  • ISO-дата со временем автоматически форматируется по-русски: 29.05.2026, 12:00:00.
  • Вычислений внутри ${...} нет: ${formatNumber(...)}, ${Цена + 1} и подобное выведут пустую строку. Всё сложное делайте в JS-коде.

# Условные блоки — data-if

html
<template data-if="Комментарий">
  <p>Комментарий: ${Комментарий}</p>
</template>

<template data-if="!Комментарий">
  <p>Комментарий не заполнен</p>
</template>

Поддерживаются:

ФормаКогда блок показывается
data-if="Поле"Значение непустое (не пустая строка, не 0, не false)
data-if="!Поле"Значение пустое
data-if="Поле === 'значение'"Равно строке (кавычки — строка)
data-if="Поле !== 100"Не равно числу (без кавычек — число)

Чего нет: &&, ||, >, <, >=, <=, арифметика. Такой блок просто исчезнет. Сложные условия вычисляйте в JS-коде и проверяйте флаг:

html
<template data-if="isUrgent">
  <p>Срочный платёж</p>
</template>
javascript
// JS Код
const isUrgent = objectData.Сумма > 1000 && objectData.Статус === 'Оплачен';
return { isUrgent };

# Циклы по табличным частям — data-forEach

html
<table>
  <thead><tr><th>№</th><th>Товар</th><th>Кол-во</th><th>Цена</th><th>Сумма</th></tr></thead>
  <tbody>
    <template data-forEach="Товары">
      <tr>
        <td>${Товары.№}</td>
        <td>${Товары.Номенклатура.Наименование}</td>
        <td>${Товары.Количество}</td>
        <td>${Товары.ЦенаФорм}</td>
        <td>${Товары.СуммаФорм}</td>
      </tr>
    </template>
  </tbody>
</table>
ПравилоЧто важно знать
data-forEach принимает только имя табличной части объектаНельзя перебирать произвольные массивы
Пустая табличная частьБлок удаляется целиком — строите заголовок таблицы вне <template>
Внутри цикла доступны и строки, и поля шапки${Номер} работает и внутри цикла
Специальных переменных строки нет${Товары._index} и подобное не существуют
Нумерация и форматированиеДелайте в JS-коде и возвращайте новые поля, как ${Товары.№} выше

# JS-код: подготовка данных

JS-код (jsCode) выполняется перед подстановкой. Всё, что он вернёт через return { ... }, дополняет данные объекта и становится доступно в шаблоне.

javascript
// JS Код
const rows = (objectData.Товары || []).map((r, i) => ({
  ...r,
  №: i + 1,
  ЦенаФорм: (r.Цена || 0).toLocaleString('ru-RU', { minimumFractionDigits: 2, maximumFractionDigits: 2 }),
  СуммаФорм: ((r.Количество || 0) * (r.Цена || 0)).toLocaleString('ru-RU', { minimumFractionDigits: 2 }),
}));
return { Товары: rows };

Внутри JS-кода доступны objectData (данные записи) и formApi — с его помощью можно читать данные из системы. Часто используемые приёмы:

ЗадачаКак
Нумерация строкВернуть массив строк с полем №
Форматирование чисел и датtoLocaleString('ru-RU', …) в JS, подстановка готовой строки
Сумма прописью, QR/штрих-кодыВычислить в JS-коде и вернуть готовую строку/HTML
Собственный список строкСобрать готовые <tr>...</tr> в одну строку и подставить ${ordersHtml}
Флаги для data-ifreturn { isUrgent, isBig }

Устаревшее поле выбора данных из старых версий больше не используется — всю подготовку данных делайте в JS-коде.

# CSS

Стили из вкладки CSS вставляются в <head>. Советы для печати:

СоветЗачем
Используйте mm, cm, pt, а не pxТочное положение на листе
page-break-inside: avoid для <tr>Строка не разорвётся между страницами
page-break-before: alwaysНачать с новой страницы
@media print { .no-print { display: none } }Скрыть лишнее при печати
Задавайте конкретные шрифтыОдинаковый вид на разных компьютерах

# Печать и экспорт

В карточке записи кнопка Печать открывает список печатных форм. В окне предпросмотра доступны:

КнопкаЧто делает
ПечатьОтправляет форму на принтер
ЭкспортСохраняет форму в файл
НастройкиОриентация, размер бумаги, поля

Форматы экспорта:

ФорматЧто получается
PDFМногостраничный PDF-файл
DOCXДокумент Word
XLSXТаблицы Excel (HTML-таблицы преобразуются в листы)
HTMLГотовый HTML-файл

Подробнее о печати и экспорте списков — Печать и экспорт.

# Частые ошибки

ОшибкаЧто произойдёт
Вычисления внутри ${...}Пустая строка
&&, >, < в data-ifБлок исчезает
Цикл по произвольному массивуНужно собирать HTML в JS-коде
Заголовок таблицы внутри data-forEachИсчезнет вместе с пустой табличной частью
Опечатка в имени поляПустая строка (ошибки не будет)

# Смотрите также