Чтение CF/CFE/EPF/ERF
Поддерживаются все базовые бинарные форматы 1С:Предприятия:
- CF — основная конфигурация
- CFE — конфигурация-расширение
- EPF — внешняя обработка
- ERF — внешний отчёт
Особенности реализации
- Автоматический выбор формата контейнера: **v1** (`Container`, маркер `0x7FFFFFFF`) или **v2** (`Container64`, маркер `0xFFFFFFFFFFFFFFFF`)
- Распаковка вложенных контейнеров (`<obj_guid>` → `info`, `text`, `form`, `picture` и т.д.)
- Декомпрессия `zlib` raw-deflate (`-15`)
- Парсинг скобочного формата метаданных регулярками: `{<type_guid>, N, guid1, guid2, ...}`
- Поддержка кодировок UTF-8 BOM, UTF-16-LE, Windows-1251 — автоопределение по сигнатуре
- Для CFE — отдельная логика поиска объектов: формат версии 6 (`{type_guid, "N", obj_guid}`) и fallback по GUID-файлам в плоском списке
Дерево метаданных
Отображение полностью соответствует стилю Конфигуратора 1С: группа «Общие» в начале, прикладные объекты дальше, плюс отдельные группы для XDTO, веб-сервисов, стилей и т.п.
Поддержанные категории:
- Прикладные: Справочники, Документы, Журналы документов, Нумераторы, Последовательности, Перечисления, Отчёты, Обработки, Планы видов характеристик, Планы счетов, Планы видов расчёта, Регистры (сведений / накопления / бухгалтерии / расчёта), Бизнес-процессы, Задачи, Внешние источники данных, Сервисы интеграции
- Общие: Подсистемы, Общие модули, Параметры сеанса, Роли, Общие реквизиты, Планы обмена, Критерии отбора, Подписки на события, Регламентные задания, Функциональные опции, Определяемые типы, Хранилища настроек, Общие формы, Общие команды, Группы команд, Общие макеты, Общие картинки, Пакеты XDTO, Web-сервисы, HTTP-сервисы, WS-ссылки, Элементы стиля, Стили, Языки, Константы
Внутри каждого объекта раскрываются:
- Реквизиты / Измерения / Ресурсы / Признаки учёта (с подсчётом штук)
- Табличные части (включая их реквизиты)
- Формы (с маркером `79; если есть текст модуля)
- Макеты
- Команды
- Модули объекта (Модуль, Модуль объекта, Модуль менеджера, Модуль набора записей и т.д.)
Просмотр модулей
При клике на модуль или форму с модулем — открывается тёмная панель кода (стиль VS Code Dark+) с:
- Подсветкой синтаксиса 1С (русские и английские ключевые слова, строки, комментарии, директивы, числа)
- Нумерацией строк
- Контекстным меню (копировать, вставить, выделить всё)
- Поддержкой **CRLF** при чтении и записи
- Автоматическое нахождение кодировки исходного модуля
Экспорт модуля в TXT
Кнопка «Экспорт в TXT…» рядом с модулем открывает диалог сохранения файла:
- Имя по умолчанию формируется из контекста: `<Объект>__<Модуль>.txt` или `<Объект>__Форма_<Имя>.txt`
- Стартовая папка — рядом с открытым CF-файлом
- Расширения: `.txt`, `.bsl`, любое
- Файл пишется в UTF-8 BOM + CRLF — формат, который Конфигуратор 1С корректно вставляет в модуль через буфер обмена
Сравнение двух конфигураций
Окно «Сравнение» показывает две конфигурации (CF/CFE) одновременно:
- Деревья A и B синхронизированы по группам
- Цветовая разметка элементов:
- 🔴 Красный — только в A
- 🟢 Зелёный — только в B
- 🟡 Жёлтый — изменён (модули, реквизиты, формы, табличные части)
- При выделении модуля — нижняя панель показывает унифицированный diff (как `git diff`) с подсветкой `+/-/@@`
- Объекты, существующие только в одной из сторон, добавляются «призраком» (`— нет`) в дерево противоположной стороны для наглядности
Что сравнивается
- Состав объектов (по именам)
- Состав реквизитов / измерений / ресурсов / табличных частей / форм / макетов / команд
- Текст всех модулей (объекта, менеджера, набора записей, форм)
Объединение B → A
Окно «Объединение» предлагает галочками выбрать:
- Изменённые модули общих объектов (есть в A и B, отличается код)
- Объекты только в B (новые в расширении / другой версии)
При выполнении:
Шаг 1: Изменённые модули → TXT
Программа спрашивает папку для экспорта, затем сохраняет каждый модуль в структуру
Каждый файл — UTF-8 BOM + CRLF, готовый к копированию в Конфигуратор.
Шаг 2: Новые объекты — автоматическое добавление в CF
Это самая интересная часть. Программа полностью пересобирает контейнер A, добавляя в него blob-файлы новых объектов из B и регистрируя их GUID-ы в файле метаданных конфигурации:
1. Чтение outer-контейнеров A и B — все blob-файлы как сырые сжатые байты
2. Сбор blob-ов нового объекта: главный `<obj.guid>` + все его `.0`, `.1` файлы + GUID-ы форм, макетов, команд (рекурсивно)
3. Патч config-blob A: декомпрессия → поиск регуляркой `{<group_guid>, N, ...}` нужной коллекции (Общие модули, Справочники, Документы и т.д.) → инкремент `N` → добавление GUID нового объекта → перекодировка с тем же BOM/encoding → сжатие
4. Пересборка outer-контейнера через `v8unpack.Container.build()`. Старые файлы переносятся как есть (без рекомпрессии), новые добавляются с правильными TOC-записями
5. Атомарная запись: всё пишется во временный файл, потом `os.replace` поверх оригинала
6. Бэкап — `*.bak` создаётся до записи, при сбое восстанавливается
Просмотр форм
Для каждой формы извлекается:
- Имя
- GUID
- Текст модуля (если есть)
- Бинарные данные формы (info, picture и т.д. — сохраняются при операциях)
Бинарный формат форм отображается в текстовом представлении через `parse_form_visual / format_form_visual` из `cf_metadata`.
Диагностика
Кнопка «Диагностика» показывает полный лог разбора CF: какие контейнеры найдены, по каким смещениям, сколько файлов в каждом, какие группы метаданных распознаны, сколько объектов в каждой группе. Полезно для отладки нестандартных CF-файлов или при подозрении на повреждение.
Безопасные операции
- При записи в CF — обязательный бэкап (`*.bak` или `*.bak_<timestamp>`)
- При перепаковке контейнера — запись через временный файл и `os.replace`
- При сбое — автоматическое восстановление из бэкапа
- Подтверждение перед операциями, изменяющими CF
- Все логи операций показываются в финальном отчёте
Никакого Конфигуратора 1С, никаких COM-объектов, никакой установленной платформы — приложение работает с CF-файлами напрямую как с бинарниками.
"1С", "1С:Предприятие", "1С:Конфигуратор" — зарегистрированные торговые марки ООО "1С". Данный продукт не имеет отношения к фирме "1С" и не является её разработкой. Совместимость с форматами CF/CFE/EPF/ERF реализована независимо на основе открытых спецификаций (проект v8unpack).
Программа работает полностью офлайн, не отправляет никаких данных, не требует активации и не подключается к лицензионным серверам.
Код полностью открыт.
Вступайте в нашу телеграмм-группу Инфостарт
