Ищем различия между двумя конфигурациями 1С: от Конфигуратора до скрипта

· 9 мин

Содержание

Сравнить два файла конфигурации 1С проще всего в Конфигураторе: меню Конфигурация → Сравнить конфигурации..., слева выбираете основную конфигурацию или конфигурацию базы, справа — «Конфигурация из файла» и указываете .cf. Через минуту-две получите дерево объектов, где отмечено, что добавлено, удалено и изменено, вплоть до строк модулей.

Если сравнивать нужно регулярно, по расписанию или без открытия Конфигуратора, у платформы 8.3 есть пакетная команда /CompareCfg, а для глубокого анализа конфигурацию выгружают в XML-файлы и сравнивают обычными текстовыми инструментами — WinMerge, KDiff3, git diff. Ниже по каждому способу: когда он подходит, как запустить и где он ошибается.

Какой способ сравнения выбрать

Задачи у сравнения разные, и инструмент под них тоже разный.

ЗадачаСпособЧто нужно
Разово посмотреть, чем доработанная база отличается от типовойИнтерактивное сравнение в КонфигуратореКонфигуратор, файл .cf
Понять, что изменит обновление .cfuРежим обновления конфигурации на поддержкеБаза на поддержке, файл обновления
Получить отчёт о различиях без участия человека1cv8 DESIGNER /CompareCfgЛюбая база-«площадка», bat-файл
Видеть историю изменений, ревью кодаВыгрузка в XML + git/DumpConfigToFiles, git
Сравнить две версии внешней обработкиФайл → Сравнить файлы или выгрузка epf в XMLКонфигуратор

💡 Файл .cf — это упакованная конфигурация целиком. Файл .cfu — только поставка обновления, его не сравнивают «в лоб» с базой: он участвует в трёхстороннем сравнении при обновлении.

Сравнение конфигураций средствами Конфигуратора

Это основной и самый наглядный способ. Работает в любой редакции платформы 8.3, отдельных утилит не требует.

Пошагово

  1. Откройте базу в режиме Конфигуратора и откройте конфигурацию: Конфигурация → Открыть конфигурацию.
  2. Выберите Конфигурация → Сравнить конфигурации....
  3. В окне задайте две стороны. Варианты для каждой:
    • 📦 основная конфигурация (то, что сейчас открыто в дереве);
    • 🗄️ конфигурация базы данных (то, с чем реально работают пользователи);
    • 🏷️ конфигурация поставщика (для баз на поддержке);
    • 📁 конфигурация из файла — сюда указываете .cf;
    • 🔗 конфигурация из хранилища, если база к нему подключена.
  4. Нажмите «Выполнить». Откроется окно с деревом объектов.
  5. Включите отбор «Показывать только различия», иначе в дереве будут тысячи одинаковых объектов.

Как читать результат

Иконки возле объектов показывают тип расхождения: объект изменён, есть только слева, есть только справа. Раскройте ветку — увидите, что именно поменялось: реквизит, форма, макет, модуль.

Для модуля откройте контекстное меню объекта и выберите показ различий в модулях. Платформа покажет текст двух версий рядом, изменённые строки подсвечены. По формам и макетам сравнение тоже детальное: свойства элементов, тексты запросов, ячейки табличного документа.

Чтобы сохранить результат, выведите отчёт о сравнении через меню «Действия» окна сравнения. Отчёт бывает кратким (только список объектов) и подробным (с текстом изменений), сохраняется в .txt или .mxl.

Сопоставление по именам или по идентификаторам

В окне сравнения есть выбор правила сопоставления объектов. От него зависит, будет ли результат вообще осмысленным.

  • 🆔 По внутренним идентификаторам — для конфигураций одной «линии»: ваша база и типовая той же конфигурации, две версии одной доработки.
  • 🔤 По именам — для конфигураций разного происхождения: например, вы перенесли справочник из одной базы в другую копированием, и у объекта новый идентификатор.

Если две родственные конфигурации при сравнении выглядят «полностью разными» — почти всегда выбрано не то правило сопоставления.

Пакетное сравнение: команда CompareCfg

Под запросом «cfcompare» обычно ищут именно это. Отдельной фирменной программы с таким именем в составе платформы нет: сравнение без интерфейса делает тот же 1cv8.exe в пакетном режиме Конфигуратора с командой /CompareCfg.

Команда умеет то же, что интерактивное окно: выбрать две стороны, правило сопоставления, тип и формат отчёта. Результат пишет в файл.

