К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как создать макет в 1С 8.3

Как создать макет в 1С 8.3: табличный документ, области, параметры, заполнение из кода. Пошаговая инструкция, типичные ошибки и ответы на вопросы.

Макет в 1С 8.3 — это шаблон, по которому платформа формирует печатные формы, отчёты и табличные документы. Без макета невозможно вывести на печать счёт, акт, накладную или произвольный отчёт с заданным оформлением: программное формирование «с нуля» каждой строки документа требует в разы больше кода и плохо сопровождается.

Макеты хранятся в дереве конфигурации и бывают нескольких типов: табличный документ, схема компоновки данных, HTML-документ, текстовый документ, географическая схема и другие. Чаще всего под «создать макет» понимают именно макет типа «Табличный документ» с областями и параметрами — его разберём подробнее.

Работа ведётся в конфигураторе. Понадобятся права на изменение конфигурации (или возможность создать внешнюю печатную форму, если типовую конфигурацию менять нельзя). Никаких внешних инструментов не требуется — редактор макетов встроен в платформу.

Где в конфигураторе создаётся макет

Макет можно добавить в двух местах. Первое — общая ветка дерева конфигурации: «Общие» → «Макеты». Такие макеты доступны из любого модуля через ПолучитьОбщийМакет("ИмяМакета"). Второе место — ветка конкретного объекта, например «Документы» → «РеализацияТоваровУслуг» → «Макеты». Такой макет получают через менеджер объекта: Документы.РеализацияТоваровУслуг.ПолучитьМакет("Печать").

Практическое правило простое: если макет относится к печати конкретного документа или справочника — кладите его в объект. Если шаблон универсальный (например, общий бланк организации или макет для нескольких отчётов) — размещайте в общих макетах. Это упрощает поиск и уменьшает риск дублирования.

Чтобы добавить макет, щёлкните правой кнопкой по ветке «Макеты» и выберите «Добавить». Платформа предложит ввести имя и может запустить конструктор печати — его можно закрыть, если хотите настроить макет вручную.

Выбор типа макета

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

  • Табличный документ — классический вариант для печатных форм: ячейки, рамки, объединения, параметры. Подходит для счетов, актов, доверенностей.
  • Схема компоновки данных — макет для отчётов на СКД, где структуру формирует сама система по настройкам пользователя.
  • Текстовый документ — для выгрузок в текстовые файлы, шаблонов писем, XML-подобных структур с подстановкой параметров.
  • HTML-документ — для веб-представлений и писем в формате HTML.
  • ActiveDocument, географическая и графическая схемы — узкоспециальные типы, в повседневной практике встречаются редко.

Для задачи «сделать печатную форму» почти всегда выбирайте табличный документ. Дальнейшие разделы относятся именно к нему.

Сравнение вариантов

Табличный документ

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

Схема компоновки данных

Гибкие отчёты с настройками пользователя без изменения кода. Не подходит для строгих бланков с фиксированной структурой.

Текстовый документ

Простая подстановка параметров в текст. Нет форматирования, рамок и таблиц.

Создание областей макета

Область — это именованный фрагмент макета, который программно получают и выводят в результирующий документ. Типичная печатная форма состоит из областей: «Шапка», «СтрокаТаблицы» (повторяется для каждой позиции), «Подвал» с итогами и подписями.

Чтобы создать область, выделите нужные строки табличного документа (клик по заголовкам строк слева с зажатой Shift или Ctrl), затем щёлкните правой кнопкой и выберите «Свойства» либо используйте пункт меню «Таблица» → «Именованные области» → «Назначить имя». Введите имя области — например, Шапка.

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

Порядок создания макета
  1. 1
    Откройте конфигуратор, найдите объект или ветку «Общие» → «Макеты», добавьте новый макет типа «Табличный документ».
  2. 2
    Нарисуйте структуру формы: шапку, строки таблицы, подвал. Настройте рамки, шрифты, ширину колонок.
  3. 3
    Выделите строки шапки и назначьте область «Шапка», повторите для строки таблицы и подвала.
  4. 4
    В ячейках, куда подставляются данные, откройте свойства и установите «Тип заполнения» — «Параметр», задайте имя параметра.
  5. 5
    Напишите код: получите макет, выведите области, заполните параметры.
  6. 6
    Сохраните конфигурацию, обновите базу и проверьте печать на тестовом документе.

