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