V8Formats: .NET (C#) реализация V8UNPACK


Еще одна альтернативная реализация распаковщика/запаковщика файлов платформы 1С:Предприятие 8.x форматов *.cf (конфигурация), *.epf (обработка) и *.erf (отчет) на .NET Framework (C#).

V8Formats

Библиотеки на .NET для работы с форматами файлов платформы 1С:Предприятие 8.x

Ссылка на GitHub

Класс V8File

C помощью класса V8File реализована функциональность распаковки в файловую структуру и запаковки в форматы файлов платформы 1С:Предприятие файлов конфигураций (.CF), внешний обработок (.ERF) и внешних отчетов (*.ERT). Возможности аналогичны утилите V8Unpack, написаной на C++ (//infostart.ru/public/15695).

Доступны следующие методы:

  • Inflate и Deflate — распаковка и запаковка произвольных блоков данных.
  • Unpack и Pack — распаковка файла в файловую структуру с минимальной детализацией и запаковка соответственно.
  • Parse и Build — распаковка файла в файловую структуру с большей детализацией по сравнению с предыдущими вариантами команд и запаковка соответственно.

Консольная утилита

В качестве примера использования библиотеки добавлена консольная утилита (для сборки использовался .NET 4.0) со следующим списком доступных команд:

V8Formats Version 1.0 Copyright (c) YPermitin (ypermitin@yandex.ru) www.develplatform.ru PSPlehanov (psplehanov@mail.ru)

Unpack, pack, deflate and inflate 1C v8 file (.cf),(.epf),(*.erf)

V8FORMATS

  • U[NPACK] in_filename.cf out_dirname
  • PA[CK] in_dirname out_filename.cf
  • I[NFLATE] in_filename.data out_filename
  • D[EFLATE] in_filename filename.data
  • E[XAMPLE]
  • BAT
  • P[ARSE] in_filename out_dirname
  • B[UILD] in_dirname out_filename
  • V[ERSION]

Другой пример использования библиотеки

Консольная утилита это хорошо, но хотелось бы более наглядный пример использования. Если Вы со мной согласны, то посмотрите на онлайн-инструмент «Конструктор дополнительных обработок (БСП)».

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

 

Лицензия

Разработка распостраняется по лицензии MIT. Полный текст лицензии на GitHub, там же есть текст на англ. языке.

 

Изменения

13.02.2026:

  • Оптимизирована работа с памятью

 

TODO

В будущем добавявятся возможности работы с форматами файлов *.GRS (включая визуализацию) и *.MXL, а также оптимизация существующего кода в части использования памяти.

P.S. Приложение, а также другие материалы по интеграции через веб-сервисы, использование HTTP-сервисов, создание асинхронных виджетов и многое другое Вы можете найти в моем блоге www.develplatform.ru

50 Comments

  1. Evil Beaver

    Пора на инфостарте заводить новый тег — Yet Another Unpack.

    Раз уж дот-нет, то сделайте заодно и Nuget-пакет, чтобы по быстрому можно было подключить.

    Reply ↓
  2. YPermitin

    (1) Evil Beaver, возьму на заметку. Почему бы и нет.

    Reply ↓
  3. fishca

    Есть проблема с распаковкой конфигурации в 700 МБ, в которой конфигурация поставщика порядка 300 МБ. Причем есть проблема и в v8Unpack-e исходном.

    Reply ↓
  4. YPermitin

    (3) fishca, с интересом бы посмотрел на этот CFник.

    Можно ли каким-либо законным способом его получить и посмотреть?)

    Reply ↓
  5. nixel

    (4) буха 3.0 с бит финансом, упп с ним же, erp. Мало что ли огромных типовых.

    Reply ↓
  6. awa

    (1) Evil Beaver, ты у нас ведешь списки клуба? Может тебе уже публикацию в разделе Лайф сделать и опубликовать полный состав клуба?

    Reply ↓
  7. Infactum

    (6) awa, Я планирую сделать небольшую тему со сравнением всех известных распаковщиков.

    Reply ↓
  8. fishca

    (4) да, можно взять конфу ERP2, включить возможность изменения, чтобы конфигурация поставщика появилась «отдельным файлом» и попытаться распаковать.

    Reply ↓
  9. bambr1975

    (8) fishca, рискну заметить, что «исходный» V8Unpack тоже развивается и в его последней версии (которая включена в последний V8Reader) проблема с распаковкой больших конфигураций была решена.

    Reply ↓
  10. Evil Beaver

    (6) awa, не, я ничего такого не веду, зачем оно мне. Более того, у меня еще со времен V8Viewer есть C# библиотека для чтения/записи CF. Только она закрытая.

    Reply ↓
  11. YPermitin

    (8) fishca, ок. Разберемся конечно с проблемой.

    На GitHub сделал отметку.

    Reply ↓
  12. lustin

    (10) а вот я принципиально не понимаю… «нахрена» ? Самое удивительное — что Юрий вроде в курсе всей движухи и давно на GitHub и G+

    Это на моей памяти 8-ой unpack’er…

    Потому что нужно на .NET, а С++ это зло ?

    Как учил великий steban — С++ код можно использовать в C# проектах в виде unmanagment вставок.

    Можно ведь делать обертки над libv8unpack.

    Ох… Грусто…

    P.S. Грусто от того сколько Юрий потратил времени на крутую вещь… Но блин. Мы не сможем отказаться от v8unpack в сторону .NET: потому как благодаря dm_pass у нас есть её gcc порт под linux и есть пакеты под linux если кто забыл

    https://github.com/dmpas/v8unpack

    Reply ↓
  13. lustin

    (10) Андрей — единственное я подумал, а можно v8format встроить через NuGet напрямую в Oscript.io ? Чтобы было доступно в oscript через код.

    Прочитал (1) — вопрос снимается

    Reply ↓
  14. YPermitin

    (12) lustin, все очень просто. Для моих задач мне нужен был .NETная реализация.

    Почему не использовал unmanagment код? По правде говоря использовал, в начале сборка была «неуправляемой».

    «Неуправляемая» библиотека была сделана в середине прошлого года, потом почти сразу же портирована полностью на .NET.

    Согласитесь, что использовать неуправляемый код там, где его можно легко портировать на управляемый — это настоящий костыль.

    Никто никого не заставляет отказываться от CPPшной реализации. Тем более она работает быстрее этой сборки.

    Вообщем, .NETная реализация мне была нужна, мы ее с напарником сделали, а теперь бесплатно из без СМС всем предложили.

    Кому нужно, тот и будет использовать =)

    Reply ↓
  15. Infactum

    (14) на .NET тоже была реализация уже. Входит в состав Elisy .Net Bridge. Кажется и проект живой еще.

    Reply ↓
  16. YPermitin

    (15) Infactum, он вроде как не бесплатный.

    Reply ↓
  17. Serginio

    (12) Есть .Net Core для кроссплатформенных приложений

    Запускаем ASP.NET Core приложение под Linux

    Reply ↓
  18. Evil Beaver

    (13) lustin, я тогда, раз пошла такая пьянка, свою либу причешу и-таки выложу в nuget. Больше анпаков, хороших и разных (или почти одинаковых, если быть честным)

    Reply ↓
  19. YPermitin

    (18) Evil Beaver, будет интересно посмотреть.

    Reply ↓
  20. artbear

    (18) А смысл? опять потеряешь время 🙂

    а анпаки и правда почти все одинаковы, но наши продукты precommit1c и gitsync, расширяющие функционал анпаков, все равно удобнее и мощнее всех 🙂

    PS это я слегка троллингом занялся

    Reply ↓
  21. JohnyDeath

    В тему анпаков. ИМХО, 1С должна выпустить свой кросплатформенный и многопоточный анпак, который будет раскладывать cf так, как это делает конфигуратор, а не «скобочками со строками». Ес-но всё должно быть отвязано от самой платформы и желательно поставляться отдельно от неё.

    Reply ↓
  22. Evil Beaver

    (19) а чего ее смотреть,она в принципе, опубликована давно: http://sourceforge.net/p/v8reader/code/HEAD/tree Просто есть еще «пишущая» версия, вот ее можно довести до товарного вида и выложить. Хотя, как правильно заметил Артур — смысл какой?

    Reply ↓
  23. so-quest

    (21) Формат этих скобочек кто нибудь описал? Будет описание — выгрузку напишут уже быстро.

    Reply ↓
  24. Жолтокнижниг

    (23) so-quest, Написать зная формат/описание не долго. А вот собрать инфу, вот это действительно трудная задача. Даже проведя аналогию с unpack’ами, по описанному алгоритму закодить легко, у меня у самого есть 2 реализации на C# и python.

    Reply ↓
  25. Жолтокнижниг

    (23) so-quest, И надо оно вообще? Есть 8.3 с выгрузкой в xml, там читаемо и можно преобразовывать в «более читаемо»

    Reply ↓
  26. m.bolsun

    YPermitin, можете где то добавить информацию под какой лицензией распространяется разработка?

    Reply ↓
  27. YPermitin

    (26) m.bolsun, я добавлю в ближайшие дни на GitHub и здесь.

    Нужно немного подождать =)

    Reply ↓
  28. YPermitin

    (26) m.bolsun, текст лицензии добавлен. Используется MIT.

    Reply ↓
  29. JohnyDeath

    (23) so-quest, самое красивое получалось у awa на его закрытом проекте. Но, как он мне сказал при личной встрече, времени работать над всем этим дальше совсем нет.

    Reply ↓
  30. so-quest

    (25) Надо. Во первых в хмл не выгрузишь обработку, во вторых сейчас все больше инструментов начинают использовать унпак. А работа с внутренним представлением данных (все эти скобочки) идет наощупь. Изменил,собрал, посмотрел что получилось — и так до бесконечности.

    Вот и говорю — требуется некое описание внутреннего формата — это поле отвечает за это, то за то и тип у них такой-то.

    (29) Алгоритм разбора epf/cf еще disa_da в лохматом 2009 (или 2008) выложил. С тех пор ничего не поменялось. Принципиально новых вещей не получилось. Потому как мало кому нужно. А те кому нужно — тратят время и ковыряют сами все эти скобочки, циферки….

    Reply ↓
  31. Infactum

    (30) so-quest, распаковка/запаковка обработок в XML обещана в 8.3.8

    Reply ↓
  32. pbazeliuk

    (12) lustin, https://github.com/pbazeliuk/V8Commit и мой частично выложен для разбора, только с блек-джеком и плагинами. Какая разница на чем написан unpack, если его можно развернуть как веб-сервис.

    Reply ↓
  33. pbazeliuk

    (20) artbear, уверен моя версия кардинально отличается 🙂

    Reply ↓
  34. JohnyDeath

    (30) so-quest, именно эту «ощупь» и делал Валерий Агеев

    Reply ↓
  35. so-quest

    (34) Эту ощупь делал каждый кто ковырял унпак. И результатов — никто не выложил. Ну а то что есть — либо мало, либо неполно, либо не работет

    Reply ↓
  36. pbazeliuk

    (35) so-quest, некоторые результаты есть в V8Reader. Но детальный разбор никто не выложит с версионированием по платформам потому, что на этом можно неплохо заработать.

    Reply ↓
  37. YPermitin

    (32) pbazeliuk, интересно.

    Поразбираюсь с проектом попозже.

    Reply ↓
  38. so-quest

    (36) Хоть одну бизнес-идею идею использования внутреннего формата cf|epf назови? что бы на ней можно было неплохо заработать

    Reply ↓
  39. pbazeliuk

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

    Reply ↓
  40. so-quest

    Подождем. Если будет успешно — дождемся и открытой реализации 🙂

    Reply ↓
  41. Mr.Rm

    (31) Вышла 8.3.8:

    Реализована возможность выгружать внешнюю обработку/отчет в файлы (в формате XML).

    И по теме Yet Another Unpack:

    Реализована возможность изменять размер страницы файла информационной базы (1Cv8.1CD). Размер страницы может быть 4096, 8192, 16384, 32768 и 65536 байт. Информационная база, созданная в версии 8.3.8 и выше, имеет размер страницы 8192 байта и не может быть открыта младшими версиями.
    Reply ↓
  42. Жолтокнижниг

    (41) Mr.Rm, НУ наконец то, все на переделку своих унпаков!!!

    Reply ↓
  43. Infactum

    (41) Mr.Rm, к анпакам это не относится.

    А вот утилиты для чтения 1CD придется обновить.

    Reply ↓
  44. YPermitin

    Жаль нельзя сделать загрузку файла бесплатно.

    Чтобы не тратить стартмани можете скачать последнюю версию консольной утилиты отсюда:

    V8Formats на http://www.develplatform.ru

    Reply ↓
  45. biformatus

    А сделать распаковку EFD в планах нет?

    Reply ↓
  46. YPermitin

    (45) biformatus, имеет ли это смысл и какой?

    Reply ↓
  47. biformatus

    Нужно для распаковки обновлений конфигураций в автоматическом режиме (нужна консольная утилита). Ну собственно смысл получить распакованные обновление CFU, сгенерить CF. и т.д.

    Reply ↓
  48. YPermitin

    (47) biformatus, ок.

    Запишу на будущее посмотреть этот вопрос.

    Reply ↓
  49. tsukanov

    (7) Вот еще на Go: https://github.com/tsukanov-as/cf

    🙂

    Reply ↓
  50. YPermitin

    (49) + =)

    Reply ↓

Leave a Comment

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