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