Документы и Печать · 14 мин
Как заполнить макет печатной формы в 1С
Пошаговая инструкция по заполнению макета печатной формы в 1С: работа с табличным документом, параметры, области, заполнение данными из кода и типичные ошибки.
Макет печатной формы в 1С — это шаблон, на основе которого платформа строит итоговый документ для печати или выгрузки: счёт, акт, накладную, доверенность. Макет хранится в конфигурации (или подключается как внешняя печатная форма) и содержит статичный текст, оформление ячеек и именованные параметры, которые программа заменяет реальными данными документа.
Заполнение макета происходит в два этапа: сначала разработчик или администратор готовит сам шаблон — размечает области и прописывает параметры в фигурных скобках, затем код на встроенном языке выводит области в табличный документ и подставляет значения. Ошибка на любом из этапов приводит к пустым полям, «битой» вёрстке или сообщению «Параметр не найден».
Ниже разобран полный цикл работы: от создания макета до проверки готовой печатной формы, с примерами кода и разбором типичных проблем.
Что такое макет печатной формы и где он хранится
Макет — это объект конфигурации (или часть внешней обработки), который описывает внешний вид печатной формы. Для печатных форм документов чаще всего используется тип макета «Табличный документ»: он похож на лист Excel с ячейками, объединениями, рамками и шрифтами. Реже применяются макеты типа «Текстовый документ», «HTML-документ» и «Схема компоновки данных» — последний нужен для отчётов, а не для типовых печатных форм.
Макет может храниться в нескольких местах. В типовых конфигурациях это общие макеты (ветка «Общие → Макеты» в дереве конфигурации), макеты конкретного объекта (например, у документа «РеализацияТоваровУслуг») или макеты внутри внешней печатной формы, подключённой через механизм «Дополнительные отчеты и обработки». От места хранения зависит способ получения макета в коде: ПолучитьМакет("ИмяМакета") вызывается у менеджера объекта или обработки, а для общих макетов — через ПолучитьОбщийМакет().
Перед изменением макета типовой конфигурации убедитесь, что объект доступен для редактирования. Если конфигурация на поддержке, прямое изменение макета приведёт к снятию объекта с полной поддержки и усложнит обновления. Безопасная альтернатива — внешняя печатная форма или расширение конфигурации.
Создание макета и разметка областей
Откройте конфигуратор, найдите нужный объект (или ветку «Общие → Макеты») и добавьте макет типа «Табличный документ». Заполните ячейки статичным содержимым: заголовки, названия колонок, подписи, реквизиты организации, которые не меняются. Оформите границы, шрифты и выравнивание — всё это сохранится в итоговой печатной форме.
Далее макет нужно разбить на именованные области — фрагменты, которые код сможет выводить по отдельности. Типовой набор областей для счёта или акта: «Шапка» (заголовок и реквизиты сторон), «Строка» (одна позиция табличной части, выводится в цикле), «Подвал» (итоги и подписи). Область создаётся выделением строк и назначением имени через меню «Таблица → Имена → Назначить имя» или через свойства области.
Области бывают горизонтальные (строки — самый частый случай) и вертикальные (колонки, для кросс-таблиц). Для печатных форм документов почти всегда достаточно горизонтальных областей. Следите, чтобы область включала целые строки: если выделить часть строки, вывод области может «разорвать» вёрстку.
- 1Откройте конфигуратор и добавьте макет типа «Табличный документ» у нужного объекта или в общих макетах
- 2Заполните статичный текст и оформление: заголовки, рамки, шрифты
- 3Выделите строки шапки и назначьте область «Шапка»
- 4Аналогично создайте области «Строка» и «Подвал»
- 5В ячейках, куда подставляются данные, впишите параметры в фигурных скобках
- 6Сохраните макет и обновите конфигурацию базы данных
Разметка параметров и шаблонов в ячейках
Параметр — это место в ячейке, куда код подставит значение. Параметр записывается в тексте ячейки в фигурных скобках: {НомерДокумента}, {Контрагент}. Чтобы ячейка воспринималась как параметр, у неё в свойствах должно быть установлено значение «Заполнение» = «Параметр». Если оставить «Текст», фигурные скобки выведутся на печать как обычные символы.
Если в одной ячейке нужно вывести и текст, и данные — например, «Счёт № 145 от 12.03.2026», — используйте тип заполнения «Шаблон». В шаблоне статичный текст пишется как есть, а подставляемые фрагменты заключаются в квадратные скобки: Счёт № [Номер] от [Дата]. Значения шаблона заполняются в коде через те же Параметры области: ОбластьШапка.Параметры.Номер = НомерДокумента;.
Важно помнить: имена параметров в макете и в коде должны совпадать с точностью до символа, включая регистр. Параметр {НомерДок} не заполнится, если в коде вы обратитесь к Параметры.НомерДокумента. Платформа в этом случае либо выдаст ошибку «Параметр не найден», либо оставит ячейку пустой — поведение зависит от того, обращаетесь вы к несуществующему параметру или просто не заполнили существующий.
Заполнение макета данными из кода
Заполнение выполняется в модуле менеджера объекта, в модуле внешней обработки или в общем модуле печати. Общая схема: получить макет, получить область, заполнить её параметры, вывести область в результирующий табличный документ. Для табличной части документа область «Строка» выводится в цикле по каждой позиции.
Функция СформироватьПечатнуюФорму(СсылкаНаДокумент) Экспорт
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("МакетСчет");
// Шапка
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = СсылкаНаДокумент.Номер;
ОбластьШапка.Параметры.ДатаДокумента = Формат(СсылкаНаДокумент.Дата, "ДЛФ=D");
ОбластьШапка.Параметры.Контрагент = СсылкаНаДокумент.Контрагент;
ТабДок.Вывести(ОбластьШапка);
// Строки табличной части
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрокаТовара Из СсылкаНаДокумент.Товары Цикл
ОбластьСтрока.Параметры.Номенклатура = СтрокаТовара.Номенклатура;
ОбластьСтрока.Параметры.Количество = СтрокаТовара.Количество;
ОбластьСтрока.Параметры.Цена = СтрокаТовара.Цена;
ОбластьСтрока.Параметры.Сумма = СтрокаТовара.Сумма;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Возврат ТабДок;
КонецФункции
Обратите внимание на типы данных. В параметры ячеек лучше передавать строки и числа, а не ссылки: ссылка выведется как представление объекта, что не всегда соответствует нужному формату. Даты форматируйте явно через Формат(), суммы при необходимости — через Формат(Сумма, "ЧДЦ=2"). Если значение может быть пустым, заранее решите, что выводить: пустую строку, прочерк или слово «не указано».
Для сложных форм с запросами (например, когда данные берутся не только из документа, но и из регистров) удобнее сначала выполнить запрос с обходом по группировкам, а затем в цикле по выборке заполнять области. Так код печати отделяется от логики получения данных, и его проще отлаживать.
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьПодвал.Параметры.ИтогоСумма = Формат(ИтогСумма, "ЧДЦ=2");
ОбластьПодвал.Параметры.СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(ИтогСумма, Валюта);
ТабДок.Вывести(ОбластьПодвал);Особенности внешних печатных форм
Внешняя печатная форма — это файл обработки (.epf), который подключается к базе без изменения конфигурации. В нём макет хранится внутри самой обработки и получается вызовом ЭтотОбъект.ПолучитьМакет("ИмяМакета"). Обработка должна экспортировать функцию Печать() или реализовывать интерфейс подсистемы «Дополнительные отчеты и обработки» — в зависимости от версии БСП в вашей конфигурации.
Порядок заполнения макета во внешней форме тот же: области, параметры, цикл по табличной части. Отличия касаются регистрации: в функции СведенияОВнешнейОбработке() указывается, к каким объектам привязана форма и какая команда выводится пользователю. Если печатная форма не появляется в меню «Печать» документа, чаще всего причина в неверно указанном назначении обработки или в том, что форма не опубликована для нужного типа объекта.
Где размещать печатную форму
Подходит для собственных доработок при снятой поддержке или самописной конфигурации. Ограничение: изменения затрагивают всех пользователей и усложняют обновление типовых решений.
Оптимально для типовых конфигураций на поддержке: подключается без изменения конфигурации, легко откатывается. Ограничение: требует подсистемы дополнительных отчетов и обработок.
Удобно, когда нужно изменить типовой макет и логику печати, сохранив поддержку. Ограничение: требует аккуратности при обновлении релизов — типовая форма может измениться.
Проверка результата и отладка
После заполнения макета проверьте форму на реальных документах, а не только на «идеальном» примере. Откройте печать документа с полностью заполненными реквизитами, затем — с частично пустыми (без договора, без адреса, с нулевым количеством строк). Именно на таких данных всплывают пустые ячейки, сдвинутые итоги и ошибки форматирования.
Проверяйте не только содержимое, но и вёрстку: не разрывается ли таблица на страницах посередине строки, не обрезается ли длинное наименование, корректно ли выводится сумма прописью. Для контроля разрывов страниц используйте метод ПроверитьВывод() перед выводом области подвала — он позволяет перенести подписи на новую страницу целиком, а не по одной строке.
Как проверить результат
Во всех полях реальные данные документа, фигурных скобок нет
Видны {ИмяПараметра} или пустые ячейки там, где данные есть
Количество строк на печати совпадает с документом, итоги сходятся
Строки пропущены, продублированы или итог не совпадает с суммой строк
Подписи и итоги не оторваны от таблицы, шапка таблицы повторяется на новой странице
Подпись «Директор» уехала на отдельный лист, таблица обрезана
Не заполненные поля выводятся как прочерк или пустая строка без ошибок
При пустом реквизите форма не открывается или выводит «Объект не найден»
Частые проблемы и способы их решения
Ошибка «Параметр не найден» возникает, когда код обращается к параметру, которого нет в области макета. Проверьте имя параметра в ячейке и в коде, а также убедитесь, что ячейка входит в выводимую область. Обратная ситуация — параметр в макете есть, но в коде не заполняется: тогда на печати останется пустое место, что не всегда заметно сразу.
Если форма выводится с «лишними» пустыми строками или разрывами, проверьте границы областей: часто в область случайно включена лишняя пустая строка. Если длинный текст в ячейке обрезается, включите для ячейки свойство «АвтоВысота» / размещение текста с переносом и убедитесь, что высота строки не зафиксирована жёстко.
Отдельный класс проблем — права и режим работы. Если печатная форма формируется у одного пользователя и не формируется у другого, проверьте права на чтение данных, которые подставляются в макет (например, на регистр сведений с адресами контрагентов), а также доступность внешней обработки в списке дополнительных отчетов и обработок.
Ограничения и когда нужен специалист
Самостоятельное заполнение макета оправдано для несложных форм: добавить поле, изменить подпись, вывести дополнительный реквизит. Для этого достаточно базовых навыков конфигуратора и понимания структуры документа. Работайте в копии базы и тестируйте на нескольких документах перед переносом в рабочую среду.
Привлекайте разработчика, если требуется многостраничная форма со сложной логикой (группировки, итоги по группам, кросс-таблицы), интеграция с механизмами БСП, условное оформление по данным или печать штрихкодов и QR-кодов. Ошибки в таких формах влияют на юридически значимые документы — счета, акты, УПД, — и цена ошибки выше стоимости доработки.
Что важно запомнить
Заполнение макета печатной формы строится на трёх шагах: разметка областей и параметров в табличном макете, вывод областей с подстановкой значений в коде, проверка на реальных и «неудобных» документах. Имена параметров в макете и коде должны совпадать, тип заполнения ячейки — соответствовать задаче, а изменения типовой конфигурации безопаснее делать через внешние печатные формы.
Частые вопросы
Почему на печати видны фигурные скобки {ИмяПараметра} вместо значения?
У ячейки в макете установлен тип заполнения «Текст», поэтому платформа воспринимает скобки как обычные символы. Откройте свойства ячейки в конфигураторе и смените заполнение на «Параметр», а если в ячейке смешанный текст — на «Шаблон» с квадратными скобками вокруг имён параметров.
Как вывести в макете сумму прописью?
Сумма прописью формируется в коде, а не в макете: в параметр ячейки передаётся уже готовая строка. В типовых конфигурациях для этого есть функции общих модулей (например, формирование суммы прописью с учётом валюты). В самописной конфигурации функцию придётся написать или позаимствовать, затем вызвать её при заполнении параметра подвала.
Можно ли заполнить макет без изменения конфигурации?
Да, через внешнюю печатную форму — файл обработки с макетом внутри, который подключается в разделе «Дополнительные отчеты и обработки». Конфигурация остаётся на поддержке, а форму можно обновлять и отключать независимо от релизов. Потребуется, чтобы в конфигурации была подсистема дополнительных обработок (в типовых решениях она есть).
Что делать, если строка табличной части выводится с данными предыдущей строки?
Это признак того, что область «Строка» используется в цикле повторно, но часть параметров не заполняется на очередной итерации — платформа оставляет ранее присвоенные значения. Заполняйте все параметры области в каждом проходе цикла, а если значение может отсутствовать, присваивайте пустую строку явно.
Как сделать, чтобы шапка таблицы повторялась на каждой странице?
Используйте свойство результирующего табличного документа «ПовторятьПриПечатиСтроки» (или настройку сквозных строк) после вывода шапки таблицы. Укажите диапазон строк заголовка, и платформа будет автоматически дублировать его в начале каждой новой страницы при печати.
Почему внешняя печатная форма не появляется в меню «Печать» документа?
Чаще всего причина в регистрационных данных обработки: в сведениях о внешней обработке не указано назначение (тип документа), команда печати не добавлена или обработка не включена для нужного раздела. Проверьте карточку дополнительной обработки в базе и перечень объектов назначения в её настройках.