Настройка параметров и ячеек

Параметр — это место в ячейке, куда код подставит значение. Откройте свойства ячейки (правый клик → «Свойства») и найдите поле «Заполнение» (в разных версиях платформы — «Тип заполнения»). Доступны три варианта:

  • Текст — статическое содержимое, которое не меняется (заголовки, подписи «Итого:», «М.П.»).
  • Параметр — значение подставляется из кода через Область.Параметры.ИмяПараметра = Значение.
  • Шаблон — смешанный вариант: текст с вставками параметров в квадратных скобках, например Счёт № [Номер] от [Дата].

Имя параметра задаётся в свойстве «Параметр» ячейки. Для шаблона имена берутся из квадратных скобок автоматически. Один и тот же параметр можно использовать в нескольких ячейках — он заполнится везде одним значением.

Обратите внимание на свойства «Автоотступ», «Размещение текста» и «Высота строки». Если текст параметра длинный (например, полное наименование контрагента), установите размещение текста «Переносить» и снимите фиксированную высоту строки, иначе содержимое обрежется визуально или при печати.

Типичные ошибки
01
Ячейка оставлена с типом «Текст», а код пытается заполнить параметр — значение молча не подставляется, в форме пусто.
02
Имя параметра в ячейке не совпадает с именем в коде — платформа выдаёт ошибку «Параметр не найден» или оставляет ячейку пустой.
03
Фиксированная высота строки при длинном тексте — содержимое обрезается при печати, хотя на экране выглядит нормально.
04
Область «СтрокаТаблицы» выведена один раз вне цикла — в печатной форме только одна позиция вместо всех.

Заполнение макета из кода

Код печатной формы обычно размещают в модуле менеджера объекта (для команды печати) или во внешней обработке. Базовый шаблон выглядит так:

Функция ПечатьСчета(СсылкаНаДокумент) Экспорт

ТабДок = Новый ТабличныйДокумент;

Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("ПечатьСчета");

// Шапка

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

ОбластьШапка.Параметры.НомерДокумента = СсылкаНаДокумент.Номер;

ОбластьШапка.Параметры.ДатаДокумента = Формат(СсылкаНаДокумент.Дата, "ДЛФ=D");

ОбластьШапка.Параметры.Контрагент = СсылкаНаДокумент.Контрагент;

ТабДок.Вывести(ОбластьШапка);

// Строки табличной части

ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТаблицы");

Для Каждого СтрокаТЧ Из СсылкаНаДокумент.Товары Цикл

ОбластьСтрока.Параметры.Заполнить(СтрокаТЧ);

ТабДок.Вывести(ОбластьСтрока);

КонецЦикла;

// Подвал

ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

ОбластьПодвал.Параметры.ИтогоСумма = СсылкаНаДокумент.Товары.Итог("Сумма");

ТабДок.Вывести(ОбластьПодвал);

Возврат ТабДок;

КонецФункции

Ключевые моменты кода. Метод ПолучитьОбласть("Имя") возвращает копию области, которую можно заполнять многократно. Метод Параметры.Заполнить(Источник) подставляет значения по совпадающим именам — удобно для строк табличных частей, если имена параметров совпадают с именами колонок. Метод Вывести добавляет область в конец результирующего документа.

Если параметров много и их имена совпадают с реквизитами объекта, используйте Заполнить() вместо перечисления каждого параметра вручную. Но оставляйте явное присваивание для вычисляемых значений (форматированные даты, суммы прописью) — так код читается проще.
ПЗ
Практическое замечание

Настройка печати и разбиение на страницы

Табличный документ имеет собственные свойства печати, которые наследуются из макета, но могут быть переопределены в коде. Основные: ориентация страницы (книжная/альбомная), масштаб, поля, колонтитулы, повторение шапки таблицы на каждой странице.

Для многостраничных форм полезны два приёма. Первый — свойство ПовторятьПриПечатиСтроки у табличного документа: укажите область шапки таблицы, и она будет выводиться на каждой странице автоматически. Второй — метод ПроверитьВывод(МассивОбластей): перед выводом очередной строки проверяйте, поместится ли она вместе с подвалом, и при необходимости вставляйте разрыв страницы через ВывестиГоризонтальныйРазделительСтраниц().

Ориентацию и поля удобно задавать прямо в макете: меню «Таблица» → «Параметры страницы». Тогда в коде эти настройки дублировать не нужно.

