При разработке или доработке внешних отчетов и обработок в системе «1С:Предприятие 8» программисты часто сталкиваются с ситуацией, когда в окне макетов вместо привычной таблицы ТабличныйДокумент или схемы компоновки данных СхемаКомпоновкиДанных отображается тип Двоичные данные. При попытке открыть такой макет двойным кликом в Конфигураторе система просто открывает пустое окно или предлагает сохранить данные в файл. Разберем подробно, что это такое, как узнать содержимое этого файла и правильно его использовать.
Существует несколько причин, по которым разработчики упаковывают информацию в двоичный формат внутри макета:
.epf или .erf и запускает его..docx), Excel (.xlsx) или PDF-бланки..dll для работы с торговым оборудованием.Проанализируем первый этап работы. Нам необходимо физически достать файл из конфигурации. Для этого выполним следующие действия:
На этом этапе мы получаем файл без расширения или с расширением .bin. Наша задача — выяснить, чем его открыть.
Посмотрим на ситуацию, описанную в теме форума: при попытке открыть файл как таблицу 1С (.mxl) программа завершается аварийно. Это происходит потому, что структура файла не соответствует формату табличного документа. Выясним реальный формат файла.
Использование Hex-редактора или просмотрщика: Рассмотрим содержимое файла через Total Commander (клавиша F3) или любой HEX-редактор. Если в начале файла мы видим технические заголовки или специфические GUID (например, 4e8a66c2-371d-4695-b0a2-ba5eee6a5bb8), это явный признак того, что перед нами внутренний объект 1С.
Как показывает практика, чаще всего в двоичных данных макета скрывается:
Попробуем по очереди переименовать сохраненный файл, добавляя расширения .erf, .epf или .zip, и попытаемся открыть их через Файл - Открыть в Конфигураторе. В рассматриваемом случае помогло расширение .erf. Для исследования и распаковки внутренних контейнеров 1С также подойдёт специализированный распаковщик конфигураций и внешних файлов.
Разберем, как разработчик может использовать такие макеты в коде. Если мы хотим программно извлечь вложенный отчет и запустить его, нам поможет следующий алгоритм:
// Получаем двоичные данные из макета
ДвоичныеДанныеМакета = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_Т2_ВУР");
// Создаем путь во временном каталоге
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("erf");
// Записываем данные на диск
ДвоичныеДанныеМакета.Записать(ИмяВременногоФайла);
// Подключаем внешний отчет программно
ВнешнийОтчетОбъект = ВнешниеОтчеты.Создать(ИмяВременногоФайла, Ложь);
// Теперь можно вызвать экспортные методы вложенного отчета
ВнешнийОтчетОбъект.Печать(ПараметрыОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
Этот метод позволяет хранить всю логику формирования сложной печатной формы внутри одного файла, что крайне удобно для передачи отчета клиенту — вам не нужно присылать пачку файлов, достаточно одного .erf. При необходимости расширить программную работу с файлами в коде пригодится библиотека функций для работы с двоичными данными.
Иногда разработчики оборачивают данные в объект ХранилищеЗначения перед помещением в макет. В этом случае простое сохранение в файл и переименование не поможет, так как файл будет содержать служебную информацию сериализации 1С.
Проанализируем, как извлечь такие данные. Нам потребуется написать небольшую вспомогательную обработку с кодом:
// Предположим, МакетДанных — это наши двоичные данные из макета
ДанныеИзМакета = ЭтотОбъект.ПолучитьМакет("ИмяМакета");
// Если это ХранилищеЗначения, его нужно разыменовать
Если ТипЗнч(ДанныеИзМакета) = Тип("ДвоичныеДанные") Тогда
// Записываем во временный файл, чтобы потом прочитать как Хранилище
ВремФайл = ПолучитьИмяВременногоФайла();
ДанныеИзМакета.Записать(ВремФайл);
// Пытаемся прочитать как ХранилищеЗначения (если мы уверены в этом)
// В некоторых случаях 1С сама понимает тип при чтении из макета
КонецЕсли;
Важный совет: Всегда проверяйте модуль формы или модуль объекта основного отчета. Найдите в коде обращение к макету по имени (например, через ПолучитьМакет("...")). Обычно рядом с этим местом написан код, который определяет, что делать с этими данными дальше. Там вы точно увидите расширение файла, которое ожидает система.
Если вы столкнулись с макетом «Двоичные данные»:
ПолучитьИмяВременногоФайла("...") — расширение в кавычках и будет искомым.Таким образом, использование двоичных данных — это мощный инструмент для создания модульных и защищенных решений в среде 1С, требующий от программиста навыков анализа структуры файлов и программного взаимодействия с объектами метаданных.