Сравнение расширений 1С (.cfe): что меняет расширение
- cfe
- расширения
- 1c
- cfediff
Что такое cfe и как сравнить два расширения 1С построчно. CFEDiff распаковывает .cfe файлы и показывает diff BSL-кода, форм и метаданных вместо бинарного diff.
Бинарный .cfe файл в системе контроля версий бесполезен для ревью: git diff покажет только, что файл изменён, без единой строки о том, что именно поменялось. Чтобы сравнить расширения 1С по существу, нужно распаковать оба контейнера, разобрать структуру и сопоставить код, формы и метаданные. Этим занимается CFEDiff, структурный diff расширений в редакции Профессиональная.
Что такое cfe файл
.cfe это официальный механизм платформы 1С, расширение конфигурации. Расширения позволяют дорабатывать конфигурацию без снятия её с поддержки.
Штатный механизм платформы умеет сравнивать и объединять конфигурации (основную, конфигурацию базы данных, конфигурацию во внешнем файле, конфигурацию поставщика) вплоть до отдельных реквизитов, табличных частей, форм и модулей. Но это сравнение конфигураций между собой, а не файлов расширений: задачу "сопоставь два .cfe" стандартное сравнение и объединение конфигураций напрямую не решает.
Базовое чтение .cfe (автообнаружение установленных расширений, метка [Расш] в результатах code_search и code_read) доступно уже в редакции Расширенная. Структурное сравнение это уровень редакции Профессиональная, инструмент code_review.
Как сравнить расширения 1С: review_extension
code_review это консолидированный инструмент Профессиональной редакции с двумя действиями: review_extension (CFEDiff, структурный diff двух версий .cfe) и base_vs_ext (сверка основной конфигурации с расширением).
review_extension заменяет ручной diff и git diff бинарных .cfe. CFEDiff распаковывает оба расширения, разбирает их структуру и выдаёт Markdown-отчёт с детальным сравнением BSL-кода, форм и метаданных.
Вызов через MCP-инструмент
Через MCP-клиент вызывается действие review_extension с путями к двум файлам. Отчёт возвращается прямо в чат.
| Параметр | Значение |
|---|---|
action |
review_extension |
base_path |
путь к исходному .cfe |
head_path |
путь к новому .cfe |
format |
markdown |
CLI для CI и pre-commit
Для конвейера и git-хука есть командная строка без MCP-клиента:
mcp-1c-pro review --format markdown -o diff.md base.cfe head.cfe
echo "exit code: $?"
Коды возврата позволяют завязать на результат проверку в CI:
| Exit code | Значение |
|---|---|
0 |
различий нет |
1 |
различия найдены |
2 |
ошибка |
Минимальный workflow GitHub Actions запускает проверку на каждый pull request с изменёнными .cfe:
# .github/workflows/cfediff.yml
name: cfediff
on:
pull_request:
paths:
- '**/*.cfe'
permissions:
contents: read
jobs:
diff:
runs-on: ubuntu-latest
steps:
# fetch-depth: 0 нужен, чтобы достать base-версию .cfe из истории
- uses: actions/checkout@v4
with:
fetch-depth: 0
# установите бинарник mcp-1c-pro из вашего канала дистрибуции
- name: review changed .cfe
run: |
git show "${{ github.event.pull_request.base.sha }}:ext.cfe" > base.cfe
mcp-1c-pro review --format markdown -o diff.md base.cfe ext.cfe
Флаги review
--format markdown|json|text формат отчёта (по умолчанию markdown)
--ignore-* 11 флагов фильтрации технического шума
(trailing whitespace, line endings, BOM, порядок UUID и т.д.)
--no-watermark чистый вывод (только оплаченные лицензии)
--diagnostic zip с диагностикой для тикетов
--bug-report PII-safe tar.gz для GitHub-issue
--enable-ibcmd экспериментальная валидация (8.3.27+)
Структура отчёта CFEDiff
Markdown-отчёт устроен так:
- Заголовок с парой Base/Head и SHA-256 каждого
.cfe. - Раздел Сводка: сколько объектов добавлено, удалено, изменено, и счётчик строк BSL со знаком плюс и минус.
- Далее идут секции по каждому изменённому объекту с unified-diff хунками (
@@). - Раздел Активные фильтры: какие
--ignore-*были применены.
CFEDiff читает два формата выгрузки:
- Canonical Designer: выгрузка через
DESIGNER /DumpCfg(8.3.x). - ibcmd-Mac/Linux: выгрузка через
ibcmd config export(8.3.27+).
base_vs_ext: основная конфигурация против расширения
Второе действие, base_vs_ext, сравнивает основную конфигурацию с расширением по их XML-дампам. Для собственных объектов расширения отчёт показывает состав на уровне свойств и подписки. Для заимствованных объектов (объектов основной конфигурации, добавленных в расширение) видны переопределённые свойства, добавленные реквизиты и табличные части, а также перехваты &Вместо и &ИзменениеИКонтроль относительно базы.
| Параметр | Назначение |
|---|---|
ext_dump |
обязательный, каталог XML-дампа расширения |
base |
имя базы |
base_dump |
каталог дампа основной конфигурации |
format |
markdown (по умолчанию), json или text |
Без base или base_dump выводятся только собственные объекты расширения, сверка с базой не выполняется. Действие доступно с версии v2.17.0.
Второе мнение через ibcmd
Флаг --enable-ibcmd задуман как необязательная рекомендательная (advisory) проверка, которая не блокирует работу: независимо пересчитать результат сравнения через официальную утилиту 1С ibcmd и сопоставить с основным. Вызывается из командной строки, флаг ставится перед файлами:
mcp-1c-pro review --enable-ibcmd base.cfe head.cfe
Честная граница: в текущем состоянии этот слой всегда завершается информационным предупреждением IBCMD_NOT_AVAILABLE и canonical-сравнение через config export не выполняет. Результат основного diff от него не зависит и не блокируется, код возврата не меняется. Поэтому рассматривайте --enable-ibcmd как экспериментальный advisory-слой, а не как готовую рабочую сверку. Опция появилась в v2.19.0 и доступна только в командной строке.
Ограничения
CFEDiff честен про свои границы:
- Для расширений, выгруженных через
ibcmd config export, структурный diff форм работает по hash-fallback: видно только изменилась форма или нет. Детальный структурный diff форм доступен лишь на canonical-выгрузке из Designer. - Часть заимствованных дочерних объектов (например,
CommonModuleиз других расширений) отображается по UUID, а не по имени.
Редакции и пробный период
| Лицензия | Поведение review |
|---|---|
| Пробный период (14 дней) | полный функционал, в отчёте watermark с датой истечения |
| Профессиональная (оплаченная) | чистый вывод, доступен --no-watermark |
| Расширенная без Профессиональной | запуск вернёт subcommand requires Pro edition и exit code 2 |
Для Профессиональной редакции есть 14-дневный пробный период со всеми функциями тарифа без ограничений. Цены и состав редакций на странице тарифов.
Как запустить
Для самого сравнения .cfe подключение к работающей базе не требуется: CFEDiff работает с файлами. Ниже иллюстративный пример запуска Профессиональной редакции по stdio в Claude Desktop, чтобы инструмент code_review стал доступен ассистенту.
{
"mcpServers": {
"mcp-1c": {
"command": "/usr/local/bin/mcp-1c-pro",
"args": [
"--base", "acc=File=/Users/me/bases/acc",
"--user", "Администратор",
"--password", ""
]
}
}
}
Файл конфигурации Claude Desktop:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Действие review_extension работает с путями к .cfe, а base_vs_ext с каталогами XML-дампов. Подробности по инструментам в документации, общий обзор продукта MCP-1C на главной.