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