Разработка и Конфигурация · 9 мин
Макет с двоичными данными в 1С: как открыть и извлечь файл
Как открыть макет типа «двоичные данные» в 1С: извлечение файла из макета, просмотр в конфигураторе, сохранение на диск и типичные ошибки разработчика.
Макет с типом «Двоичные данные» в 1С — это контейнер, в котором хранится произвольный файл: картинка, шаблон Excel, внешняя компонента, архив или любой другой ресурс, встроенный в конфигурацию. В отличие от табличного макета или макета активного документа, такой макет нельзя «открыть» двойным щелчком и увидеть содержимое в привычном виде — конфигуратор показывает лишь факт наличия данных.
Путаница возникает у тех, кто впервые сталкивается с таким объектом: в дереве конфигурации макет есть, а открыть его как документ не получается. На самом деле работа с двоичным макетом сводится к трём сценариям: просмотр содержимого через сохранение на диск, программное извлечение во временный файл и замена содержимого макета новой версией файла.
Ниже разобраны все три сценария на примере конфигуратора 1С:Предприятие 8.3, а также типичные ошибки, из-за которых извлечённый файл не открывается или повреждается.
Что представляет собой макет с двоичными данными
В дереве конфигурации макеты находятся внутри объектов (справочников, документов, отчётов) и в ветке «Общие → Макеты». Тип макета задаётся при создании и определяет, как платформа хранит и отображает его содержимое. Для типа «Двоичные данные» платформа сохраняет файл «как есть» — байт в байт, без преобразования.
Типичное применение: шаблоны печатных форм в формате DOCX или XLSX, картинки для кнопок и форм, внешние компоненты (DLL), XML-схемы, файлы настроек СКД в виде XML. В типовых конфигурациях так хранятся, например, макеты печатных форм в библиотеке стандартных подсистем.
Понять, что макет именно двоичный, можно по его поведению: при двойном щелчке не открывается табличный редактор, а в свойствах макета указан тип «Двоичные данные». Само содержимое в конфигураторе не визуализируется.
Способ 1: извлечь файл через конфигуратор
Самый простой путь без программирования — сохранить содержимое макета в файл средствами самого конфигуратора. Это удобно, когда нужно один раз посмотреть или отредактировать шаблон.
Откройте дерево конфигурации, найдите нужный макет и вызовите контекстное меню. В зависимости от версии платформы доступен пункт сохранения содержимого в файл либо в диалоге макета есть кнопка загрузки/выгрузки. Если прямого пункта нет, используйте универсальный приём через режим предприятия, описанный в следующем разделе.
После сохранения задайте файлу правильное расширение — платформа его не подсказывает, поскольку хранит только байты. Если в макете лежит шаблон Excel, а вы сохранили файл без расширения или с расширением .bin, просто переименуйте его в .xlsx и откройте в Excel.
- 1Откройте конфигуратор и найдите макет в дереве конфигурации
- 2Откройте макет двойным щелчком или через контекстное меню
- 3Найдите команду сохранения содержимого в файл (зависит от версии платформы)
- 4Укажите путь и имя файла с правильным расширением
- 5Откройте сохранённый файл в штатном приложении и проверьте содержимое
Способ 2: открыть программно через встроенный язык
Когда нужно автоматизировать извлечение или посмотреть содержимое из пользовательского режима, используют метод ПолучитьМакет(). Для общего макета вызов выглядит так: ПолучитьОбщийМакет("ИмяМакета"), для макета объекта — через менеджер объекта, например Отчеты.МойОтчет.ПолучитьМакет("ИмяМакета").
Метод возвращает значение типа «Двоичные данные». У этого типа есть метод Записать(ИмяФайла), который сохраняет содержимое на диск. После записи файл можно открыть через ЗапуститьПриложение() или передать пользователю через временное хранилище в клиент-серверном режиме.
ДвоичныеДанные = ПолучитьОбщийМакет("ШаблонДоговора");
ИмяФайла = ПолучитьИмяВременногоФайла("docx");
ДвоичныеДанные.Записать(ИмяФайла);
ЗапуститьПриложение(ИмяФайла);
На тонком клиенте запись выполняется на стороне клиента, поэтому код либо размещают в клиентском контексте, либо передают данные с сервера через ПоместитьВоВременноеХранилище() и затем получают на клиенте методом ПолучитьИзВременногоХранилища().
ДвоичныеДанные = ПолучитьОбщийМакет("МойМакет");
ДвоичныеДанные.Записать("C:\Temp\maket.xlsx");Как определить тип файла внутри макета
Главная сложность при открытии — неизвестное расширение. Если вы не знаете, что лежит в макете, сохраните содержимое в файл и определите формат по сигнатуре — первым байтам файла.
Файлы DOCX, XLSX и ZIP начинаются с байтов PK (это контейнер ZIP), PDF — с символов %PDF, PNG — с сигнатуры ‰PNG, JPEG — с байтов FF D8. Откройте сохранённый файл в любом шестнадцатеричном редакторе или даже в Блокноте: первые символы подскажут формат.
Ещё один источник подсказки — имя макета и место его использования в коде. Поищите по конфигурации обращения к макету: рядом обычно видно, как файл записывается и с каким расширением открывается.
Скорее всего DOCX, XLSX или ODT — переименуйте и откройте
Открывается любым просмотрщиком PDF
PNG или JPEG соответственно, открывается просмотрщиком картинок
DLL или EXE — вероятно, внешняя компонента
Замена содержимого макета на новую версию
Обратная задача — обновить файл внутри макета. В конфигураторе откройте макет и найдите команду загрузки содержимого из файла (обычно доступна при редактировании макета). Выберите новый файл — платформа заменит двоичные данные целиком.
Программно содержимое макета в дереве конфигурации заменить нельзя — это делается только в конфигураторе. Если требуется обновлять файлы без изменения конфигурации, храните их не в макете, а в справочнике с реквизитом типа «Хранилище значения» или в присоединённых файлах.
Типичные ошибки при работе с двоичными макетами
Чаще всего проблемы возникают не при извлечении, а при неправильной обработке результата. Ниже — ошибки, которые встречаются регулярно.
Отдельная группа проблем — права доступа. Если макет находится в объекте, к которому у пользователя нет прав, ПолучитьМакет() в режиме предприятия вызовет ошибку. В этом случае извлечение выполняют в привилегированном модуле или выдают права на соответствующий объект.
Проверка результата после извлечения
После сохранения файла убедитесь, что извлечение прошло корректно, прежде чем использовать файл в работе или отдавать пользователю.
Как проверить результат
Больше нуля и соответствует ожидаемому объёму
Файл нулевого размера — данные не записались
Файл открывается без ошибок и предупреждений
Приложение сообщает о повреждении — неверное расширение или обрыв записи
Сигнатура соответствует ожидаемому формату (PK, %PDF и т.д.)
Начинается с текста ошибки или пустой — источник данных неверен
FAQ
Почему макет с двоичными данными не открывается двойным щелчком?
Для этого типа макета в конфигураторе нет визуального редактора — платформа не знает, какое приложение соответствует содержимому. Содержимое извлекают сохранением в файл, а затем открывают в подходящей программе.
Можно ли посмотреть содержимое макета без конфигуратора?
Да, если в конфигурации есть функциональность выгрузки макета (часто есть в типовых для печатных форм). Либо напишите простую обработку, которая вызывает ПолучитьМакет() и сохраняет результат в файл — это работает в режиме предприятия.
Чем отличается макет «Двоичные данные» от макета «Табличный документ»?
Табличный документ — это собственный формат 1С, который открывается и редактируется прямо в конфигураторе. Двоичные данные — произвольный внешний файл, встроенный в конфигурацию; редактируется он только во внешнем приложении после извлечения.
Файл извлёкся, но Excel пишет, что формат повреждён. Что делать?
Проверьте расширение: старые шаблоны могут быть в формате XLS, а не XLSX. Также убедитесь, что файл записан полностью — сравните размер с ожидаемым. Если макет редактировали разными способами, содержимое могло быть повреждено при загрузке; восстановите его из резервной копии конфигурации.
Как передать двоичные данные макета пользователю в веб-клиенте?
На сервере получите макет и поместите данные во временное хранилище через ПоместитьВоВременноеХранилище(). На клиенте используйте ПолучитьФайл() или НачатьПолучениеФайлов() — браузер скачает файл как обычную загрузку.
Можно ли изменить тип макета с двоичного на табличный?
Тип макета задаётся при создании и напрямую не конвертируется. Создайте новый макет нужного типа и перенесите содержимое вручную: для табличного документа — через копирование областей, для данных — через извлечение и повторную загрузку.
Что важно запомнить
Двоичный макет — файл внутри конфигурации, который открывается не напрямую, а через извлечение: сохранением из конфигуратора или методом ПолучитьМакет() с записью на диск. Главное — задать файлу правильное расширение, проверить его открытие в штатном приложении и перед заменой содержимого макета сохранить резервную копию.