Основные параметры

ПараметрЧто задаёт
-FirstConfigurationType, -SecondConfigurationTypeТип стороны: MainConfiguration, DBConfiguration, VendorConfiguration, ConfigurationRepository, File и др.
-FirstFile, -SecondFileПуть к .cf, если тип стороны File
-MappingRuleByObjectNames или ByObjectIDs
-ReportTypeBrief или Full
-ReportFormattxt или mxl
-ReportFileКуда сохранить отчёт

Полный список параметров для вашей версии платформы смотрите в документации к пакетному режиму — набор дополнялся от релиза к релизу.

Пример: сравнить два cf-файла

Даже если сравниваются два файла, Конфигуратору нужна база, в которой он «стоит». Для этого подойдёт пустая файловая база.

@echo off
set V8="C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe"
set BASE=C:\1C\compare_empty
set LOG=C:\1C\compare\log.txt

rem Пустая файловая база-площадка (создаётся один раз)
if not exist "%BASE%\1Cv8.1CD" %V8% CREATEINFOBASE File="%BASE%"

%V8% DESIGNER /F "%BASE%" /DisableStartupDialogs ^
  /CompareCfg ^
  -FirstConfigurationType File -FirstFile "C:\1C\compare\old.cf" ^
  -SecondConfigurationType File -SecondFile "C:\1C\compare\new.cf" ^
  -MappingRule ByObjectIDs ^
  -ReportType Full -ReportFormat txt ^
  -ReportFile "C:\1C\compare\diff.txt" ^
  /Out "%LOG%"

echo Код завершения: %ERRORLEVEL%

Путь к 1cv8.exe замените на свой: номер платформы в каталоге у всех разный. Если на базе-площадке задан пользователь, добавьте /N и /P.

💡 Ошибки пакетного режима не выводятся на экран. Всё, что пошло не так, ищите в файле из параметра /Out. Всегда указывайте его.

Выгрузка в XML и сравнение как исходного кода

Интерактивное сравнение удобно, но его результат не положишь в систему контроля версий. Для этого конфигурацию выгружают в файлы.

Как выгрузить

Интерактивно: Конфигурация → Выгрузить конфигурацию в файлы..., указываете пустой каталог. Пакетно:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F "C:\1C\base" ^
  /DumpConfigToFiles "C:\1C\src\current" -Format Hierarchical ^
  /Out "C:\1C\dump.log"

Получится дерево каталогов: каждый объект метаданных — XML-описание, модули — отдельные файлы .bsl, формы — Form.xml и модуль формы. Для загрузки обратно используется парная команда /LoadConfigFromFiles.

Чтобы сравнить два .cf, загрузите каждый в свою пустую базу (/LoadCfg), выгрузите обе в два каталога и сравните каталоги.

Чем сравнивать каталоги

  • 🧰 WinMerge — бесплатный, сравнивает папки целиком, показывает отличающиеся файлы списком.
  • 🧰 KDiff3 — бесплатный, умеет трёхстороннее сравнение и слияние.
  • 🧰 Beyond Compare — платный, быстрый на больших деревьях, гибкие правила игнорирования.
  • 🧰 git — git diff --stat для списка изменённых файлов, git diff для построчных правок.

Модули .bsl сравниваются идеально: это обычный текст. С XML сложнее, о шуме — в разделе про ошибки.

Хранение истории в git

Рабочая схема для команды разработки:

  1. Выгрузить текущую конфигурацию в каталог репозитория и сделать первый коммит.
  2. После каждой порции доработок — снова выгрузить в тот же каталог и закоммитить.
  3. Сравнение любых двух состояний — git diff <коммит1> <коммит2>.

Начиная с платформы 8.3.10 у выгрузки есть инкрементальный режим: параметр -update выгружает только изменённые объекты, опираясь на файл ConfigDumpInfo.xml в каталоге. На больших конфигурациях это минуты вместо получаса.

⚠️ Обратная загрузка из XML в рабочую базу — это изменение конфигурации. Перед /LoadConfigFromFiles в рабочую базу сделайте выгрузку .dt.

Сравнение внешних обработок и отчётов

Внешние обработки .epf и отчёты .erf меняются чаще конфигурации: их правят разные люди, пересылают по почте, и через полгода уже неясно, какой файл свежий.

Быстро: «Сравнить файлы»