Контрольные точки

Как проверить результат

Предпросмотр печатной формы
Норма

Все параметры заполнены, текст не обрезан, рамки и переносы на месте

Тревожный признак

Пустые ячейки, символы #### или обрезанный текст

Многостраничный документ
Норма

Шапка таблицы повторяется на каждой странице, подвал не оторван от строк

Тревожный признак

Строки переносятся без шапки, итоги на отдельной пустой странице

Документ с одной и с двадцатью позициями
Норма

Форма корректна в обоих случаях

Тревожный признак

Верстка «плывёт» при большом числе строк

Типичные ошибки и ограничения

Частая проблема — изменение типовой конфигурации ради одного макета. Если конфигурация на поддержке, добавляйте печатную форму как внешнюю обработку через механизм дополнительных отчётов и обработок (в типовых — «Администрирование» → «Печатные формы, отчёты и обработки»). Внешняя печатная форма содержит тот же макет и тот же код, но не требует снятия конфигурации с поддержки.

Второе ограничение — производительность. Вывод тысяч строк по одной области работает медленно; для больших таблиц используйте метод Присоединить для колонок или выводите области пакетно. Для отчётов с группировками вместо ручного макета почти всегда выгоднее схема компоновки данных.

Третий риск — хранение данных в макете. Макет — это шаблон, а не источник данных: не зашивайте в него реквизиты организации, номера договоров и тому подобное. Такие значения должны подставляться параметрами из информационной базы, иначе при смене реквизитов придётся редактировать макет.

Проверка результата

После создания макета и кода проверьте форму на контрольном наборе данных: документ с одной строкой, документ с большим числом строк, документ с длинными наименованиями и пустыми необязательными реквизитами. Пустой параметр выводится как пустая строка — убедитесь, что это не ломает вёрстку (например, не остаётся висячих запятых в адресе).

Финальная проверка — печать на реальный принтер или в PDF. Отображение на экране и печатный результат могут отличаться из-за переносов слов и масштаба, поэтому одного предпросмотра недостаточно.

Итог

Что важно запомнить

Макет создаётся в конфигураторе как табличный документ, делится на именованные области, а данные подставляются через параметры ячеек. Код получает области методом ПолучитьОбласть, заполняет параметры и выводит их в табличный документ. Для типовых конфигураций предпочтительны внешние печатные формы, а результат всегда проверяется на коротких, длинных и незаполненных данных.

Частые вопросы

Чем макет отличается от табличного документа?

Макет — это шаблон, хранящийся в конфигурации, а табличный документ — результирующий объект, который создаётся в памяти при выполнении кода и заполняется областями из макета. Один макет может порождать неограниченное число табличных документов с разными данными.

Можно ли создать макет без изменения конфигурации?

Да. Создайте внешнюю обработку (Файл → Новый → Внешняя обработка), добавьте в неё макет и код печати, затем зарегистрируйте её в механизме дополнительных отчётов и обработок. Типовая конфигурация при этом не изменяется и остаётся на поддержке.

Как вставить в макет картинку или логотип?

В редакторе макета используйте меню «Таблица» → «Рисунки» → «Вставить». Картинку можно встроить в макет или ссылаться на неё из общей картинки конфигурации. Для печати логотипов проверяйте разрешение: слишком маленькое изображение будет размыто на бумаге.

Почему параметр не заполняется, хотя код написан?

Наиболее частые причины: тип заполнения ячейки остался «Текст» вместо «Параметр» или «Шаблон», имя параметра в свойствах ячейки не совпадает с именем в коде (учитывается регистр и русские/латинские буквы), либо заполняется одна область, а выводится другая. Проверьте свойства ячейки и порядок строк кода.

Как вывести сумму прописью в печатной форме?

Используйте функцию работы со строками, формирующую представление числа прописью, — в типовых конфигурациях для этого есть готовые функции общих модулей (например, формирование суммы прописью через возможности работы с числом прописью в платформе: ЧислоПрописью(Сумма, , "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2")). Результат присвойте параметру макета как обычную строку.

Когда вместо макета табличного документа лучше использовать СКД?

Когда результат — отчёт с группировками, отборами и настройками, которые пользователь меняет сам. СКД строит структуру автоматически и не требует кода вывода областей. Для строгих регламентированных бланков (счёт, ТОРГ-12, доверенность) СКД избыточна — там нужен обычный макет табличного документа.