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

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

Как заполнить параметры макета в 1С

Как заполнить параметры макета в 1С: создание области, задание параметров в конфигураторе, вывод через ПолучитьОбласть и УстановитьПараметр с примерами кода.

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

Заполнение параметров выполняется в три этапа: сначала в конфигураторе в ячейках макета прописывают имена параметров и задают им тип заполнения «Параметр», затем в коде получают нужную область макета и через коллекцию Параметры присваивают значения, после чего область выводится в результирующий табличный документ. Ошибки чаще всего возникают из-за несовпадения имён параметров, неверного типа заполнения или попытки обратиться к параметру, которого нет в области.

Ниже разобран полный цикл работы: от создания макета до проверки результата, с примерами кода на встроенном языке, типичными ошибками и ответами на частые вопросы.

Что такое параметры макета и когда они нужны

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

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

Создание макета и объявление параметров в конфигураторе

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

В ячейках, куда должны подставляться данные, впишите имя параметра в квадратных скобках, например [НомерДок], [ДатаДок], [Контрагент]. Затем выделите ячейку, откройте палитру свойств и установите свойство Заполнение в значение Параметр. Это ключевой шаг: если оставить заполнение «Текст», содержимое выведется как обычная строка «[НомерДок]», а не как значение.

Имена параметров должны быть допустимыми идентификаторами: начинаться с буквы, не содержать пробелов и спецсимволов. Регистр букв при обращении из кода не учитывается, но лучше выдерживать единый стиль написания, чтобы не запутаться при отладке.

Порядок создания параметра в макете
  1. 1
    Создайте или откройте макет типа «Табличный документ»
  2. 2
    В ячейке впишите имя в квадратных скобках, например [Контрагент]
  3. 3
    В палитре свойств ячейки установите Заполнение = Параметр
  4. 4
    Выделите строки области и задайте имя области через меню Таблица — Имена — Назначить имя
  5. 5
    Сохраните конфигурацию и обновите конфигурацию базы данных

Выделение областей макета

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

Правильное деление на области важно, потому что параметры заполняются в контексте конкретной области. Если параметр [НаименованиеТовара] находится в области «Строка», то заполнять его нужно после получения именно этой области, а не всего макета. Попытка обратиться к параметру через другую область приведёт к ошибке или пустому значению.

Заполнение параметров программно: базовый код

В модуле менеджера документа или в общем модуле печати создаётся процедура, которая формирует табличный документ. Базовая последовательность: получить макет, получить область, заполнить параметры, вывести область. Ниже типовой пример.

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

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

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

// Шапка

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

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

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

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

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

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

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

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

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

ОбластьСтрока.Параметры.Количество = СтрокаТЧ.Количество;

ОбластьСтрока.Параметры.Сумма = СтрокаТЧ.Сумма;

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

КонецЦикла;

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

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

Обратите внимание: область «Строка» получается один раз до цикла, а внутри цикла только перезаполняются параметры и выводится область. Это работает быстрее, чем повторное получение области на каждой итерации, и является общепринятой практикой.

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

Шаблоны и смешанное заполнение ячеек

Кроме типа заполнения «Параметр» существует тип «Шаблон». В шаблоне текст и параметры смешиваются в одной ячейке: например, содержимое Акт № [НомерДок] от [ДатаДок] при заполнении подставит оба значения внутрь строки. Это удобно для заголовков и подписей, где не нужно дробить текст на несколько ячеек.

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

Параметр или шаблон — что выбрать

Заполнение «Параметр»

Ячейка целиком содержит одно значение. Подходит для колонок таблиц, сумм, дат. Ограничение: нельзя смешивать с постоянным текстом в той же ячейке.

Заполнение «Шаблон»

Текст с вставками вида [Имя]. Подходит для заголовков и подписей. Ограничение: незаполненный параметр оставляет пустое место внутри фразы.

Заполнение «Текст»

Статическое содержимое, не меняется из кода. Подходит для надписей, которые никогда не меняются.

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

После вывода документа проверьте, что все параметры подставились: в итоговом табличном документе не должно остаться фрагментов в квадратных скобках. Если видите строку вида «[Контрагент]» в готовой печатной форме — значит, у ячейки не установлен тип заполнения «Параметр» или «Шаблон», либо параметр не был заполнен из кода.

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

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

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

