Новая версия поддерживает распаковку и упаковкуфайлов платформы.
Для распаковки применен параллельный алгоритм.
Если хотите сравнить на Ваших данных попробуйте команды:
—parse — для параллельной распаковки;
-s —parse — для однопоточной распаковки.
Я участвую в разработке кроссплатформенного инструмента для работы с файлами 1С:Предприятие 8.x.
Инструмент для работы с файлами 1CD за авторством Валерия Агеева с адаптацией от сообщества.
На данный момент описание форматов 1С:Предприятие 8.x известны и описаны в том числе на infostart.ru
— //infostart.ru/public/19734/ — Краткое описание формата файлов *.1CD (файловых баз 1Сv8)
— //infostart.ru/public/187832/ — Файловые базы *.1CD. Физическая структура. Восстановление.
— //infostart.ru/public/536343/ — Формат баз 1CD — классические и 8.3.8
В процессе анализа кода проекта tool1cd меня не покидало ощущение, что я не до конца понимаю, как устроен этот самый файл, чтобы разобраться я решил попробовать написать свой распаковщик.
Для реализации я выбрал молодой язык программирования Rust.
Rust — язык для системного программирования без segfault’ов и с гарантиями потокобезопасности.
Более подробно о особенностях языка можно почитать
— Rust (язык программирования)
— The Rust Programming Language
У языка есть свой менеджер пакетов, который называется cargo, одновременно он же и занимается сборкой.
Так же есть реестр пакетов(crate) https://crates.io/.
Для своей разработки за основу я взял проект, который развивает Сергей Батанов — dmpas/v8unpack
Результат моей работы представлен здесь andreevlex/v8unpack-rs
Проект разделен на 2 части (библиотека и консольный проект).
На данный момент
Библиотека
Представляет основные объекты для работы с форматами 1С:Предприятие 8.x.
Пакет опубликован в реестре https://crates.io/crates/v8unpack4rs
Консольный проект
Конкретное применение библиотеки.
Пакет опубликован в реестре https://crates.io/crates/v8unpack
История версий:
Версия 2.1
— поддержка сборки файла контейнера из каталога;
— поддержка сборки файла контейнера из двоичных файлов.
Версия 2.0
— параллельная распаковка файлов контейнеров;
Версия 1.0
— распаковка файлов контейнера
Стоит заметить, что фраза «невероятно быстрый» — если не ложь, то полу-правда. Судя по тестам, на каких-то алгоритмах он, действительно, по скорости превосходит реализации на C или C++, ровно как и наоборот, уступает им на других алгоритмах. Это еще один инструмент для решения задач, проблема лишь в сложности выбора, т.к. для этого потребуется писать сразу на нескольких языках, чтобы сделать замеры.
Если бы Rust уверенно обходил по всем критериям другие языки, то да, временно можно было бы и воспользоваться его преимуществом. Только вот такой резкий «аномальный отрыв» от соперников привлек бы повышенное внимание разработчиков компиляторов популярных языков. И в итоге мы бы смогли получить улучшенную оптимизацию компиляторов типа msvc или gcc. А Rust после такого ушел бы в небытие.
Спасибо за проект и публикацию. Есть над чем подумать.
(1)
Взял цитату с сайта самого языка.
Сам уже разбираюсь с языком продолжительное время и начинаю узнавать его разные стороны.
Есть алгоритмы, которые реализованы меленее чем в C++.
Есть откровенные хаки, так как система владения не позволяет такого.
Я его рассматриваю как еще один инструмент, а не панацею.
интересный проект, вот бы реализацию работы с данными не из 1С, ну к примеру выгрузку таблиц БД, редактор таблиц, статистику.. а то приходится пользоваться несколькими утилитами, так как все они не умеют все сразу..
(4) все эти операции можно провести на чистом SQL 🙂
как запаковать с помощью Вешей итилиты в файл конфигурации ?
вижу только опции распаковки. А в аннотации написано «Альтернативная реализация распаковщика/запаковщика«
(5)Что-то, где-то пропустил. А как работать с файловой базой на чистом SQL? И на каком именно SQL можно работать с файловой базой?
(6)
На данный момент никак.
Моя версия не такая функциональная как оригинал и он думаю не сразу стал таким.
Не добрался весь функционал перенести
Это был больше эксперимент и хотелось представить минимально рабочий прототип.
В следующих версиях постараюсь представить.
(4)
https://github.com/dmpas/tool1cd
Для этого пилим
(4)
Одна из целей, которую мы перед собой ставим — это консолидация усилий сообщества в создании единого набора утилит для работа с форматами 1С Предприятие.
(7) извиняюсь, запутался уже в статьях про оскрипт. Конечно же с файловой базой работать через SQL нельзя.
(0) а у вас с Сергеем есть какой-то roadmap? Когда можно ждать релиза чего-нибудь из ваших грандиозных планов?
P.S. EvilBeaver кается, что не помогает с проектом
(8)
исправьте описание , что реализация анпэк в части распаковки.
Кстати, коллеги уже есть инструмент для распаковки/запаковки cf файлов написанный на RUST —https://github.com/khevse/conf_robber .
По сравнению с v8unpack имеет несколько преимуществ:
1. не падает на больших CF
2. быстро обрабатывает большие CF (производительность v8unpack сильно проседала из за операций с диском)
3. умеет работать с конфигурациями 8.2/8.3 (на v8unpack ловили баги с этим)
Инструмент не был представлен автором сообществу, но открыт для всех желающих попробовать его.
p.s. у автора так же есть аналогичный инструмент написанный на Go, но его не пробовали.
(13)
Не опубликуй я свою поделку, может так и осталось тайной, что есть другой проект написанный на ржавчине =)
(11)
это уже в специальном частике + задачи в проекте можно обсудить.
(13)
в том и проблема! Пока не крикнешь «у меня есть корявый костыль», никто свою нетленку не покажет.
(14) Всё так. Причем инструмент автора используется при подготовке обработки для решенияhttps://infostart.ru/public/382398/ (в части создания обработки).
(16) На Хабре был прикольный цикл статей, чувак сравнивал менталитет наших и омериканских программистов. У нас все стесняются и тихо пилят нетленки, у них принято кричать про каждый написанный говнобатник.
(18)
согласен =)
А чем он лучше/хуже других?
Эх, коллеги! Вашу бы энергию, да в мирных целях! 🙂
Несколько непонятностей:
1) Зачем парсить 1CD вместо парсинга 1Cv8.cf ?
2) Все пишут «быстро разбирает», предлагаю сравнить. Возьмите cf от 1С:КА релиза 1.1.97.1 включите возможность редактирования с сохранением поддержки (платформа 8.2.19.130), сколько времени будет потрачено на разборку и каков получается результат разборки? (мой разобрал за 3 минуты 19 секунд)
3) собирать, жаль, ваш не умеет, но тоже хотелось бы сравнить на той же конфигурации (пункт 2) (мой собрал CF за 17 минут 28 секунд).
4) После разборки конфигурации в пункте 2 есть вопрос по результату разборки: Отчеты, РегламентированныйОтчетРасчетПоСтраховымВзносам, ФормаОтчета2017кв1, Модуль формы
строка 14178 колонка 74 (+/-1) — какой символ в файле, полученном после разборки?
5) Аналогичный вопрос про строку 14180, колонку 52 — какой там символ после разборки?
Есть у вас CF для экспериментов или напишете мне в личку, передам готовую?
(18) Это из-за другого отличия менталитета наших и «омериканских» программистов — у нас принято закидывать какашками, а у них атмосфера намного более дружелюбная.
(21)
а он открыт? доступен простым смертным? иначе это фаллометрия в чистейшем виде получается.
(20) да ничем. Мы тут подумали, что как каждый студент должен написать свою ОС или язык программирования, так каждый одинэсник должен написать свой распаковщик на любимом языке. (это трололо, если что)
(23) Вот бы кто собрал все известные распаковщики и затестил с графиками.
Кто знает, может питон уделает и раст и плюсы )
(25)
тут тонкий момент — всё зависит от среды тестирования. Можно загнать всю конфу в память — будет быстро, но если в тестовой среде мало оперативы, или предполагается одновременный запуск нескольких подобных выгрузок, или оператива хоть и есть, но тут же уходит в своп. v8unpack более-менее оптимизирован для работы в любых условиях, но он вероятнее всего проиграет на конфах до 100МБ любому распаковщику, который считывает конфу целиком в память. Однако его исходник открыт и его в крайнем случае можно оптимизировать под нужды конкретной рабочей среды.
(26) Ну тестирование с графиками в разных условиях как раз и покажет плюсы и минусы. Это будет хоть какая-то объективная оценка. Такие технические оценки даже и не припомню на инфостарте. Хотя лично мне интересны только они.
(23)
Я же доступен, значит желающие смогут через меня потестить exe. А код не open source, деньги плачу за разработку и поддержку.
(25)
Какая в этом польза?
(28)https://github.com/dmpas/v8unpack/releases/tag/v.3.0.40
вот тут можно скачать и потестить в тех же условиях, где работала ваша распаковка.
(29) Какая польза в объективном знании? Не знаю даже что ответить )
(28) Выложите тут ваш cf. Народ затестит свои велосипеды при желании
(30)
Скачал, потестил.
v8unpack -P 1cv8.cf SRC разобрал со скоростью меньше минуты, но лишено смысла его сравнивать с моим V8Parser. Прикладываю картинку, на которой слева — дерево исходников, полученное моим парсером, справа v8unpack. Разницу видите?
Еще, конечно, следовало бы после разборки хоть какую-то сводку выводить, иначе пришлось с секундомером сидеть 🙂
(31)
Замер времени не объективен в данном случае. Смотрите картинку выше — слева парсер, с одним результатом после разбора CF, справа более «быстрый», но совершенно с другим результатом. Какой смысл сравнивать время при разных результатах?
CF сюда не влезет (и запрещено), желающим передам через личку.
(33)
а зачем предлагали сравнить? 😀
(35)
Я лишь задал несколько уточняющих вопросов, а сравнить — это ваша и Александра Цуканова идея в (25).
А начал я с того, что вашу бы энергию, да в мирных целях! 🙂 Каждый ваяет свой велосипед вместо того, чтобы влиться в оплачиваемый проект.
(36)
А дайте ссылку на описание Вашего проекта, а мы посмотрим.
Мой проект был изначально и был задуман как эксперимент, чтобы разобраться с форматом.
(33)
А сделать замер внешними средствами никак? ))
(34) Кидайте в личку
(36) Вы в (21) предложили сравнить.
Сваять свой велосипед — отличный способ разобраться в вопросе. Вы же не будете ругать лабораторные в институте за их велосипедность, правда?
Ну и влиться в оплачиваемый проект, во-первых, никто не предлагал, во-вторых, нет интереса — в опенсурсе есть сообщество, там веселее.
(37)
Документация по проекту в закрытой области «Системы управления требованиями» (RMS). Доступ открывается только при сотрудничестве по разработке и развитию на коммерческой основе (я заказываю и оплачиваю, исполнитель выполняет).
(37)
Достигнутая цель моего проекта — использование парсера в повседневной работе (управление распределенными программными проектами на платформе 1С) в качестве одного из инструментов управления изменениями (RMS+V8Parser+CVS). Обратил внимание на вашу статью, но быстро остыл, так как ваш парсер не умеет собирать, а без сборки разборка не интересна, какой бы быстрой она не была.
Посмотрел v8unpack, но он тоже очень далек от моих уже удовлетворенных потребностей. За статью спасибо, в любом случае.
(40)
Разобрались? Здорово! Могли еще и заработать 🙂 Кстати, о «разобраться в формате» — v8unpack после разобрать/собрать из конфигурации размером 643М собрал конфигурацию, размером 590М.
(40)
Да ладно!? Тут лет 5-10 назад обсуждался v8unpack, да и на других ресурсах были приглашения. Кто-то отреагировал, кому-то «гранаты не той системы». В общем, что теперь это обсуждать?
(38)
Я свой интерес удовлетворил, хватило секундомера 🙂
(40)
согласен. Но сам предложил, сам сравнил. Больше не буду 🙂
(42) Мне вот реально интересно на чем тут можно заработать и на кой вообще сдался распаковщик, когда платформа умеет выгружать/загружать XML
Я могу понять опенсурс под конкретную локальную проблему (сам такое делал), но закрытый инструмент даром не нужен ))
(45)
я говорю об упущенной возможности «разобраться со структурой + заработать».
(45)
Мне был нужен и за его разработку я заплатил. Открытый инструмент, увы, ирушка. До рабочего состояния вряд ли доживет.
GComp.exe в свое время стал отличной альтернативой закрытому инструменту, но это было уже очень давно.
(45)
Умеет, но уже очень много портвейна утекло, пока она этому научилась!
И до сих пор есть ошибки при разборке+сборке в пустую конфигурацию. Да и на некоторых конфигурациях просто валится молча и общая производительность оставляет желать.
1C:EDT — уже более-менее реальная альтернатива, но пока тоже, увы, применима только в экспериментально-исследовательских целях далека еще от промышленного использования.
(46) Сборка разборка даже правильная ничего на дает без внешней поддержки (знающей структуру файлов). Если речь о версионировании, то хранилище никто не отменял.
(33) не видно дерева — просто видно что разбросано по типам метаданных
покажите что внутри =)
(42)
а, ну я тогда не в теме был. Но я смотрю, с тех пор мало что изменилось. В свободном доступе почти ничего, а только ходят всякие и пальцы гнут, что у них есть дорого-богато.
(48)
Вот, например, конечная ветка для одного объекта
ФормаФормаОтчета2017Кв1
CFSRCОтчетыРегламентированныйОтчетРасчетПоСтраховымВзносам
По остальным аналогично.
(47)
Про что речь?
(47)
Штатное имеешь в виду? Поработай с ним через интернет или свяжи с системой управления проектами/требованиями.
(51)
Про то чего нет ))
Вот именно так и работаю )
(52)
Про какую внешнюю поддержку речь?
(52)
Сомневаюсь что именно через интернет. Скорее, по RDP на виртуальное рабочее место + внутри сети (NETBUI), а интеграция со средствами управления требованиями в любом случае внешняя, в крайнем случае 1С:СППР + доработки.
В общем, ожидал от opensource упаковщиков/распаковщиков бОльшего, но понял, что напрасно. Авторы удовлетворили свой интерес к структуре и на этом проекты остановились. Но это только начало пути если говорить о разборке/сборке, до мерянья скоростью еще очень далеко 🙂
(53) Не надо фантазировать. Через интернет я работаю удаленно без RDP, шлюзов и прочего. И работаю так ежедневно.
Мной был написан велосипед за вечер (нагло содран с решения на lua):https://github.com/tsukanov-as/cf
Работает как часы с того вечера 24/7 в одной конторе (для диффа обработок в корпоративном Gogs).
Оно наверно тормозное, да и ошибка там одна есть (порядок вывода модулей меняется так как я в map вместо массива пихаю их), но вот удивительно — оно решает свою задачу на все 100 при смешных затратах на разработку.
А задача конкретная: видеть гитовый дифф модулей бинарных обработок. Все.
На текущем месте работы мне это уже не нужно, так как гит не используется вообще. Хранилище (через интернет, да) тут гораздо удобнее.
Так чего вы там ожидали от опенсурс то? Люди решают свои локальные задачи минимальными усилиями. При этом разбавляют решение фаном (реализация на новом языке).
Нужен механизм понимающий структуру файлов. И подозреваю что у вас его таки нет,
https://github.com/Lead-Bullets/Lead-Radar
ибо хорошо представляю о каких объемах речь:
Сами по себе извлеченные файлы никакой ценности не представляют.
(53)
Что кроме структуры может ваш распаковщик?
(54) мой парсер различает структуры файлов — тексты модулей, формы, таблицы, картинки, xml и прочие. Основная его заслуга — при помощи CVS и RMS связывать изменения (код, структура и т.д.) с требованиями.
От open source распаковщиков ожидал аналог GComp.exe только для v8, но подобного не встретил ни разу.
(56) И где больше сделано, у вас или по ссылке? )
(55) помогает управлять распределенными программными проектами на платформе 1С v8, как один из элементов системы управления требованиями.
(57) по какой ссылке?
У меня конечно больше, как минимум, мнемоничная структура папок и файлов и различает типы. В промышленной эксплуатации уже более 10 лет.
(59) Кто бы сомневался что у вас больше )
Ыыыы
Написал статью про программирование на Rust, взяв за основу реальный проект, а все превратилось в измерение у кого круче функционал. =)
(61) напишите статью про программирование на 1с на форуме про Rust. и поймете , что задачу сформулировали ошибочно.
(61)
Вы, ведь, сами начали с «невероятно быстрый» 🙂
(58)
Как помогает управлять проектами? В статье не нашел ничего про это. И как получение структуры конфигурации позволяет при управлении требованиями?
(64)
Связывает изменения объектов конфигурации с требованиями.
(64)
В какой статье искали?