gifts2017

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

Опубликовал Юрий Пермитин (YPermitin) в раздел Программирование - Инструментарий

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

V8Formats

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

Ссылка на GitHub

Класс V8File

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

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

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

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

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

V8Formats Version 1.0 Copyright (c) YPermitin (ypermitin@yandex.ru) 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.2016:

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

 

TODO

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

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Консольная утилита V8Formats
.exe 31,00Kb
13.02.16
18
.exe 1.0 31,00Kb 18 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Андрей Овсянкин (Evil Beaver) 08.02.16 12:36
Пора на инфостарте заводить новый тег - Yet Another Unpack.

Раз уж дот-нет, то сделайте заодно и Nuget-пакет, чтобы по быстрому можно было подключить.
lustin; Bronislav; JohnyDeath; sorb; kuntashov; artbear; +6 Ответить 2
2. Юрий Пермитин (YPermitin) 08.02.16 13:20
(1) Evil Beaver, возьму на заметку. Почему бы и нет.
3. Сергей Рудаков (fishca) 08.02.16 23:18
Есть проблема с распаковкой конфигурации в 700 МБ, в которой конфигурация поставщика порядка 300 МБ. Причем есть проблема и в v8Unpack-e исходном.
4. Юрий Пермитин (YPermitin) 08.02.16 23:24
(3) fishca, с интересом бы посмотрел на этот CFник.
Можно ли каким-либо законным способом его получить и посмотреть?)
5. Никита Грызлов (nixel) 09.02.16 00:17
(4) YPermitin, буха 3.0 с бит финансом, упп с ним же, erp. Мало что ли огромных типовых.
6. Валерий Агеев (awa) 09.02.16 00:26
(1) Evil Beaver, ты у нас ведешь списки клуба? Может тебе уже публикацию в разделе Лайф сделать и опубликовать полный состав клуба?
7. Егор Иванов (Infactum) 09.02.16 06:41
(6) awa, Я планирую сделать небольшую тему со сравнением всех известных распаковщиков.
8. Сергей Рудаков (fishca) 09.02.16 09:35
(4) да, можно взять конфу ERP2, включить возможность изменения, чтобы конфигурация поставщика появилась "отдельным файлом" и попытаться распаковать.
9. Андрей Д. (bambr1975) 09.02.16 09:55
(8) fishca, рискну заметить, что "исходный" V8Unpack тоже развивается и в его последней версии (которая включена в последний V8Reader) проблема с распаковкой больших конфигураций была решена.
10. Андрей Овсянкин (Evil Beaver) 09.02.16 11:06
(6) awa, не, я ничего такого не веду, зачем оно мне. Более того, у меня еще со времен V8Viewer есть C# библиотека для чтения/записи CF. Только она закрытая.
11. Юрий Пермитин (YPermitin) 09.02.16 11:54
(8) fishca, ок. Разберемся конечно с проблемой.
На GitHub сделал отметку.
12. Алексей Лустин (lustin) 09.02.16 12:05
(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


JohnyDeath; Evil Beaver; YPermitin; +3 Ответить 3
13. Алексей Лустин (lustin) 09.02.16 12:12
(10) Андрей - единственное я подумал, а можно v8format встроить через NuGet напрямую в Oscript.io ? Чтобы было доступно в oscript через код.

Прочитал (1) - вопрос снимается
14. Юрий Пермитин (YPermitin) 09.02.16 12:34
(12) lustin, все очень просто. Для моих задач мне нужен был .NETная реализация.

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

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

Вообщем, .NETная реализация мне была нужна, мы ее с напарником сделали, а теперь бесплатно из без СМС всем предложили.
Кому нужно, тот и будет использовать =)
15. Егор Иванов (Infactum) 09.02.16 13:00
(14) YPermitin, на .NET тоже была реализация уже. Входит в состав Elisy .Net Bridge. Кажется и проект живой еще.
16. Юрий Пермитин (YPermitin) 09.02.16 13:19
(15) Infactum, он вроде как не бесплатный.
17. Сергей Смирнов (Serginio) 09.02.16 13:59
18. Андрей Овсянкин (Evil Beaver) 09.02.16 16:35
(13) lustin, я тогда, раз пошла такая пьянка, свою либу причешу и-таки выложу в nuget. Больше анпаков, хороших и разных (или почти одинаковых, если быть честным)
19. Юрий Пермитин (YPermitin) 09.02.16 17:52
(18) Evil Beaver, будет интересно посмотреть.
20. Артур Аюханов (artbear) 09.02.16 18:25
(18) А смысл? опять потеряешь время :)
а анпаки и правда почти все одинаковы, но наши продукты precommit1c и gitsync, расширяющие функционал анпаков, все равно удобнее и мощнее всех :)
PS это я слегка троллингом занялся
21. Евгений Мартыненков (JohnyDeath) 09.02.16 23:22
В тему анпаков. ИМХО, 1С должна выпустить свой кросплатформенный и многопоточный анпак, который будет раскладывать cf так, как это делает конфигуратор, а не "скобочками со строками". Ес-но всё должно быть отвязано от самой платформы и желательно поставляться отдельно от неё.
22. Андрей Овсянкин (Evil Beaver) 10.02.16 08:09
(19) YPermitin, а чего ее смотреть,она в принципе, опубликована давно: http://sourceforge.net/p/v8reader/code/HEAD/tree Просто есть еще "пишущая" версия, вот ее можно довести до товарного вида и выложить. Хотя, как правильно заметил Артур - смысл какой?
23. Валентин Бомбин (so-quest) 10.02.16 10:06
(21) Формат этих скобочек кто нибудь описал? Будет описание - выгрузку напишут уже быстро.
24. Алексей Ко (Жолтокнижниг) 10.02.16 11:37
(23) so-quest, Написать зная формат/описание не долго. А вот собрать инфу, вот это действительно трудная задача. Даже проведя аналогию с unpack'ами, по описанному алгоритму закодить легко, у меня у самого есть 2 реализации на C# и python.
25. Алексей Ко (Жолтокнижниг) 10.02.16 11:38
(23) so-quest, И надо оно вообще? Есть 8.3 с выгрузкой в xml, там читаемо и можно преобразовывать в "более читаемо"
26. Михаил Болсун (m.bolsun) 10.02.16 13:22
YPermitin, можете где то добавить информацию под какой лицензией распространяется разработка?
27. Юрий Пермитин (YPermitin) 10.02.16 15:13
(26) m.bolsun, я добавлю в ближайшие дни на GitHub и здесь.
Нужно немного подождать =)
28. Юрий Пермитин (YPermitin) 10.02.16 19:04
(26) m.bolsun, текст лицензии добавлен. Используется MIT.
29. Евгений Мартыненков (JohnyDeath) 10.02.16 20:19
(23) so-quest, самое красивое получалось у awa на его закрытом проекте. Но, как он мне сказал при личной встрече, времени работать над всем этим дальше совсем нет.
30. Валентин Бомбин (so-quest) 11.02.16 09:20
(25) Надо. Во первых в хмл не выгрузишь обработку, во вторых сейчас все больше инструментов начинают использовать унпак. А работа с внутренним представлением данных (все эти скобочки) идет наощупь. Изменил,собрал, посмотрел что получилось - и так до бесконечности.
Вот и говорю - требуется некое описание внутреннего формата - это поле отвечает за это, то за то и тип у них такой-то.
(29) Алгоритм разбора epf/cf еще disa_da в лохматом 2009 (или 2008) выложил. С тех пор ничего не поменялось. Принципиально новых вещей не получилось. Потому как мало кому нужно. А те кому нужно - тратят время и ковыряют сами все эти скобочки, циферки....
31. Егор Иванов (Infactum) 11.02.16 09:41
(30) so-quest, распаковка/запаковка обработок в XML обещана в 8.3.8
32. Петр Базелюк (pbazeliuk) 11.02.16 10:36
(12) lustin, https://github.com/pbazeliuk/V8Commit и мой частично выложен для разбора, только с блек-джеком и плагинами. Какая разница на чем написан unpack, если его можно развернуть как веб-сервис.
33. Петр Базелюк (pbazeliuk) 11.02.16 11:47
(20) artbear, уверен моя версия кардинально отличается :)
34. Евгений Мартыненков (JohnyDeath) 11.02.16 12:40
(30) so-quest, именно эту "ощупь" и делал Валерий Агеев
35. Валентин Бомбин (so-quest) 11.02.16 13:20
(34) Эту ощупь делал каждый кто ковырял унпак. И результатов - никто не выложил. Ну а то что есть - либо мало, либо неполно, либо не работет
36. Петр Базелюк (pbazeliuk) 11.02.16 13:23
(35) so-quest, некоторые результаты есть в V8Reader. Но детальный разбор никто не выложит с версионированием по платформам потому, что на этом можно неплохо заработать.
37. Юрий Пермитин (YPermitin) 11.02.16 13:28
(32) pbazeliuk, интересно.
Поразбираюсь с проектом попозже.
38. Валентин Бомбин (so-quest) 11.02.16 13:48
(36) Хоть одну бизнес-идею идею использования внутреннего формата cf|epf назови? что бы на ней можно было неплохо заработать
39. Петр Базелюк (pbazeliuk) 11.02.16 13:52
(38) so-quest, вот когда моя команда выпустит релиз готового продукта назову. А так идеи много стоят.
40. Валентин Бомбин (so-quest) 11.02.16 15:24
Подождем. Если будет успешно - дождемся и открытой реализации :)
41. Michael Rybakin (Mr.Rm) 11.02.16 20:17
(31) Вышла 8.3.8:
Реализована возможность выгружать внешнюю обработку/отчет в файлы (в формате XML).

