logo


Все мы любим ресурсы. А еще больше любим, когда ресурсов много. В этом плане прошлые версии 1С были просто кладезем - все ресурсы хранились в стандартном для Windows виде ресурсных dll, и любой просмотрщик ресурсов мог любезно показать нам все диалоги, строки, картинки 1С.

Однако, с некоторых пор вместо православных dll в каталоге bin появилась кучка файлов res - с которыми было вообще непонятно, что делать. Однако, проведенные исследования показали, что не все так страшно.

Итак, файлы res в 1С есть не что иное, как так называемые "resorce bundles" от ICU - International Components for Unicode, опенсорсной библиотеки от IBM для работы с юникодом и т.п. Подробное описание можно найти здесь. Там довольно много всякого мудреного английского текста, поэтому объясню вкратце - это файлы вполне открытого формата, позволяющие организовать хранение ресурсов для разных языков. Если программа запрашивает какой-либо ресурс, то он сначала ищется в файле ресурсов для заданного языка (например xxx_ru.res), а если там не найден, то в базовом файле (xxx_root.res). Самое главное то, что в ICU входят инструменты как для разборки, так и для сборки таких файлов.

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

Для разборки res-файла в удобочитаемый формат в состав ICU входит утилита derb.exe. К сожалению, в ней есть одна ошибка - укорачиваются строки, содержащие в себе перевод строки, и одно неудобство - бинарные данные также выводятся в текстовый файл в виде hex-дампа.

К счастью, ICU - опенсорсная, так что все это я поправил, и выкладываю здесь уже исправленную derb.exe.

Здесь я опишу порядок действий на примере разборки/сборки файла config_ru.res

Сначала скачиваем и устанавливаем ICU. В каталоге bin установленного ICU заменяем derb.exe на приложенный файл.

Далее для простоты я делаю так:

Помещаю ресурсный файл в каталог bin ICU (где derb лежит), создаю подкаталог, например unpuck, запускаю разборку:

derb -d unpuck -i . config_ru.res

В каталоге unpuck появляется config_ru.txt - это файл с описанием ресурсов. Строковые ресурсы лежат непосредственно в нем, бинарные ресурсы распаковываются в виде файлов в тот же каталог unpuck. В-основном, это изображения, и файлы с расширением .f - формы.

Что делать с изображениями, понятно и без пояснений, а вот что делать с формами? Вот тут то и становится понятно, почему эта статья размещена на сайте Снегопата :)

В объектной модели Снегопата есть метод:

designInternalForm(путьКФайлуФормы)
Пользуясь этим методом, можно открыть файл формы для редактирования в Конфигураторе. Сразу замечу, что это так называемые "внутренние" формы, те, которые используются самим движком V8 для своих форм, и редактор несколько отличается от привычного редактора форм. Кроме того, мне так и не удалось побороть вылет при попытке передвинуть элемент управления мышкой, так что аккуратнее.

Для сборки ресурсов обратно в каталоге bin ICU выполняю команду:

genrb -s unpuck -d unpuck -i . config_ru.txt

Собранный файл - unpuck\config_ru.res

Ну а вот и один из результатов работы (собственно, из-за этого и пришлось все это ковырять) - запускалка для обычных пользователей:


17.11.2011 07:30:57 Billi добавил:
Класс! Спасибо!


17.11.2011 11:54:57 artbear добавил:
А где эта "запускалка"? что-то я ее не вижу в Снегопате :(


17.11.2011 13:03:22 kuntashov добавил:
Артур, как я понял, имеется в виду штатная "запускалка" (1СEstart.exe). А Александр описал, как это проделать as is.


30.05.2013 18:26:53 gridmis добавил:
derb -d unpuck -i . config_ru.res

derb: error 2 while opening resource file: U_MISSING_RESOURCE_ERROR