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

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

Как добавить макет в расширение 1С

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

Макеты в расширении 1С нужны, когда требуется добавить внешнюю печатную форму, шаблон табличного документа, схему компоновки данных или двоичные данные, не изменяя основную конфигурацию. Расширение позволяет хранить собственные макеты и обращаться к ним из заимствованного или собственного кода, сохраняя конфигурацию на поддержке.

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

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

Подготовка: создаём или открываем расширение

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

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

Способ 1: создание нового макета в расширении

В дереве конфигурации расширения найдите ветку «Общие» → «Макеты», либо откройте ветку «Макеты» конкретного объекта, если макет нужен для документа или справочника. Вызовите контекстное меню и выберите «Добавить». Платформа предложит выбрать тип макета.

Доступные типы макетов: табличный документ (для печатных форм), схема компоновки данных (для отчётов), макет оформления компоновки, текстовый документ, двоичные данные, HTML-документ, географическая схема, графическая схема и другие. Для печатной формы почти всегда выбирается «Табличный документ», для отчёта на СКД — «Схема компоновки данных».

После создания макета заполните его содержимое. Для табличного документа задайте области (шапка, строка, подвал) и параметры вида [НаименованиеПараметра] — они будут заполняться из кода. Сохраните расширение клавишей F7 или командой «Обновить конфигурацию базы данных».

Порядок создания макета
  1. 1
    Откройте окно конфигурации расширения двойным щелчком
  2. 2
    В ветке «Общие» → «Макеты» выберите «Добавить» из контекстного меню
  3. 3
    Укажите имя макета и выберите тип (например, «Табличный документ»)
  4. 4
    Заполните области и параметры макета
  5. 5
    Сохраните расширение и обновите конфигурацию базы данных (F7)

Способ 2: заимствование макета из основной конфигурации

Если нужно изменить типовой макет, не создавая его с нуля, используйте заимствование. В дереве конфигурации расширения найдите объект основной конфигурации, содержащий нужный макет, — он отображается, если соответствующий объект уже заимствован. Если объекта нет, сначала добавьте его в расширение через контекстное меню «Добавить в расширение» в основной конфигурации.

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

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

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

Новый макет

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

Заимствованный макет

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

Обращение к макету из программного кода

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

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

bsl
Процедура ПечатьФормы(СсылкаНаДокумент) Экспорт
	Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("МойМакетПечати");
	ТабДок = Новый ТабличныйДокумент;
	ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
	ОбластьШапка.Параметры.НомерДокумента = СсылкаНаДокумент.Номер;
	ТабДок.Вывести(ОбластьШапка);
	ТабДок.Показать("Печатная форма");
КонецПроцедуры

Если макет нужен внешней обработке или отчёту, подключаемому через механизм дополнительных отчётов и обработок (БСП), макет хранится в самой обработке, а не в расширении. Расширение в этом сценарии используют для добавления макета в типовой объект, чтобы типовой код мог его найти.

Проверка результата и подключение расширения

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

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

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

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

Расширение в списке расширений
Норма

Статус «Подключено», без предупреждений

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

Статус «Отключено» или ошибка применения

Вызов ПолучитьМакет() в коде
Норма

Возвращается табличный документ без исключения

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

Ошибка «Макет не найден»

Содержимое печатной формы
Норма

Выводятся области и параметры из макета расширения

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

Используется старая типовая версия макета

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

Самая частая проблема — расширение создано, но не применено в текущем сеансе. После добавления или изменения макета перезапустите сеанс предприятия: платформа загружает расширения при старте сеанса, и изменения «на лету» не подхватываются.

Вторая распространённая ошибка — попытка обратиться к макету расширения из кода основной конфигурации, который не знает о его существовании. Типовой код увидит новый макет только если обращается к нему по имени, которое уже предусмотрено логикой (например, заимствованный и изменённый макет). Совершенно новый макет должен вызываться из кода самого расширения.

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

Типичные ошибки
01
Имя макета в коде не совпадает с именем в дереве расширения — ошибка «Макет не найден» при вызове
02
Сеанс не перезапущен после изменения расширения — используется старая версия макета
03
Заимствованный макет не проверен после обновления конфигурации — печатная форма устарела относительно типовой
04
Макет создан в основной конфигурации вместо дерева расширения — изменения попадут в конфигурацию и нарушат поддержку

Когда расширение не подходит: альтернативы

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

Если же требуется массовая доработка множества объектов и макетов с глубоким изменением логики, расширение может оказаться недостаточным по возможностям — в таком случае рассматривают доработку основной конфигурации со снятием объектов с поддержки. Это крайняя мера: она усложняет последующие обновления, поэтому сначала оцените, закрывает ли задачу связка «расширение + внешние обработки».

Маршрут решения

Как выбрать действие

Нужно слегка изменить типовую печатную формуЗаимствуйте макет в расширение и отредактируйте его
Нужна полностью новая форма, вызываемая из своей кнопкиСоздайте новый макет в расширении и код печати в заимствованном модуле
Форма нужна без прав доступа к конфигураторуИспользуйте внешнюю печатную форму через дополнительные отчёты и обработки

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

Можно ли добавить в расширение макет типа «Схема компоновки данных»?

Да. При добавлении макета выберите тип «Схема компоновки данных» и настройте наборы данных, ресурсы и варианты настроек. Такой макет используется для отчётов: его можно передать в объект отчёта программно или заимствовать типовую СКД и изменить запрос либо настройки.

Почему типовой код не видит мой новый макет из расширения?

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

Нужно ли перезапускать сеанс после изменения макета в расширении?

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

Что произойдёт с заимствованным макетом при обновлении конфигурации?

Макет в расширении останется без изменений и продолжит перекрывать типовой. Если поставщик изменил типовой макет, ваша версия не обновится автоматически — сравните содержимое вручную и при необходимости перенесите изменения поставщика в макет расширения.

Можно ли хранить в макете расширения картинки или файлы?

Да, для этого предназначен тип макета «Двоичные данные» или «ActiveDocument». В макет можно поместить изображение, шаблон Word или Excel, а затем получить его в коде через ПолучитьОбщийМакет() и сохранить во временный файл для дальнейшей обработки.

Работают ли макеты расширений в мобильной платформе и веб-клиенте?

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

Итог

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

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