Внешний вид печатной формы
Норма

Все данные подставлены, квадратных скобок нет

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

Видны фрагменты вида [ИмяПараметра]

Заполнение ячейки в макете
Норма

Свойство Заполнение = Параметр или Шаблон

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

Заполнение = Текст при наличии скобок

Обращение из кода
Норма

Имя в коде совпадает с именем в макете

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

Ошибка «Параметр не найден» или молча пустое значение

Типичные ошибки при заполнении параметров

Самая частая проблема — несовпадение имён: в макете параметр назван [НомерДок], а в коде присваивается Параметры.Номер. В зависимости от контекста это либо вызывает исключение, либо оставляет ячейку пустой. Вторая распространённая ошибка — заполнение параметров области после её вывода методом Вывести(): изменения в таком случае не попадают в документ, потому что область уже скопирована в результирующий табличный документ.

Ещё одна группа ошибок связана с областями: код получает область «Шапка», а пытается заполнить параметр, который физически находится в области «Строка». Платформа в этом случае сообщит, что параметр не найден. Также стоит помнить, что при использовании метода Заполнить(ИсточникДанных), который заполняет параметры по совпадению имён со свойствами объекта, имена параметров должны в точности совпадать с именами реквизитов источника.

Типичные ошибки
01
Присвоение параметров после Вывести() — изменения не попадают в документ, выводите область только после заполнения
02
Опечатка в имени параметра — ячейка остаётся пустой или возникает исключение, сверяйте имена через отладчик
03
Забыто свойство Заполнение = Параметр — в печатной форме виден текст [ИмяПараметра] вместо значения
04
Заполнение параметра из чужой области — ошибка «параметр не найден», получайте именно ту область, где объявлен параметр
05
Передача ссылки вместо строки — в ячейке выводится техническое представление объекта, а не нужный реквизит

Безопасные приёмы и ограничения

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

Перед изменением типового макета сделайте копию конфигурации или выгрузите макет в файл. При обновлении типовой конфигурации изменённые макеты могут быть затёрты, если объекты не поставлены на поддержку с возможностью редактирования. Учитывайте также, что параметры макета не переносят форматирование значений автоматически: форматирование ячейки (формат числа, даты) задаётся в свойствах ячейки макета и применяется при выводе.

Часто задаваемые вопросы

Можно ли заполнить параметры макета без написания кода?

Частично — да. Конструктор печати в конфигураторе сам создаёт макет и генерирует типовой код заполнения, который остаётся только скорректировать. Полностью без кода обойтись нельзя: значения параметров всегда подставляются программно в момент формирования документа.

Чем отличается метод Заполнить() от поштучного присвоения параметров?

Метод Область.Параметры.Заполнить(Источник) переносит значения массово: для каждого параметра области ищется одноимённое свойство или реквизит объекта-источника. Это удобно, когда имена параметров совпадают с именами реквизитов документа. Поштучное присвоение даёт больше контроля и позволяет применять форматирование и вычисления.

Почему в печатной форме виден текст [ИмяПараметра] вместо значения?

У ячейки макета свойство «Заполнение» оставлено в значении «Текст». Откройте макет в конфигураторе, выделите ячейку и смените заполнение на «Параметр» или «Шаблон», затем обновите конфигурацию базы данных.

Можно ли в одной ячейке использовать несколько параметров?

Да, для этого установите тип заполнения «Шаблон» и впишите параметры в текст ячейки, например: «Договор № [НомерДоговора] от [ДатаДоговора]». Оба параметра заполняются из кода через коллекцию Параметры области как обычно.

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

Точно так же, как во встроенном макете, только макет получают методом ЭтотОбъект.ПолучитьМакет("ИмяМакета") в модуле объекта внешней обработки. Сам макет добавляется в дерево макетов внешней обработки в конфигураторе.

Что делать, если параметр заполнен, но ячейка пустая?

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

Итог

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

Параметр объявляется в ячейке макета в квадратных скобках с типом заполнения «Параметр» или «Шаблон», заполняется в коде через Область.Параметры.Имя строго до вызова Вывести(), а области макета делят документ на повторно используемые фрагменты. Большинство ошибок сводится к опечаткам в именах и неверному порядку «заполнить — вывести».