В практике разработки на платформе 1С:Предприятие 8 встречаются ситуации, когда при анализе внешней обработки или отчета вы не обнаруживаете основной логики в модуле объекта или модуля менеджера. Вместо этого в списке макетов присутствуют элементы с типом Двоичные данные, а в коде встречаются обращения к ним. Рассмотрим подробнее, как устроена такая архитектура, зачем она применяется и, самое главное, как извлечь этот «скрытый» код для анализа или отладки.
Чаще всего такой подход используют разработчики универсальных решений (например, модули электронного документооборота Диадок, банковские модули обмена ВТБ или Сбербанк). Проанализируем основные причины использования этой технологии:
Чтобы понять, что логика скрыта именно в макете, проанализируем программный код основной обработки. Обычно в ней присутствует процедура, которая извлекает данные на диск. Посмотрим на типовой пример кода, который выполняет подобные действия:
Процедура МетодСервера()
// Получаем двоичные данные из макета
ДанныеМакета = ЭтотОбъект.ПолучитьМакет("ВспомогательныйМодуль");
// Формируем путь во временном каталоге
ПутьКФайлу = КаталогВременныхФайлов() + "InternalModule.epf";
// Записываем данные на диск
ДанныеМакета.Записать(ПутьКФайлу);
// Подключаем внешнюю обработку программно
ВнешняяОбработкаОбъект = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
// Вызываем экспортный метод из модуля скрытой обработки
ВнешняяОбработкаОбъект.ВыполнитьДействие();
КонецПроцедуры
В данном примере мы видим, что объект ВнешниеОбработки используется для динамического создания объекта из файла, который только что был извлечен из макета ВспомогательныйМодуль. Это и есть та самая «матрешка», о которой шла речь в обсуждении.
Если вам необходимо изучить алгоритм, зашитый в макет, выполните следующие шаги. Рассмотрим наиболее простые и эффективные способы.
Поскольку обработка обязана сохранить файл на диск перед запуском, мы можем «перехватить» его в файловой системе. Разберем алгоритм действий:
%TEMP%..epf или .erf с именами, похожими на те, что встречаются в коде (например, v8_2D34_5.epf).Если вы хотите получить файл гарантированно и с понятным именем, можно немного модифицировать код основной обработки в Конфигураторе. Найдите место, где происходит получение макета, и добавьте строку записи на диск в удобное вам место:
МакетСКодом = ЭтотОбъект.ПолучитьМакет("ИмяВашегоМакета");
ПутьДляСохранения = "C:\Debug\ExtractedModule.epf";
МакетСКодом.Записать(ПутьДляСохранения);
Сообщить("Файл успешно извлечен в: " + ПутьДляСохранения);
После этого запустите обработку, и файл будет ждать вас по указанному пути. Это самый надежный метод, если вы не хотите искать файл среди сотен временных объектов системы.
Проанализируем ситуацию: вы извлекли файл extracted.epf, открыли его, но как заставить отладчик остановиться на точке останова внутри этого файла, если он запускается основной обработкой? Это важный нюанс. Рассмотрим, как это сделать правильно:
ВнешниеОбработки.Создать(). Если путь к файлу там формируется динамически (с использованием случайных имен), измените код так, чтобы он всегда обращался к вашему извлеченному файлу (например, C:\Debug\ExtractedModule.epf).Не только Двоичные данные могут содержать исполняемый код. Рассмотрим альтернативные варианты, которые также могут встретиться в сложных конфигурациях:
Макет.ПолучитьТекст() и запускается через оператор Выполнить(ТекстМакета). Чтобы посмотреть такой код, достаточно просто открыть макет в Конфигураторе.onhelp или специфические события форм.Важный момент: если при попытке открыть извлеченную обработку Конфигуратор запрашивает пароль, значит, разработчик применил защиту. В этом случае чтение модуля стандартными средствами будет невозможно без специальных инструментов декомпиляции или знания пароля.
Подведем итог: использование макетов как хранилищ модулей — это мощный инструмент для создания переносимых и универсальных внешних решений в экосистеме 1С. Понимание механизмов работы с объектами ДвоичныеДанные и методами их программного подключения позволяет эффективно проводить аудит кода и адаптировать сложные интеграционные решения под нужды конкретного бизнеса.