И по теме Yet Another Unpack:
Реализована возможность изменять размер страницы файла информационной базы (1Cv8.1CD). Размер страницы может быть 4096, 8192, 16384, 32768 и 65536 байт. Информационная база, созданная в версии 8.3.8 и выше, имеет размер страницы 8192 байта и не может быть открыта младшими версиями.
42. Алексей Ко (Жолтокнижниг) 11.02.16 22:58
(41) Mr.Rm, НУ наконец то, все на переделку своих унпаков!!!
43. Егор Иванов (Infactum) 12.02.16 09:37
(41) Mr.Rm, к анпакам это не относится.
А вот утилиты для чтения 1CD придется обновить.
44. Юрий Пермитин (YPermitin) 15.02.16 08:03
Жаль нельзя сделать загрузку файла бесплатно.
Чтобы не тратить стартмани можете скачать последнюю версию консольной утилиты отсюда:
V8Formats на www.develplatform.ru
45. biformatus (biformatus) 22.02.16 15:33
А сделать распаковку EFD в планах нет?
46. Юрий Пермитин (YPermitin) 22.02.16 22:43
(45) biformatus, имеет ли это смысл и какой?
47. biformatus (biformatus) 22.02.16 23:57
Нужно для распаковки обновлений конфигураций в автоматическом режиме (нужна консольная утилита). Ну собственно смысл получить распакованные обновление CFU, сгенерить CF. и т.д.
48. Юрий Пермитин (YPermitin) 23.02.16 08:12
(47) biformatus, ок.
Запишу на будущее посмотреть этот вопрос.
biformatus; +1 Ответить
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа