saby v8unpack
Разработка - Инструментарий разработчика
v8unpack - консольная утилита для сборки и распаковки бинарных файлов 1С:Предприятие 8.х (cf, cfe, epf) без использования технологической платформы.
В какой-то момент жить без системы контроля версий на уровне исходников стало совсем не выносимо и обозрев все варианты выбор пал на v8unpack. Однако, без устранения основных недостатков его использование было бы крайне не удобным (плоский список из нечеловекочитаемых файлов, скрытый где-то в дебрях программный код управляемых форм). Сразу скажу, что мы с глубоким уважением относимся к труду авторов v8unpack, данная утилита отлично выполняет все свои функции и без неё создание этого решения было бы не возможным. Кроме этого, её Python-реализация от Infactum была взята за основу без каких либо изменений.
Ключевые отличия от аналогичных утилит:
- Структура хранения максимально приближена к структуре метаданных, человеко-читаемые имена файлов
- Программный код всегда хранится в отдельных файлах и может быть разделен на несколько файлов
- Общие для разных решений объекты метаданных могут автоматически браться из сабмодулей
- Двоичные данные макетов и картинки хранятся в исходном виде
- При сборке под 8.2 и 8.1. автоматически комментируются директивы 8.3
- Файлы хранятся в формате json
- Достает конфигурации поставщика
- Видно какие элементы форм были изменены
Основным назначением нашей версии утилиты являются:
- Автоматическая сборка приложений 1С (расширения конфигураций, внешние обработки) для различных платформ и конфигураций из одних и тех же исходников
- Удобное и человекочитаемое хранение исходников в системах контроля версий.
Установка (требуется python 3.3+)
pip install v8unpack
Распаковка файла 1С
v8unpack.exe -E d:/sample.cf d:/unpack
Сборка исходников
v8unpack.exe -B d:/unpack d:/repacked.cf
Алгоритм работы
Утилита распаковывает и запаковывает бинарник 1С в 4 этапа:
- Распаковка стандартным v8unpack – на выходе текстовые файлы
- Конвертация в json
- Декодирование заголовков и разбивка по типам метаданных
- Организация кода и структуры хранения

Исходники и инструкция выложены на GitHub.
На текущий момент утилита покрывает только нужные нам типы метаданных, а мы будем рады любому участию в проекте.
update: добавлено много типов объектов метаданных, элементы форм в отдельном файле
update: репозиторий переехал
update: Примеры репозиториев реальных проектов основанных на одинаковых исходниках
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)
Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.
50000 руб.
10.09.2026 13311 115 0
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.
24900 руб.
20.08.2024 83193 432 171
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 285547 1606 423
Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Разработчик Аналитик Руководитель проекта 1С 8.3 Платные (руб)
Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.
14000 руб.
17.04.2026 16714 63 62
Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)
Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26
22570 руб.
06.10.2023 44143 122 54
Инструментарий разработчика Нейросети Платные (руб)
Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.
15250 руб.
25.08.2025 76791 147 41
Разработка Инструментарий разработчика Разработчик Руководитель проекта 1С 8.3 Платные (руб)
Pilot 1C превращает задачу, поставленную обычными словами, в техническое задание, код на встроенном языке и сценарии проверки. Прежде чем что-то предложить, он сверяется с устройством вашей конфигурации через граф Analyzer 1C: существует ли объект, из чего он состоит, кто его вызывает, какие роли дают права. Чего найти не удалось – спрашивает, а не выдумывает. Готовый код проходит более полутора сотен проверок по справочнику языка и стандартам разработки, который приезжает вместе с продуктом. Модель – ваша: любой сервер, совместимый с программным интерфейсом OpenAI, в том числе локальный. Правки в конфигурацию Pilot не вносит – их применяет разработчик.
18300 руб.
11.09.2026 3689 5 0
Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.
17000 руб.
10.11.2023 28707 103 46
Есть возможность интеграции с precommit1c? Для автоматического "раскладывания" обработок/отчетов?
И еще, на github выложите релиз с exe если не сложно, чтобы не устанавливать python для сборки.
По идее там можно настроить автосборку, чтобы релизы собирались сами на Github Actions.
PS: Отличная работа!
по поводу exeшников - хорошее предложение, попробуем собрать
Т.е. меняете обработку, дошли до того, что нужно сделать коммит, деаете его и автоматом раскладывается epf/erf в исходники, и они попадают в коммит.
Это очень удобно и позволяет не задумывать о том, чтобы это делать вручную.
Однако, для реализации вашей потребности не требуется каких-то специальных 1C решений, достаточно на git повесить хук запуска v8unpack.
1. нам нужно собирать обработку под 8.1, 8.2, 8.3 из одних исходников
2. нам нужно собирать одно расширение под все версии всех конфигураций из одних исходников
3. нам нужно делать все это в автоматическом по событию системы контроля сборки
4. желательно чтобы это быстро и удобно работало, и требовало минимум софта для установки
в процессе выбора решения мы рассматривали возможности штатной выгрузки, EDT, и различные варианты v8unpack /v8reader
выписали плюсы минусы и выбрали этот вариант.
встроенный механизм отпал по п.1, т.к. мы не нашли возможности собрать из исходников под 8.1 и 8.2.
Если мы какой вариант не учли или не поняли, поделитесь знаниями пожалуйста
А можете немного подробнее про этот пункт рассказать? Имею ввиду как именно создаете исходники под конкретную конфу из образца.
У меня очень похожая ситуация - есть расширение, которое должно вставать на разные конфигурации, и разные версии этих конфигураций.
расширение под новую конфу пока создается руками, с пустышками метаданных, затем объекты переносятся из ранее созданных по описанным выше технологиям, в т.ч. путем ручной подмены uuid в пустышках. пока так. задайте более конкретный вопрос, постараюсь ответить.
надеюсь подойдем к тому, что танцев с uuid не будет (для этого надо научиться формировать список контейнеров в расширении)
Более конкретно попробую спросить. Буду говорить про расширение. Разработка ведется на какой-то одной конфигурации/версии. Затем нужно, не плодя сущности, и не перенося все доработки руками, создать из этой же разработки версию расширения для другой (сходной по задействованным объектам) конфигурации или даже другой версии той же конфигурации (если что-то в ней изменено так, что изначальный вариант расширения уже не встает). Собственно, меня интересует, создаете ли вы исходники для этой новой версии динамически, или они уже лежат в каком-то заготовленном виде и в них обновляются файлы, которые можно безболезненно обновлять, т.е. общие для обоих вариантов?
У меня на 1С сделана разборка - изменение - сборка нового расширения. То есть новые исходники делаются динамически, по описанному алгоритму доработки.
Для разборки и сборки используется v8unpack. Инфлейт-дефлейт 1С-ными силами. Мне бы хотелось и сборку-разборку делать силами 1С, без v8unpack. Я ниже в комментариях спрашивал, нет ли такого решения.
1. делаем базовое расширение для основной конфигурации.
2. открываем его на другой конфигурации - смотрим на что ругается, все метаданные общие для обеих расширений при помощи Index файла делаем общими.
3. ещё раз разбираем базовое расширение, теперь в папке под основную конфу остались только специфичные для неё файлы
4. открываем расширение на другой конфигурации, адаптируем под неё, разбираем с тем же index файлом - в исходниках для этой конфы будут только специфичные для неё файлы.
5. делаем по вкусу командные файлы для сборки разборки конкретной конфы и всех вместе.
выпуск для разных версий одной конфигурации делается аналогично но используется параметр descent
пример расширения под несколько конфигураций добавил внизу статьи
В моем случае на сервере только серверная а пользовательский раскиданы по ПК.
С хранилища конфигурации есть альтернативный вариант получения cf/cfe (относительно применения платформы)?
оно не может терять, тесты проверяют, что пересобранный файл идентичен первичному. если с какими-то метаданными утилита не умеет работать - она просто упадет при разборе
У меня есть (пока неопубликованное) решение по созданию дополнительных (измененных) версий расширения на лету. Инфлэйт-дефлэйт я сделал силами 1С, а вот для сборки-разборки cfe-шника приходится запускать v8unpack. Хотелось бы всё реализовать на чистом 1С.
Вот ведь инфлейт-дефлейт вы сделали средствами платформы :) Я вашу идею использовал, но сделал немного по-другому (покомпактнее).
С распаковкой-запаковкой также хотелось бы обойтись встроенными средствами.
К тому же, расширения обычно небольшого размера, не сравнить с полноценными конфигурациями. И на них разница во времени будет незначительной. Зато добавляется гибкость - при очередном изменении формата, можно поправить без специальных знаний других языков и ожидания от разработчиков.
Еще в планах было портировать на oscript, но это можно и после публикации сделать.
Вместе с этой еще одна публикация застряла в черновиках - получение конфигураций и расширений из хранилища в пользовательском режиме, без конфигуратора.
По замеру производительности в Конфигураторе хорошо видно, что запись на диск занимает 80% всего времени. Разборку при этом можно ускорить примерно вдвое, если не записывать файлы атрибутов (.header).
Вернее, я специально выделил этот функционал в отдельную обработку. Потому что, на самом деле, у меня оно является частью проекта по работе с хранилищем. Но это тема для другой (а может быть и нескольких) публикации.
и внешние обработки собирающиеся из тех же исходников для управляемых и обычных форм (для обычных форм пока полурабочий прототип но собирается и запускается)
примечательно что в расширении и обработке используются одни и те же формы обработки несмотря на то что с точки зрения 1С обработка и внешняя обработка это разные типы метаданных
сборкой артефактов и присвоением номера занимается система выпуска, но приложенные cmd которыми пользуются разработчики делают почти то же самое. если клонировать с сабмодулями, то все должно собираться и разбираться
попробуйте установить пакет через pip и распаковать как написано в инструкции, или воспользуйтесь exe файлом
17:20:20.673840 Начали - 0:00:00.095737
17:20:20.769577 Распаковываем - 0:00:52.351120
17:21:13.120697 Конвертируем 3000: Json decode form error: 'NoneType' object has no attribute 'append' - AttributeError 'NoneType' object has no attribute 'append' run_in_pool JsonContainerDecoder.decode
Stack:
- : message=AttributeError; detail='NoneType' object has no attribute 'append'; traceback=v8unpack/json_container_decoder.py, decode, line 49;
Теперь вылетела через 2 минут а не через 40...
Образец не могу собрать. На рабочем компе нет возможности передать файлы ни в браузере ни по почте.
3000: Json decode form error: 'NoneType' object has no attribute 'append' - AttributeError 'NoneType' object has no attribute 'append' run_in_pool JsonContainerDecoder.decode
Stack:
- : message=AttributeError; detail='NoneType' object has no attribute 'append'; traceback=v8unpack/json_container_decoder.py, decode, line 47;
Не пойму в чем дело, как отловить
06:24:52.680138 Раcшифровываем3000: Unknown error - IndexError string index out of range - decode include Constant run_in_pool Decoder.decode_include
Stack:
- Constant.decode: message=IndexError; detail=string index out of range; traceback=MetaDataObject/__init__.py, decode, line 39;
- Constant.decode:
- Decoder.decode_include: decode_params=['C:\\Users\\ZELENO~1\\AppData\\Local\\Temp\\tmpg6__xdxx\\decode_stage_2', 'c72ea2ad-446d-11db-82b7-0004759f4c80', 'C:\\Users\\ZELENO~1\\AppData\\Local\\Temp\\tmpg6__xdxx\\decode_stage_3', 'Constant', '803']; message=Unknown error - IndexError string index out of range; detail=decode include Constant;
Непонятно в каком модуле/строке
падает при декодировании заголовков (тип метаданных Константа - файл исходника c72ea2ad-446d-11db-82b7-0004759f4c80)
ну хотя бы конвертацию в json уже преодолели
разбирайте с параметром --temp temp тогда все промежуточные файлы будут здесь же - удобнее найти и скинуть
киньте файл decode_stage_2\c72ea2ad-446d-11db-82b7-0004759f4c80.json
в телеграмм есть группа saby v8unpack или на github есть трекер, не уверен что здесь имеет смысл заниматься доработкой
Traceback (most recent call last):
File "source.py", line 1, in <module>
ModuleNotFoundError: No module named 'v8unpack'
[7752] Failed to execute script 'source' due to unhandled exception!
Помогите решить пожалуйста .
C:\Windows\system32>v8unpack.exe -E c:\1Cv8.cf c:\TEMP
Traceback (most recent call last):
File "c:\Users\user\AppData\Local\Programs\Python\Python310\lib\runp
return _run_code(code, main_globals, None,
File "c:\Users\user\AppData\Local\Programs\Python\Python310\lib\runp
exec(code, run_globals)
File "C:\Users\user\AppData\Local\Programs\Python\Python310\Scripts\
File "c:\Users\user\AppData\Local\Programs\Python\Python310\lib\site
from .v8unpack import main, extract, build
File "c:\Users\user\AppData\Local\Programs\Python\Python310\lib\site
from .decoder import decode, encode
File "c:\Users\user\AppData\Local\Programs\Python\Python310\lib\site
from .MetaObject.Configuration802 import Configuration802
ModuleNotFoundError: No module named 'v8unpack.MetaObject'
ExtException Ошибка декодирования - объекта метаданных "WSReference" файл "decode_stage_1\8bd4ecf6-c3fc-4ec1-a364-6063f780ab73" (WSReference)
Stack:
- WSReference.decode: message=FileNotFoundError; detail=[Errno 2] No such file or directory: 'C:\\Users\\admn1b3k\\AppData\\Local\\Temp\\tmpdovujdem\\decode_stage_1\\8bd4ecf6-c3fc-4ec1-a364-6063f780ab73.0\\info'; traceback=MetaDataObject/__init__.py, decode, line 52;
- WSReference.decode: message=Ошибка декодирования; detail=объекта метаданных "WSReference" файл "decode_stage_1\8bd4ecf6-c3fc-4ec1-a364-6063f780ab73" (WSReference);
- Decoder.decode_include WSReference:
- run_in_pool Decoder.decode_include:
ExtException Ошибка декодирования - объекта метаданных "Template" файл "0\6c4b89ec-58ca-4c84-81da-bcdc356543b2" (Report\РегламентированныйОтчетЕСПиГПФ\Template)
Stack:
- None: message=ValueError; detail='2' is not a valid TmplType; traceback=versions/Template8x.py, decode_object, line 43;
- Template.decode: message=Ошибка декодирования; detail=объекта метаданных "Template" файл "0\6c4b89ec-58ca-4c84-81da-bcdc356543b2" (Report\РегламентированныйОтчетЕСПиГПФ\Template);
- Decoder.decode_include Template:
- run_in_pool Decoder.decode_include:
Не работает с объектами появившимися в 27 платформе
ValueError 'e41aff26-25cf-4bb6-b6c1-3f478a75f374' is not a valid MetaDataT
(traceback=v8unpack/v8unpack.py, extract, line 55; )
Возможно это новый объект платформы
Модуль WebSocket клиента (WebSocket client module)
падает если обработка/отчет сохранен 27 платформой, но новые объекты не использует
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1529974
Создание 09.10.21 10:26
Обновление 24.01.23 22:30
Просмотры 19019
Загрузки 0
Рейтинг
78
Комментарии 77
Код открыт Да
Рубрики Инструментарий разработчика
Кому Разработчик
Тип файла Нет файла
Платформа Не имеет значения
Конфигурация Универсальные
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)