Ищем различия между двумя конфигурациями 1С: от Конфигуратора до скрипта
Содержание
Сравнить два файла конфигурации 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, отдельных утилит не требует.
Пошагово
- Откройте базу в режиме Конфигуратора и откройте конфигурацию:
Конфигурация → Открыть конфигурацию. - Выберите
Конфигурация → Сравнить конфигурации.... - В окне задайте две стороны. Варианты для каждой:
- 📦 основная конфигурация (то, что сейчас открыто в дереве);
- 🗄️ конфигурация базы данных (то, с чем реально работают пользователи);
- 🏷️ конфигурация поставщика (для баз на поддержке);
- 📁 конфигурация из файла — сюда указываете
.cf; - 🔗 конфигурация из хранилища, если база к нему подключена.
- Нажмите «Выполнить». Откроется окно с деревом объектов.
- Включите отбор «Показывать только различия», иначе в дереве будут тысячи одинаковых объектов.
Как читать результат
Иконки возле объектов показывают тип расхождения: объект изменён, есть только слева, есть только справа. Раскройте ветку — увидите, что именно поменялось: реквизит, форма, макет, модуль.
Для модуля откройте контекстное меню объекта и выберите показ различий в модулях. Платформа покажет текст двух версий рядом, изменённые строки подсвечены. По формам и макетам сравнение тоже детальное: свойства элементов, тексты запросов, ячейки табличного документа.
Чтобы сохранить результат, выведите отчёт о сравнении через меню «Действия» окна сравнения. Отчёт бывает кратким (только список объектов) и подробным (с текстом изменений), сохраняется в .txt или .mxl.
Сопоставление по именам или по идентификаторам
В окне сравнения есть выбор правила сопоставления объектов. От него зависит, будет ли результат вообще осмысленным.
- 🆔 По внутренним идентификаторам — для конфигураций одной «линии»: ваша база и типовая той же конфигурации, две версии одной доработки.
- 🔤 По именам — для конфигураций разного происхождения: например, вы перенесли справочник из одной базы в другую копированием, и у объекта новый идентификатор.
Если две родственные конфигурации при сравнении выглядят «полностью разными» — почти всегда выбрано не то правило сопоставления.
Пакетное сравнение: команда CompareCfg
Под запросом «cfcompare» обычно ищут именно это. Отдельной фирменной программы с таким именем в составе платформы нет: сравнение без интерфейса делает тот же 1cv8.exe в пакетном режиме Конфигуратора с командой /CompareCfg.
Команда умеет то же, что интерактивное окно: выбрать две стороны, правило сопоставления, тип и формат отчёта. Результат пишет в файл.
Основные параметры
| Параметр | Что задаёт |
|---|---|
-FirstConfigurationType, -SecondConfigurationType | Тип стороны: MainConfiguration, DBConfiguration, VendorConfiguration, ConfigurationRepository, File и др. |
-FirstFile, -SecondFile | Путь к .cf, если тип стороны File |
-MappingRule | ByObjectNames или ByObjectIDs |
-ReportType | Brief или Full |
-ReportFormat | txt или 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
Рабочая схема для команды разработки:
- Выгрузить текущую конфигурацию в каталог репозитория и сделать первый коммит.
- После каждой порции доработок — снова выгрузить в тот же каталог и закоммитить.
- Сравнение любых двух состояний —
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 новой версии. Перед объединением откроется окно сравнения: какие объекты изменил поставщик, какие вы, и где изменения пересекаются.
Что полезно сделать до нажатия «Выполнить»:
- Включить отбор «Показывать только дважды изменённые свойства» — это места будущих конфликтов.
- Для каждого такого объекта решить, чья версия главнее, или объединить модули построчно.
- Сохранить отчёт о сравнении в файл: пригодится, если после обновления что-то сломается.
Для заранее подготовленного анализа удобно взять новую поставку как .cf (не .cfu) и сравнить её с конфигурацией поставщика в базе через обычное окно сравнения. Так вы увидите объём изменений типовой ещё до начала обновления.
Как поставить сравнение на поток
Регулярное сравнение нужно, например, чтобы ловить «тихие» правки рабочей базы мимо хранилища или контролировать подрядчика.
Простая схема на планировщике Windows:
- Ночью bat-файл выгружает конфигурацию рабочей базы в XML с ключом
-update. - Скрипт делает
git add -Aиgit commitс датой в сообщении. - Если
git diff --stat HEAD~1не пустой — отправляет список изменённых файлов на почту или в мессенджер.
Второй вариант — сравнивать конфигурацию базы данных с эталонным .cf командой /CompareCfg и смотреть, вырос ли файл отчёта. Он проще, но не даёт истории.
Для больших команд эту же задачу закрывает 1С:Enterprise Development Tools (EDT): проект хранится сразу в виде файлов в git, и сравнение становится обычным ревью изменений.
Почему сравнение показывает не то
Частые вопросы
Можно ли сравнить два cf-файла без информационной базы?
CREATEINFOBASE и используйте её только как площадку для сравнения.Чем отличается основная конфигурация от конфигурации базы данных?
Можно ли открыть файл cfu и посмотреть его содержимое?
.cf новой версии.Сравнивает ли Конфигуратор расширения?
Как сравнить права ролей между двумя версиями?
Rights.xml, его удобно смотреть через git.