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

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

Как получить общий макет в 1С: пошаговое руководство

Как получить общий макет в 1С: метод ПолучитьОбщийМакет, работа через конфигуратор и код, отличия от макета объекта, типичные ошибки и проверка результата.

Общий макет в 1С — это шаблон, хранящийся на уровне всей конфигурации, а не отдельного объекта. К нему можно обратиться из любого модуля: общего, формы, документа или отчёта. Чаще всего общие макеты используют для печатных форм, схем компоновки данных, двоичных файлов (например, шаблонов Excel или Word) и текстовых заготовок.

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

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

Что такое общий макет и когда его применять

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

Платформа поддерживает несколько видов общих макетов: табличный документ, текстовый документ, схема компоновки данных, макет оформления, HTML-документ, двоичные данные, ActiveDocument, графическую и географическую схему. Вид задаётся при создании макета в конфигураторе и определяет, какой тип значения вернёт метод получения.

Типовые сценарии применения: фирменный бланк для всех печатных форм, единый макет этикетки, XSD-схема для обмена данными, шаблон договора в формате Word, встроенный в конфигурацию как двоичные данные.

Как найти и открыть общий макет в конфигураторе

Откройте конфигуратор и разверните дерево конфигурации (меню «Конфигурация» → «Открыть конфигурацию» или «Открыть конфигурацию базы данных», если изменения ещё не применены). Найдите ветку «Общие» и раскройте её — внутри находится узел «Общие макеты».

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

Порядок действий в конфигураторе
  1. 1
    Откройте конфигуратор и дерево конфигурации
  2. 2
    Раскройте ветку «Общие» → «Общие макеты»
  3. 3
    Найдите нужный макет по имени или создайте новый через «Добавить»
  4. 4
    Откройте макет двойным щелчком, отредактируйте и сохраните
  5. 5
    Обновите конфигурацию базы данных и проверьте результат в режиме Предприятие

Если макета нет в списке, убедитесь, что вы смотрите именно ветку «Общие макеты», а не макеты конкретного объекта — у документов, справочников и отчётов есть собственные макеты, и визуально ветки похожи.

Как получить общий макет программно

Для программного доступа используется метод глобального контекста ПолучитьОбщийМакет(). В качестве параметра передаётся имя макета строкой или объект описания метаданных макета. Метод доступен только на сервере, в том числе в серверных процедурах общих модулей и модулей объектов.

bsl
Макет = ПолучитьОбщийМакет("МакетПечатнойФормы");
ТабДок = Новый ТабличныйДокумент;
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = Номер;
ТабДок.Вывести(ОбластьШапка);

Тип возвращаемого значения зависит от вида макета: табличный макет вернёт ТабличныйДокумент, схема компоновки — СхемаКомпоновкиДанных, двоичные данные — ДвоичныеДанные, текстовый макет — ТекстовыйДокумент. Учитывайте это при дальнейшей обработке: попытка вызвать ПолучитьОбласть() у текстового макета приведёт к ошибке.

Если макет с указанным именем не найден, платформа вызывает исключение с сообщением о невозможности получить макет. Поэтому в коде, где имя макета формируется динамически, полезно предварительно проверять его существование через метаданные: Метаданные.ОбщиеМакеты.Найти(ИмяМакета) — если результат Неопределено, макет отсутствует.

Примеры для типовых задач

Получение макета печатной формы

Самый частый сценарий — табличный макет с именованными областями. Код получает макет, извлекает область, заполняет параметры и выводит её в результирующий табличный документ. Имена областей и параметров должны точно совпадать с тем, что задано в конфигураторе, включая регистр.

Получение схемы компоновки данных

Если общий макет хранит схему компоновки, её передают в компоновщик макета или в отчёт программно: СхемаКД = ПолучитьОбщийМакет("СхемаОтчета"). Далее схема используется как обычно — через КомпоновщикМакетаКомпоновкиДанных и процессор компоновки.

Получение двоичных данных (шаблон Excel, Word)

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

Общий макет против макета объекта: что выбрать

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

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

Общий макет

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

Макет объекта

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

Правило простое: если шаблон нужен двум и более объектам — делайте его общим. Если макет уникален для конкретного документа или отчёта — храните его в самом объекте, это упрощает сопровождение и поставку.

Проверка результата и типичные ошибки

После получения макета убедитесь, что он содержит ожидаемые данные: для табличного документа проверьте наличие областей через Макет.Области.Найти("Шапка"), для двоичных данных — размер содержимого. Пустой макет или отсутствие области почти всегда означает расхождение имён.

Типичные ошибки
01
Опечатка в имени макета — метод вызывает исключение; используйте проверку через Метаданные.ОбщиеМакеты.Найти()
02
Вызов ПолучитьОбщийМакет() на клиенте — ошибка доступности метода; переносите вызов в серверную процедуру
03
Несовпадение имён областей и параметров с макетом — область не найдена, параметры не заполняются; сверяйте имена посимвольно
04
Ожидание ТабличногоДокумента от макета другого вида — ошибка вызова методов; проверяйте тип возвращаемого значения
05
Поиск макета в ветке объекта вместо «Общие макеты» — макет «не находится» в конфигураторе
Контрольные точки

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

Существование макета
Норма

Метаданные.ОбщиеМакеты.Найти(Имя) возвращает объект

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

Возвращает Неопределено — имена не совпадают

Тип макета
Норма

Тип возвращённого значения соответствует виду макета

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

Ошибка при вызове методов, несвойственных типу

Области табличного макета
Норма

Макет.Области.Найти() находит нужную область

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

Области нет — проверьте имена в конфигураторе

Ограничения и безопасная работа

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

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

Итог

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

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

Частые вопросы

Можно ли получить общий макет на клиенте?

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

Чем ПолучитьОбщийМакет отличается от ПолучитьМакет?

ПолучитьОбщийМакет обращается к макетам из ветки «Общие» и доступен глобально. ПолучитьМакет вызывается у конкретного объекта (справочника, документа, отчёта) и возвращает его собственный макет.

Почему метод выдаёт ошибку «Макет не найден»?

Чаще всего причина в опечатке в имени или в том, что макет создан у объекта, а не в общих. Проверьте наличие через Метаданные.ОбщиеМакеты.Найти(Имя) и сверьте имя посимвольно с конфигуратором.

Как получить из общего макета файл Excel или Word?

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

Можно ли изменить общий макет программно?

Нет, макеты изменяются только в конфигураторе. В режиме Предприятие можно получить макет, заполнить его данными и сохранить результат как новый файл, но сам объект метаданных останется неизменным.

Что делать, если общий макет используется во многих местах и его нужно изменить?

Выполните глобальный поиск по имени макета, чтобы найти все обращения. Безопасный вариант — создать копию макета с новым именем и постепенно перевести вызовы на неё, затем удалить старый макет после проверки.