Java v8unpack
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
InDev
Основные отличия:
- распаковывает данные сразу
- работает в несколько потоков
не сохраняет заголовки файловуже сохраняет- пожирает память нещадно
Документация
По проекту:
Project documentation
Java-doc api:
API-doc
Сборка:
git clone https://github.com/MinimaJack/com.minimajack.v8.cf.reader.git
cd com.minimajack.v8.cf.reader
mvn clean compile assembly:single
Забирать из папки ./target/
Для сборки необходимо:
- maven 3.+
- JDK 1.8+
Запуск:
для распаковки:
unpack.bat test.epf ./unpacked/
или
java -jar com.minimajack.v8.cf.reader-0.0.1-SNAPSHOT-jar-with-dependencies.jar %file% %path%
для упаковки
pack.bat ./unpacked/ test.epf
java -jar com.minimajack.v8.cf.reader-0.0.1-SNAPSHOT-jar-with-dependencies.jar %path% %file%
P.S. В первую очередь предназначается для обучения
04.06.2015 Причесал немного код. Выделил библиотеку отдельно, демо пример отдельно.
Исходники:
Библиотеки - https://github.com/MinimaJack/com.minimajack.v8.format
Демо пример, он же распаковщик - https://github.com/MinimaJack/com.minimajack.v8.cf.reader.git
10.06.2015 Обновил файл
26.06.2015 Обновил ссылки на библиотеки
20.04.2017 Демо пример переделан на fork/join pool
26.04.2017 Демо пример переделан, добавлена возможность кеширования файлов по дате модификации которая по умолчанию влючена. Что бы отключить необходимо третьим параметром передать стратегию NONCACHE
28.04.2017 Демо пример переделан с возможностью иерархического построения проекта, без изменения именований.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)
Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.
50000 руб.
10.09.2026 13826 124 0
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.
24900 руб.
20.08.2024 83404 432 171
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 285961 1608 423
Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Разработчик Аналитик Руководитель проекта 1С 8.3 Платные (руб)
Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.
14000 руб.
17.04.2026 16941 63 62
Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)
Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26
22570 руб.
06.10.2023 44288 122 54
Инструментарий разработчика Нейросети Платные (руб)
Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.
15250 руб.
25.08.2025 77106 147 41
Разработка Инструментарий разработчика Разработчик Руководитель проекта 1С 8.3 Платные (руб)
Pilot 1C превращает задачу, поставленную обычными словами, в техническое задание, код на встроенном языке и сценарии проверки. Прежде чем что-то предложить, он сверяется с устройством вашей конфигурации через граф Analyzer 1C: существует ли объект, из чего он состоит, кто его вызывает, какие роли дают права. Чего найти не удалось – спрашивает, а не выдумывает. Готовый код проходит более полутора сотен проверок по справочнику языка и стандартам разработки, который приезжает вместе с продуктом. Модель – ваша: любой сервер, совместимый с программным интерфейсом OpenAI, в том числе локальный. Правки в конфигурацию Pilot не вносит – их применяет разработчик.
18300 руб.
11.09.2026 3813 5 0
Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.
17000 руб.
10.11.2023 28811 103 46
Программирование на Java - как глоток свежего воздуха.
ps Будут вопросы, задавайте - с удовольствием отвечу.
По ссылке error 404
P.S. не удивлюсь, если есть уже решение, но в public не выложено.
1. Нормальный разбор: нормальные имена, структура папок
2. Нормальную сборку - именно низкоуровневую, даем файлы -> получаем упакованный результат.
3. Полную разборку в папки и сборку - подобно xml выгрузки, загрузки
Для меня сейчас важнее 2 пункт, но хотелось бы узнать мнение других людей.
ну, с этим долго возиться вряд ли придётся. тут поле уже пахано-перепахано.
а вот разбирать всё это дело в понятный формат - вот это действительно требует основательного погружения.
опять же с форматом...что считать нормальным...какой он нормальный . Возможно использовать родной 1с-кий, возможно придумать что то свое...
Плюс, их совместный проект с awa - MetaRead, ссылку не помню.
(18) Evil Beaver, жаль MetaRead не нашел, описание метаданных ускорило бы разработку
пока, как пример, можно смотреть на распаковщик...тем более как ее собираются использовать я не знаю. Будут вопросы задавайте.
фактически вся логика находится в двух файлах:
Логика пока такая:
создаем рутовый контекст -> создаем рутовый контейнер -> указываем в контексте реализацию ридера и просим распарсить данные.
все остальные файлы, лишь для удобства и скорости работы(работа в несколько потоков и прочее).
Java-doc api
CI - нет сервера.
Метрики пока не нужны.
Тестов - пока тоже нет.
Java-doc - пока без описания, только вызовы и методы
я делаю упаковку из файлов и естественно тестирую ....
распаковал нормальную обработку -> упаковываю -> снова распаковываю уже упакованую своей обработкой
так вот у меня все ок - все распаковывается, все на месте до байтика...
а вот 1С упорно не желает пользоваться - видит зуб да неймет
Распаковал упп -> запаковал обратно -> конфигурация открылась
теперь о минусах...
перепакованная версия открывается(сравнение объединение) дольше - необходимо время на изыскания...скорее всего дело в выравнивании, порядке данных и правильной сегментации
упаковка происходит в один поток, памяти жрет меньше, есть простор для оптимизации
выводы:
для внешних обработок подходит
для полноценных конфигураций пока нет
упаковывать аналогично распаковке -> только меняется местами параметры
распаковать: %file% %path%
упаковать: %path% %file%
1. Нормальный разбор: нормальные имена, структура папок
2. Скорость упаковки, работы 1С с упакованным файлом?
голосуем
Ввиду "оживленного" обсуждения, решил заняться разбором метаданных - "{0,{}}".
Инструментарий будет в отдельном проекте.
На текущий момент реализовано чтение: строки, числа, булево, массива, списка, хешмап, UUID, перечислений, объектов(с разбором полей). На выходе получаем заполненный экземпляр класса, со всеми полями. Пока реализовано только чтение; запись будет реализована позже. Запись скорее всего будет в XML формат - ближе к 1С-кому.
Проекты будут связанны "format.cf" - чтение файлов, "format.???" - описание классов, сериализация-десериализация.
Скорость - пока на второй план, много времени занимает именно кодинг классов.
Пример реализации класса - "описания" реквизита:
Скрытый текст |
|---|
/**
* Режим пароля
*/
public Boolean passwordMode;
/**
* Форматная строка
*/
public V8Synonym format;
/**
* Подсказка
*/
public V8Synonym tooltip;
/**
* Выделять отрицательные
*/
public Boolean markNegatives;
/**
* Маска
*/
public String mask;
/**
* Многострочный режим
*/
public Boolean multiLine;
/**
* Минимальное значение
*/
public TypeValue minValue;
/**
* Максимальное значение
*/
public TypeValue maxValue;
/**
* Выбор групп и элементов
*/
public FoldersAndItemsUse foldersAndItemsUse;
public UUID g1; Показать |
з.ы. задача кодерская-нудная, сидеть добавлять перечисления 1С, классы 1С, и сравнивать с сериализацией.
ох, как я тут согласен :) сам пытаюсь на Ц++ классы для управляемых форм сообразить.
Вообще, тут бы лучше подумать надо хорошей кодогенерацией. Есть тучи XML-ек, которые можно навыгружать из 1С, по ним можно построить XSD (я пробовал trang, который, кстати, на Java), а по XSD уже нагенерить классов.
В Java все попроще...рефлексия - хлоп-хлоп и готово.
- мини библиотека для разбора, в стандартной поставке чтение:
- строк
- чисел
- булево
- UUID
- классов
- Enum-ов
- List-ов
- Map-ов
Косяков еще хватает, но потихоньку буду править
пример для чтения рутового файла.
@V8Class
public class V8Root
{
public Integer id;
public UUID guid;
public AnyData hash;
} Показать"Есть тучи XML-ек, которые можно навыгружать из 1С" - типа выгрузка конфигурации в XML?
Формат меняется, скорость выгрузки не ахти. Что делать в таком случае с внешними обработками и отчетами?
Я лучше потихоньку десериализую реальные классы и буду уверен, что все ок.
наверное, мы друг друга не понимаем.
я говорю вот, о чём: есть у меня выгрузка большой-большой конфы (чем больше, тем лучше). там куча файлов, к примеру, Catalog.Справочник1.xml, Catalog.Справочник2.xml, Catalog.Справочник3.xml.
Сами непосредственно справочники меня мало волнуют, мне нужны их общие поля. Они получаются при генерации схемы. Итого в XSD я вижу, к примеру, список полей, описывающих справочник, как объект метаданных:
Name
Synonym
Comment
Hierarchical
HierarchyType
LimitLevelCount
LevelCount
FoldersOnTop
......
Показатьи по ним генерю класс:
class MetaCatalog {
public string Name;
public multistring Synonym;
public string Comment;
.....
}
ПоказатьГлавное в таком подходе - все сложные типы вроде HierarchyType или SearchStringModeOnInputByString можно будет сразу увидеть и сгенерить по ним Enum.
Сериализации тут нет, её вам всё равно пилить руками надо будет. Тут цель - быстро и относительно малой кровью разово создать всю эту тучу классов, описывающих метаданные, в которые вы потом уже будете сериализировать эти зловещие файлы со скобочками.
Но это всё пока у меня в теории, потому как до конечного результата я тут пока не дошёл.
Описание:
Репозиторий:
<repositories>
<repository>
<id>v8Unpack4j</id>
<url>https:// raw.github.com/MinimaJack/com.minimajack.v8.format/mvn-repo/</url>
</repository>
</repositories>java.io.IOException: Синтаксическая ошибка в имени файла, имени папки или метке
и далее штук пять таких же ошибок
конфигурация состоит из одной формы
если пробую обработку
Rename copyinfo to Y29weWluZm8
java.io.IOException: Синтаксическая ошибка в имени файла, имени папки или метке тома
Что может быть не так ?
Кроме ДНК :)
epf.epf
собрал, проверил
java -jar com.minimajack.v8.cf.reader-0.0.1-SNAPSHOT-jar-with-dependencies.jar cf.cf ./сf/Так работает.
С меня +
В файле unpack.bat на github похоже ошибка
@echo OFF
Echo Start parsing
@java -Xms1G -Xmx2G -jar com.minimajack.v8.cf.reader-0.0.1-SNAPSHOT-jar-with-dependencies.jar %1 ./unpacked/%1
два раза %1
"Перешел" на 8 java
В общем все оказалось проще чем думалось - всего то надо было в алфавитном порядке(в одном регистре) записывать в фс 1С.
бинарник в шапке обновил...
А оглавление контейнера у вас одним цельным блоком в начале расположено? Просто для полного соответствия формату, который генерирует сама платформа, оглавление должно состоять из блока в 512 байт в начале контейнера, а все остальные блоки (если они есть) расположены в конце.
Можете посмотреть мою Python , там сразу не было проблемы с быстродействием перепакованных файлов.
entries = sorted(os.listdir(folder))у вас изначально сортируется список файлов - потому и не словили)
Ну да, и это тоже. Я изначально хотел полного совпадения файлов добиться после перепаковки, поэтому писал все с оглядкой на структуру исходного контейнера, но в итоге параметры сжатия соответствующие подобрать не удалось :)
btw у вас сортируется правильно-регистронезависимо? Как долго упаковывается конфигурация?
ffaac527-f33e-48bc-b09d-43245a025cd5
FFAAC527-F33E-48BC-B09D-43245A025CD5.0
ffaac527-f33e-48bc-b09d-43245a025cd5.1
Сортировка правильная.
Скорость работы это очень субъективный показатель как вы понимаете. Если хотите сравнить со своей реализацией и не устанавливать питон и т.п, то возьмите просто exe'шник из вот этой и проверьте на вашем компьютере и вашей тестовой конфигурации.
а не...в принципе время сопоставимое
Rename form to Zm9ybQ= at com.minimajack.v8.model.ContainerReader$1.visit(Conta
inerReader.java:64)
at com.minimajack.v8.format.V8FileSystem.iterate(V8FileSystem.java:100)
at com.minimajack.v8.model.ContainerReader.run(ContainerReader.java:63)
at com.minimajack.v8.threadpool.ExecutionWrapper.run(ExecutionWrapper.ja
va:36)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
java.io.IOException: Синтаксическая ошибка в имени файла, имени папки или метке
тома
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(Unknown Source)
Rename module to bW9kdWx at com.minimajack.v8.model.ContainerReader.getOr
CreateFile(ContainerReader.java:49)
at com.minimajack.v8.model.ContainerReader.access$000(ContainerReader.ja
va:16)
at com.minimajack.v8.model.ContainerReader$1.visit(ContainerReader.java:
86)
at com.minimajack.v8.model.ContainerReader$1.visit(ContainerReader.java:
64)
at com.minimajack.v8.format.V8FileSystem.iterate(V8FileSystem.java:100)
at com.minimajack.v8.model.ContainerReader.run(ContainerReader.java:63)
at com.minimajack.v8.threadpool.ExecutionWrapper.run(ExecutionWrapper.ja
va:36)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
java.io.IOException: Синтаксическая ошибка в имени файла, имени папки или метке
тома
Rename module to bW9kdWx at java.io.WinNTFileSystem.createFileExclusively
(Native Method)
at java.io.File.createNewFile(Unknown Source)
at com.minimajack.v8.model.ContainerReader.getOrCreateFile(ContainerRead
er.java:49)
at com.minimajack.v8.model.ContainerReader.access$000(ContainerReader.ja
va:16)
at com.minimajack.v8.model.ContainerReader$1.visit(ContainerReader.java:
86)
at com.minimajack.v8.model.ContainerReader$1.visit(ContainerReader.java:
64)
at com.minimajack.v8.format.V8FileSystem.iterate(V8FileSystem.java:100)
at com.minimajack.v8.model.ContainerReader.run(ContainerReader.java:63)
at com.minimajack.v8.threadpool.ExecutionWrapper.run(ExecutionWrapper.ja
va:36)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
java.io.IOException: Синтаксическая ошибка в имени файла, имени папки или метке
тома
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(Unknown Source)
at com.minimajack.v8.model.ContainerReader.getOrCreateFile(ContainerRead
er.java:49)
at com.minimajack.v8.model.ContainerReader.access$000(ContainerReader.ja
va:16)
at com.minimajack.v8.model.ContainerReader$1.visit(ContainerReader.java:
86)
at com.minimajack.v8.model.ContainerReader$1.visit(ContainerReader.java:
64)
at com.minimajack.v8.format.V8FileSystem.iterate(V8FileSystem.java:100)
at com.minimajack.v8.model.ContainerReader.run(ContainerReader.java:63)
at com.minimajack.v8.threadpool.ExecutionWrapper.run(ExecutionWrapper.ja
va:36)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Active tasks: 0
Time: 2 Показатья так понимаю у меня не хватает прав на файловую систему ? (запускал под админской учеткой)
проверьте еще раз параметры запуска программы или напишите сюда
А с 8.3.7.1759 конфигуратор нормально сохраняет в файлы для GITa
Exception in thread "main" java.lang.NullPointerException
at com.minimajack.v8.code.impl.RelativizeProcessor.process(RelativizeProcessor.java:19)
at com.minimajack.v8.code.impl.RelativizeProcessor.process(RelativizeProcessor.java:21)
at com.minimajack.v8.code.impl.RelativizeProcessor.process(RelativizeProcessor.java:8)
at com.minimajack.v8.code.impl.CodeProcessor.process(CodeProcessor.java:15)
at com.minimajack.v8.project.Project.unpackProject(Project.java:79)
at com.minimajack.v8.MainApp.main(MainApp.java:45)
at com.minimajack.v8.code.impl.RelativizeProcessor.process(RelativizeProcessor.java:19)
at com.minimajack.v8.code.impl.RelativizeProcessor.process(RelativizeProcessor.java:21)
at com.minimajack.v8.code.impl.RelativizeProcessor.process(RelativizeProcessor.java:8)
at com.minimajack.v8.code.impl.CodeProcessor.process(CodeProcessor.java:15)
at com.minimajack.v8.project.Project.unpackProject(Project.java:79)
at com.minimajack.v8.MainApp.main(Main
очень похоже на некорректные параметры или отсутствие доступа к файловой системе...
первый параметр конфигурация, второй параметр - путь к папке в которую надо разобрать проект
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 363938
Создание 02.06.15 19:19
Обновление 28.04.17 13:34
Просмотры 15941
Загрузки 19
Рейтинг
33
Комментарии 66
Код открыт Не указано
Рубрики Инструментарий разработчика
Кому Разработчик
Тип файла Приложение (exe)
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)