Просмотр ресурсов 1С методами встроенного языка (8.3.9)





Использование новых методов работы с двоичными данными на примере ресурсных файлов 1с.

В последнее время на infostart идет достаточно активное обсуждение внутренних ресурсов платформы и их использование. Решил совместить просмотр всех ресурсов 1с с новыми методами работы с двоичными данными. В результате родилась обработка "Просмотр ресурсов 1с", которая при работе с файлами ресурсов использует только встроенные в платформу (8.3.9) методы. Реализовано только чтение файлов, но ничего не мешает сделать и запись. Пока таких планов нет.

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

Наибольший интерес, наверно, представляют картинки, вытащенные из ресурсов. Но для понимания внутренних механизмов платформы интересны и другие ресурсы: *.f, *.lf, *.xdto и т.д.

Update2: Кардинальная переработка отображения ресурсов:

  1. Теперь можно анализировать ресурсы всех файлов, либо только отмеченных.
  2. Также добавлена возможность отбора по формату, например, отобразить только ресурсы *.epf.
  3. Добавлена возможность сохранения ресурсов с одновременным открытием каталога.
  4. Добавлена возможность открытия ресурсов epf в предприятии.
  5. Добавлено отображение количества файлов и ресурсов.
  6. Значительно увеличена скорость работы обработки.

Update: В связи с тем, что в 8.3.10 изменился формат хранения картинок (они стали в разных масштабах), реализован просмотр zip-архивов. Исправлены найденные ошибки.

6 Comments

  1. artbear

    Интересно.

    Расскажи про скорость работы.

    Reply
  2. r0610201

    (1) artbear, на имеющихся ресурсных файлах практически мгновенно распаковывает.

    Самый большой «8.3.9.1648inmngsrv_root.res» — 12 мегабайт — 0,411 секунды. Объемы маленькие, конечно. Так это я все распаковываю, можно ж по индексу получать только нужный ресурс, будет еще быстрее.

    Reply
  3. SlavaKron

    По-моему, недооцененная обработка.

    Кстати, автор, эти файлы можно экспортировать без использования функций работы с двоичными данными.

    Большинство функций 1С, использующих в качестве параметра какой-либо путь к файлу (КопироватьФайл(), Новый ДвоичныеДанные(), ВнешниеОбработки.Подключить() и т.д.), могут работать и с внутренними ресурсами:

    Например, ВнутреннееИмя = «v8res://» + Родитель.ИмяРесурса + «/» + ТекущиеДанные.ИмяРесурса;

    Где Родитель.ИмяРесурса — часть имени res-файла (для «8.3.9.1648inmngsrv_root.res» — «mngsrv»),

    ТекущиеДанные.ИмяРесурса — имя файла ресурса

    Хотелось бы видеть подобный функционал/интерфейс, как во вложении. Достаочно поискать все res-файлы в папке КаталогПрограммы().

    Reply
  4. r0610201

    Большинство ресурсных файлов делятся на основные и русские, последние имеют постфикс «_ru». Например, есть файлы «mngbase_root.res» и «mngbase_ru.res». В этих файлах есть ресурс «About.lf». Выполнение кода

    КопироватьФайл(«v8res://mngbase/About.lf»,»C:	empAbout.lf»);

    приводит к копированию ресурса из файла ru и я пока не знаю способа, как скопировать файл из root.

    К тому же, было просто интересно изучить возможности работы с двоичными данными, на тот момент они были совсем новыми.

    Reply
  5. r0610201

    (3) Переработал интерфейс, теперь можно анализировать хоть все ресурсные файлы сразу.

    Reply
  6. -vito-

    Отличная штука! Спасибо!

    Отдельно хочу заметить, что распаковка в данной обработке происходит не методом КопироватьФайл(«v8res://….»), как в большинстве подобных разработок, а непосредственным чтением двоичных данных. Как результат, удается распаковать ресурсы, которые другими способами открыть не получается.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *