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

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

Макет с двоичными данными в 1С: как открыть и извлечь файл

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

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

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

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

Что представляет собой макет с двоичными данными

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

Типичное применение: шаблоны печатных форм в формате DOCX или XLSX, картинки для кнопок и форм, внешние компоненты (DLL), XML-схемы, файлы настроек СКД в виде XML. В типовых конфигурациях так хранятся, например, макеты печатных форм в библиотеке стандартных подсистем.

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

Способ 1: извлечь файл через конфигуратор

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

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

После сохранения задайте файлу правильное расширение — платформа его не подсказывает, поскольку хранит только байты. Если в макете лежит шаблон Excel, а вы сохранили файл без расширения или с расширением .bin, просто переименуйте его в .xlsx и откройте в Excel.

Порядок извлечения через конфигуратор
  1. 1
    Откройте конфигуратор и найдите макет в дереве конфигурации
  2. 2
    Откройте макет двойным щелчком или через контекстное меню
  3. 3
    Найдите команду сохранения содержимого в файл (зависит от версии платформы)
  4. 4
    Укажите путь и имя файла с правильным расширением
  5. 5
    Откройте сохранённый файл в штатном приложении и проверьте содержимое

Способ 2: открыть программно через встроенный язык

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

Метод возвращает значение типа «Двоичные данные». У этого типа есть метод Записать(ИмяФайла), который сохраняет содержимое на диск. После записи файл можно открыть через ЗапуститьПриложение() или передать пользователю через временное хранилище в клиент-серверном режиме.

ДвоичныеДанные = ПолучитьОбщийМакет("ШаблонДоговора");

ИмяФайла = ПолучитьИмяВременногоФайла("docx");

ДвоичныеДанные.Записать(ИмяФайла);

ЗапуститьПриложение(ИмяФайла);

На тонком клиенте запись выполняется на стороне клиента, поэтому код либо размещают в клиентском контексте, либо передают данные с сервера через ПоместитьВоВременноеХранилище() и затем получают на клиенте методом ПолучитьИзВременногоХранилища().

bsl
ДвоичныеДанные = ПолучитьОбщийМакет("МойМакет");
ДвоичныеДанные.Записать("C:\Temp\maket.xlsx");

Как определить тип файла внутри макета

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

Файлы DOCX, XLSX и ZIP начинаются с байтов PK (это контейнер ZIP), PDF — с символов %PDF, PNG — с сигнатуры ‰PNG, JPEG — с байтов FF D8. Откройте сохранённый файл в любом шестнадцатеричном редакторе или даже в Блокноте: первые символы подскажут формат.

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

PK в начале файлаZIP-контейнер

Скорее всего DOCX, XLSX или ODT — переименуйте и откройте

%PDFДокумент PDF

Открывается любым просмотрщиком PDF

‰PNG или FF D8Изображение

PNG или JPEG соответственно, открывается просмотрщиком картинок

MZ в началеИсполняемый файл

DLL или EXE — вероятно, внешняя компонента

Замена содержимого макета на новую версию

Обратная задача — обновить файл внутри макета. В конфигураторе откройте макет и найдите команду загрузки содержимого из файла (обычно доступна при редактировании макета). Выберите новый файл — платформа заменит двоичные данные целиком.

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

Типичные ошибки при работе с двоичными макетами

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

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

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

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

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

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

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

Размер файла на диске
Норма

Больше нуля и соответствует ожидаемому объёму

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

Файл нулевого размера — данные не записались

Открытие в штатном приложении
Норма

Файл открывается без ошибок и предупреждений

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

Приложение сообщает о повреждении — неверное расширение или обрыв записи

Первые байты файла
Норма

Сигнатура соответствует ожидаемому формату (PK, %PDF и т.д.)

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

Начинается с текста ошибки или пустой — источник данных неверен

FAQ

Почему макет с двоичными данными не открывается двойным щелчком?

Для этого типа макета в конфигураторе нет визуального редактора — платформа не знает, какое приложение соответствует содержимому. Содержимое извлекают сохранением в файл, а затем открывают в подходящей программе.

Можно ли посмотреть содержимое макета без конфигуратора?

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

Чем отличается макет «Двоичные данные» от макета «Табличный документ»?

Табличный документ — это собственный формат 1С, который открывается и редактируется прямо в конфигураторе. Двоичные данные — произвольный внешний файл, встроенный в конфигурацию; редактируется он только во внешнем приложении после извлечения.

Файл извлёкся, но Excel пишет, что формат повреждён. Что делать?

Проверьте расширение: старые шаблоны могут быть в формате XLS, а не XLSX. Также убедитесь, что файл записан полностью — сравните размер с ожидаемым. Если макет редактировали разными способами, содержимое могло быть повреждено при загрузке; восстановите его из резервной копии конфигурации.

Как передать двоичные данные макета пользователю в веб-клиенте?

На сервере получите макет и поместите данные во временное хранилище через ПоместитьВоВременноеХранилище(). На клиенте используйте ПолучитьФайл() или НачатьПолучениеФайлов() — браузер скачает файл как обычную загрузку.

Можно ли изменить тип макета с двоичного на табличный?

Тип макета задаётся при создании и напрямую не конвертируется. Создайте новый макет нужного типа и перенесите содержимое вручную: для табличного документа — через копирование областей, для данных — через извлечение и повторную загрузку.

Итог

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

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