Как достать и открыть макет из двоичных данных во внешнем отчете 1С

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

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

Почему макеты хранятся как двоичные данные

Существует несколько причин, по которым разработчики упаковывают информацию в двоичный формат внутри макета:

  1. Вложенные отчеты и обработки: Основной отчет выступает в роли «контейнера», который в процессе работы извлекает из себя другой полноценный файл .epf или .erf и запускает его.
  2. Шаблоны офисных документов: Внутри могут находиться файлы Microsoft Word (.docx), Excel (.xlsx) или PDF-бланки.
  3. Внешние компоненты: Макет может содержать библиотеки .dll для работы с торговым оборудованием.
  4. Защита логики: Иногда это делается для того, чтобы скрыть основной код печати от простого просмотра в дереве метаданных.

Шаг 1. Извлечение данных из макета

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

  1. Откроем внешний отчет в Конфигураторе.
  2. Перейдем на вкладку Макеты.
  3. Дважды кликнем по макету с типом «Двоичные данные».
  4. В открывшемся окне нажмем кнопку Сохранить в файл....

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

Шаг 2. Идентификация типа файла

Посмотрим на ситуацию, описанную в теме форума: при попытке открыть файл как таблицу 1С (.mxl) программа завершается аварийно. Это происходит потому, что структура файла не соответствует формату табличного документа. Выясним реальный формат файла.

Использование Hex-редактора или просмотрщика: Рассмотрим содержимое файла через Total Commander (клавиша F3) или любой HEX-редактор. Если в начале файла мы видим технические заголовки или специфические GUID (например, 4e8a66c2-371d-4695-b0a2-ba5eee6a5bb8), это явный признак того, что перед нами внутренний объект 1С.

Как показывает практика, чаще всего в двоичных данных макета скрывается:

Попробуем по очереди переименовать сохраненный файл, добавляя расширения .erf, .epf или .zip, и попытаемся открыть их через Файл - Открыть в Конфигураторе. В рассматриваемом случае помогло расширение .erf. Для исследования и распаковки внутренних контейнеров 1С также подойдёт специализированный распаковщик конфигураций и внешних файлов.

Шаг 3. Программная работа с двоичными данными

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


// Получаем двоичные данные из макета
ДвоичныеДанныеМакета = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_Т2_ВУР");

// Создаем путь во временном каталоге
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("erf");

// Записываем данные на диск
ДвоичныеДанныеМакета.Записать(ИмяВременногоФайла);

// Подключаем внешний отчет программно
ВнешнийОтчетОбъект = ВнешниеОтчеты.Создать(ИмяВременногоФайла, Ложь);

// Теперь можно вызвать экспортные методы вложенного отчета
ВнешнийОтчетОбъект.Печать(ПараметрыОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);

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

Особенности использования Хранилища Значения

Иногда разработчики оборачивают данные в объект ХранилищеЗначения перед помещением в макет. В этом случае простое сохранение в файл и переименование не поможет, так как файл будет содержать служебную информацию сериализации 1С.

Проанализируем, как извлечь такие данные. Нам потребуется написать небольшую вспомогательную обработку с кодом:


// Предположим, МакетДанных — это наши двоичные данные из макета
ДанныеИзМакета = ЭтотОбъект.ПолучитьМакет("ИмяМакета");

// Если это ХранилищеЗначения, его нужно разыменовать
Если ТипЗнч(ДанныеИзМакета) = Тип("ДвоичныеДанные") Тогда
    // Записываем во временный файл, чтобы потом прочитать как Хранилище
    ВремФайл = ПолучитьИмяВременногоФайла();
    ДанныеИзМакета.Записать(ВремФайл);
    
    // Пытаемся прочитать как ХранилищеЗначения (если мы уверены в этом)
    // В некоторых случаях 1С сама понимает тип при чтении из макета
КонецЕсли;

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

Резюме

Если вы столкнулись с макетом «Двоичные данные»:

  1. Сохраните их на диск через кнопку в Конфигураторе.
  2. Проверьте код на наличие метода ПолучитьИмяВременногоФайла("...") — расширение в кавычках и будет искомым.
  3. Если кода нет, попробуйте расширения .erf или .epf.
  4. Для печатных форм в современных конфигурациях (ЗУП 3.1, ERP, КА) часто используются вложенные отчеты .erf, которые содержат свои собственные макеты и логику компоновки.

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

← На главную