Сравнение расширений 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-отчёт устроен так:

  1. Заголовок с парой Base/Head и SHA-256 каждого .cfe.
  2. Раздел Сводка: сколько объектов добавлено, удалено, изменено, и счётчик строк BSL со знаком плюс и минус.
  3. Далее идут секции по каждому изменённому объекту с unified-diff хунками (@@).
  4. Раздел Активные фильтры: какие --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 на главной.