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