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.ruwww.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.2024:

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

 

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 не будет опубликован. Обязательные поля помечены *