В Конфигураторе есть Файл → Сравнить файлы.... Укажите два файла обработки — откроется то же окно сравнения, что и для конфигураций: реквизиты, формы, макеты, модули. Этим же пунктом сравнивают текстовые файлы и табличные документы .mxl.

Для истории: выгрузка обработки в XML

Пакетная команда /DumpExternalDataProcessorOrReportToFiles раскладывает .epf или .erf на XML и модули — так же, как конфигурацию. Обратная сборка — /LoadExternalDataProcessorOrReportFromFiles.

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F "C:\1C\compare_empty" ^
  /DumpExternalDataProcessorOrReportToFiles "C:\1C\src\epf\Zagruzka" "C:\1C\epf\Zagruzka.epf" ^
  /Out "C:\1C\epf.log"

Первым аргументом идёт каталог (или XML-файл) назначения, вторым — сама обработка. Дальше сравниваете каталоги любым инструментом из предыдущего раздела.

💡 Если обработку используют в нескольких базах с разными конфигурациями, выгружайте её из базы той же конфигурации, для которой она написана. Ссылки на объекты метаданных в формах при открытии «чужой» базой могут потеряться.

Сравнение при обновлении через cfu и на поддержке

Отдельный случай — обновление доработанной типовой. Здесь сравниваются не две, а три конфигурации: старая поставщика, новая поставщика и ваша основная.

Запускается через Конфигурация → Поддержка → Обновить конфигурацию..., где указываете файл .cfu или .cf новой версии. Перед объединением откроется окно сравнения: какие объекты изменил поставщик, какие вы, и где изменения пересекаются.

Что полезно сделать до нажатия «Выполнить»:

  1. Включить отбор «Показывать только дважды изменённые свойства» — это места будущих конфликтов.
  2. Для каждого такого объекта решить, чья версия главнее, или объединить модули построчно.
  3. Сохранить отчёт о сравнении в файл: пригодится, если после обновления что-то сломается.

Для заранее подготовленного анализа удобно взять новую поставку как .cf (не .cfu) и сравнить её с конфигурацией поставщика в базе через обычное окно сравнения. Так вы увидите объём изменений типовой ещё до начала обновления.

Как поставить сравнение на поток

Регулярное сравнение нужно, например, чтобы ловить «тихие» правки рабочей базы мимо хранилища или контролировать подрядчика.

Простая схема на планировщике Windows:

  1. Ночью bat-файл выгружает конфигурацию рабочей базы в XML с ключом -update.
  2. Скрипт делает git add -A и git commit с датой в сообщении.
  3. Если git diff --stat HEAD~1 не пустой — отправляет список изменённых файлов на почту или в мессенджер.

Второй вариант — сравнивать конфигурацию базы данных с эталонным .cf командой /CompareCfg и смотреть, вырос ли файл отчёта. Он проще, но не даёт истории.

Перед запуском автоматического сравнения
Выполнено: 0 / 6

Для больших команд эту же задачу закрывает 1С:Enterprise Development Tools (EDT): проект хранится сразу в виде файлов в git, и сравнение становится обычным ревью изменений.

Почему сравнение показывает не то

Диагностика: выберите симптом

Частые вопросы

Можно ли сравнить два cf-файла без информационной базы?
Нет, Конфигуратору всегда нужна база. Но она может быть пустой: создайте файловую базу командой CREATEINFOBASE и используйте её только как площадку для сравнения.
Чем отличается основная конфигурация от конфигурации базы данных?
Основная — то, что открыто и редактируется в Конфигураторе. Конфигурация базы данных — то, с чем работают пользователи. Пока не выполнено «Обновить конфигурацию базы данных», они могут различаться, и сравнение между ними покажет несохранённые в базе правки.
Можно ли открыть файл cfu и посмотреть его содержимое?
Отдельно — нет. Файл обновления разбирается только в режиме обновления конфигурации, где идёт сравнение с вашей базой. Чтобы изучить изменения заранее, берите полный .cf новой версии.
Сравнивает ли Конфигуратор расширения?
Да. В окне сравнения среди типов стороны есть конфигурация расширения и расширение в базе данных. Сравнивать расширение с основной конфигурацией бессмысленно — сравнивайте две версии одного расширения.
Как сравнить права ролей между двумя версиями?
Через обычное сравнение конфигураций: раскройте роль и откройте различия в правах. В XML-выгрузке права роли лежат в отдельном файле Rights.xml, его удобно смотреть через git.