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