Декомпилятор файлов конфигурации, внешних отчетов и обработок 1С Предприятия 8.х

Утилита предназначена для организации удобного хранения метаданных 1С Предприятия в системах контроля версий (svn, git, mercurial,…). Выполняет декомпиляцию файлов совместимого с CF формата в текстовые файлы. Для файлов конфигураций, внешних отчетов и обработок создается структура каталогов, повторяющая структуру метаданных исходного файла.

Ближайшими аналогами являются v8Unpack и CfProject. От них утилиту отличает распаковка в структуру каталогов соответствующую структуре объектов с обработкой всех данных исходного файла.

Установка и запуск.

Для запуска необходимо наличие Java версии 1.7 и выше.

Скачать и распаковать архив v8cf.zip

Пример запуска

java -jar v8cf.jar -f 1Cv8.cf -d decode

Вывод справки по ключам

java -jar v8cf.jar -h

26 Comments

  1. fishca

    Сборки пока нет в наличии?

    Reply
  2. shmalevoz

    Обратная компиляция в планах. Как руки дойдут =)

    Reply
  3. so-quest

    Сырцы где-то можно глянуть? или закрытый проект?

    Проблема с длинными именами файлов как-то решена?

    Работает для всех версий платформы или только какой-то одной?

    Reply
  4. shmalevoz

    (3) so-quest, Сырцы включены в архив, проект живет на битбакете, но здесь запрещено давать ссылки на внешние ресурсы.

    Насчет длинных имен проблем не имел, не упирался в ограничения ФС.

    Проверялось на 8.2, 8.3. На 8.0 и 8.1 тоже должно работать. Не думаю что на 8.2 поменяли идентификаторы. Если речь о системе, то поскольку java, то кроссплатформенно.

    Reply
  5. Evil Beaver

    Добро пожаловать в клуб авторов «еще одного распаковщика» (http://forum.infostart.ru/forum24/topic132213/message1365501/#message1365501)

    У меня один вопрос: зачем нам еще один? Может быть, вы еще не в курсе проектов v83unpack, precommit1C и других? Я как бы не критикую, вроде, судя по скриншотам, у вас все замечательно сделано. Просто это еще один изобретенный велосипед. Сообщество уже прошло этот путь. А вот разобрался бы кто в форматах «скобочек» {0,0,{}} для чтения метаданных, да еще бы задокументировал — вот было бы отлично!

    Reply
  6. minimajack

    (5) Evil Beaver, тут возникают ньюансы…

    для того что бы обрабатывать {0,{}} — нужны внутренние классы 1С. По крайней мере перечисления и гуиды.

    Все можно получить но возникают вопросы правового характера. Имеем ли мы право выкладывать классы 1С(перечисления), использовать их гуиды.

    Я таки добился кодогенерации на основании описания хелпа…но вопрос можно ли это публиковать?

    Скрытый текст
    Reply
  7. Evil Beaver

    (6) minimajack, А почему нет? Гуиды вряд-ли являются интеллектуальной собственностью.

    Reply
  8. shmalevoz

    (5) Evil Beaver, Изначально создавалось конечно как форк v8unpack с прицелом на кроссплатформенность и более разумное потребление памяти. v83unpack и precommit, насколько понимаю, требуют наличия установленной 1С для распаковки, здесь же небольшая утилита сама в себе, для работы ничего кроме java не требуется.

    Хотя конечно изобретение велосипеда присутствует =)

    Reply
  9. minimajack

    (7) Evil Beaver, ньюанс еще в том что реализация классов в 1С меняется с версией и то что было актуально вчера — сегодня уже неправда…

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

    Reply
  10. so-quest

    (9) генерировать то можно, было бы из чего. У тебя случайно нет описания что за что отвечает во внутреннем представлении? а то разобраться в списке этих безумных гуидов — достаточно сложно…

    Reply
  11. pumbaE

    На bitbucket проект по поиску находится. Понравилось, что не просто распаковать, но хоть и с помощью регулярок происходит попытка распарсить наименования. Жаль что 1с управляемые формы все-таки не в xml хранит, все в том же скобочном формате.

    Reply
  12. minimajack

    (10) so-quest, что значит отвечает?

    список UUID — Класс(Тип) ? Если да то можно глянуть тут https://www.assembla.com/spaces/V8Unpack/wiki/%D0%A1%D1%82%D0%B0%D1%82%D0%B8%D1%8­7%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_GUID

    Reply
  13. baton_pk

    (8)

    форк v8unpack с прицелом на кроссплатформенность и более разумное потребление памяти

    да, и такие есть уже в нашем «клубе» 🙂

    (6) minimajack,

    кодогенерация на основании помощи — это скользкое место. в синтаксис-помощнике описаны поля, которые используются в режиме выполнения, а в модели сериализации их может и не быть. или типа они какого-нибудь другого. я тут тоже кодогенерирую на досуге 🙂

    правда я XML-выгрузку разбираю.

    (9) minimajack,

    то что было актуально вчера — сегодня уже неправда…

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

    Reply
  14. so-quest

    (12) ну вот смотри — открываем root и видим

    {2,a73b50b7-09a5-48f1-80d0-b4ce9f6116cb,} (это внешняя обработка)

    гуид — имя контейнера где содержиться описанаине обработки. А что такое 2? и что за параметр отсутствует на 3 месте?

    Далее открываем контейнер на который указывает гуид. Вопрос — как этот список перевести в структуру с вменяемым названием полей? Точнее — может у кого-то есть такое описание? перегнать уже не вопрос.

    Reply
  15. so-quest

    Даже элементарно — значения каких типов может встречаться в списке? Число, гуид и строка — это понятно. но иногдаи такие определения встречаются

    «{2,574413f5-39e6-49e1-9044-2c1bd9dec82e,zRHGIBkZn+NhFh/zXRfSRjnbA26J8ygBPspPWuLnv/YEc0cQDMWSghycggIx­aQ1N

    9DI74TeU39DSB6wmH82VrQ==}» — вот 3 параметр — что за тип?

    Reply
  16. baton_pk

    (15) so-quest,

    очевидно, там просто двоичные данные, зашифрованные Base64.

    Reply
  17. minimajack

    (14) so-quest, было бы описание — уже давно бы перегнали. А так надо разбираться со всеми типами.

    Встречаемые примеры сериализации:

    Число ( 1 | -1)
    Cтрока («f» | «»»f»»f»)
    UUID
    List (0 | 1,1 | 2,1,1 )
    Map (0 | 1,1,1 | 2,1,1,2,1 )
    Object ({} | {1})
    Enum
    Array — ( 1,1,1,1 | {1},{1},{1})
    Reply
  18. Evil Beaver

    (8)

    v83unpack и precommit, насколько понимаю, требуют наличия установленной 1С для распаковки, здесь же небольшая утилита сама в себе, для работы ничего кроме java не требуется

    v83unpack и precommit я упомянул, как уже относительно взрослые решения, с которыми можно работать и решать прикладные задачи, того-же код-ревью. Дело в том, что v83unpack синхронизирует в гит XML-выгрузку конфигурации, а она гораздо более читаемая и толку от нее больше. Поэтому, я и говорю, что если бы независимая отдельная утилита умела парсить скобочки в человекочитаемый формат — было бы круто. А утилит, создающих просто «скобочные» файлы — уже много, и имхо, кроме исследовательского интереса ничего не привносят в работу 1С-ника. Со скобочным форматом работать тяжело. Ну распаковали, в гит сложили, а дальше?

    Кстати, новые веяния говорят, что скоро и платформа сама сможет делать то, что делает precommit и v83unpack из коробки. http://v8.1c.ru/o7/201507xml/index.htm

    @pumbaEO, большой брат все-таки признал, что ты готовишь выгрузку исходников правильнее 🙂

    Reply
  19. pumbaE

    (18) Evil Beaver, первьій раз я про это говорил еще в мае 2013 на инфостарте, после выхода edt напомнили зарегистрировав ошибку при выгрузке ERP 2.0 и они признались, что данный баг у них уже как 2 года висит (только они его никому не показывают).

    Reply
  20. Evil Beaver

    (19) pumbaE, баг с длинными именами или какой? С именами это баг винды вроде как 🙂

    Reply
  21. pumbaE

    (20) Evil Beaver, с длинными именами одного файла. Подсистема1.Подсисетема2.Подсистема3 и т.д.

    Reply
  22. minimajack
    Reply
  23. logarifm

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

    Непонимаю….

    Reply
  24. Evil Beaver

    (24) gavrikprog, вы кагбэ о чем вообще?

    Reply
  25. profite

    Что делаю не так выдает вот эту ошибку, см скрин.

    Reply
  26. farkhod

    Ошибка при декомпиляции

    Exception in thread «main» java.lang.NoClassDefFoundError: ru/shmalevoz/utils/Log

    at ru.shmalevoz.v8cf.Main.<clinit>(Main.java:35)

    Caused by: java.lang.ClassNotFoundException: ru.shmalevoz.utils.Log

    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)

    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)

    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)

    Reply

Leave a Comment

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