Разработка и Конфигурация · 12 мин
KDiff3 в работе с 1С: сравнение и объединение конфигураций
Как подключить KDiff3 к 1С для сравнения конфигураций, модулей и текстовых файлов: настройка, объединение изменений, разрешение конфликтов и типичные ошибки.
KDiff3 — бесплатная утилита для сравнения и слияния текстовых файлов и каталогов, которую часто используют разработчики 1С, когда штатного механизма сравнения конфигураций недостаточно. Она особенно полезна при работе с хранилищем конфигурации, системами контроля версий (Git, EDT) и при объединении доработок от нескольких программистов, где нужно построчно увидеть различия в модулях и аккуратно перенести изменения.
В отличие от встроенного сравнения 1С, которое показывает различия на уровне объектов метаданных и процедур, KDiff3 работает с текстом: показывает до трёх версий файла одновременно, подсвечивает изменённые строки и позволяет вручную выбирать, какой вариант попадёт в итоговый файл. Это делает инструмент незаменимым при разборе конфликтов слияния, когда два разработчика меняли один и тот же модуль.
Ниже разобраны практические сценарии: установка и настройка, сравнение выгруженных модулей, трёхстороннее слияние при конфликтах, интеграция с Git для 1С-разработки и типичные ошибки, которые приводят к потере доработок.
Где скачать и как установить KDiff3
KDiff3 распространяется бесплатно и доступен для Windows, Linux и macOS. Для Windows скачивайте установщик с официальной страницы проекта (kdiff3.sourceforge.net) или из репозитория пакетов вашей ОС. Установка стандартная: мастер предложит каталог установки, после чего программа готова к работе без дополнительной настройки.
После установки проверьте, что программа запускается, и запомните путь к исполняемому файлу — обычно это C:\Program Files\KDiff3\kdiff3.exe. Этот путь понадобится при настройке Git и других инструментов, которые будут вызывать KDiff3 как внешнюю утилиту сравнения.
Для работы с файлами 1С важно сразу проверить кодировку. Модули, выгруженные из конфигуратора или EDT, обычно сохраняются в UTF-8. Откройте любой выгруженный модуль в KDiff3 и убедитесь, что кириллица отображается корректно; если видите «кракозябры», измените кодировку в настройках редактора KDiff3 (меню «Настройка» → «Настроить KDiff3» → раздел кодировок).
Какие задачи 1С решает KDiff3, а какие — нет
Прежде чем внедрять инструмент, важно понимать границы его применимости. KDiff3 оперирует текстом, поэтому он подключается к процессу там, где конфигурация представлена в виде файлов: выгрузка в файлы конфигуратора, формат EDT, выгрузка через сторонние инструменты вроде precommit1c или vanessa-runner.
Типичные задачи, где KDiff3 даёт выигрыш:
- сравнение двух версий одного модуля при анализе чужих доработок;
- трёхстороннее слияние при конфликте в Git или при объединении изменений из хранилища;
- сравнение каталогов выгрузки двух конфигураций целиком с быстрым поиском отличающихся файлов;
- перенос отдельных процедур между ветками разработки.
При этом KDiff3 не заменяет штатное сравнение конфигураций, когда нужно понять различия в структуре метаданных: составе реквизитов, ролях, подписках на события, движениях документов. Для такого анализа используйте «Конфигурация» → «Сравнить, объединить с конфигурацией из файла» в конфигураторе.
Чем сравнивать в 1С
Подходит для анализа метаданных и поставки обновлений. Неудобно для построчного слияния кода модулей.
Идеален для построчного сравнения и слияния текстов модулей, в том числе трёхстороннего. Не видит структуру метаданных.
Встроено в среду разработки, интегрировано с Git. Менее гибкое ручное слияние, чем в KDiff3.
Настройка KDiff3 для файлов 1С
Базовая настройка занимает несколько минут. Откройте «Настройка» → «Настроить KDiff3» и пройдитесь по ключевым параметрам. В разделе редактора укажите кодировку UTF-8 как кодировку по умолчанию и настройте моноширинный шрифт, удобный для чтения кода.
Полезные опции для 1С-разработчика:
- Игнорировать пробелы в конце строк — снижает шум от автоформатирования;
- Показывать номера строк — облегчает навигацию по большим модулям;
- Автоматическое слияние неконфликтных изменений — при трёхстороннем слиянии совпадающие правки объединяются без вашего участия;
- Регулярные выражения для игнорирования строк — можно исключить из сравнения служебные комментарии, если они генерируются автоматически.
Рекомендуется отключить полное игнорирование регистра и пробельных различий внутри строк: в коде 1С отступы и регистр не влияют на выполнение, но их потеря при слиянии ухудшает читаемость и создаёт лишние изменения при следующем сравнении.
Сравнение двух модулей: пошаговый сценарий
Самая частая задача — понять, что именно изменилось в модуле между двумя версиями конфигурации. Порядок действий одинаков независимо от того, откуда взяты файлы: из выгрузки конфигуратора, из EDT или из Git.
Сначала получите текстовые версии модулей. В конфигураторе используйте «Конфигурация» → «Выгрузить конфигурацию в файлы» для обеих версий (старую конфигурацию откройте в отдельной базе или выгрузите из файла .cf через загрузку в пустую базу). В результате вы получите каталоги с XML-файлами метаданных и .txt-файлами модулей.
Запустите KDiff3 и укажите два файла: например, ОбщийМодуль.Расчеты.txt из старой выгрузки и тот же файл из новой. Левая панель покажет первую версию, правая — вторую, различия подсвечиваются цветом. Перемещайтесь между отличиями кнопками навигации на панели инструментов.
Если задача — не просто посмотреть, а собрать итоговый модуль, включите окно результата слияния (нижняя часть окна) и для каждого блока различий выбирайте источник: кнопки A или B, либо комбинацию обоих. После обработки всех блоков сохраните результат через «Файл» → «Сохранить».
- 1Выгрузите обе конфигурации в файлы в отдельные каталоги
- 2Откройте KDiff3 и укажите два одноимённых файла модуля
- 3Проверьте, что кодировка определилась верно и кириллица читается
- 4Пройдите по всем подсвеченным различиям кнопками навигации
- 5При необходимости соберите итоговый файл, выбирая источник для каждого блока
- 6Сохраните результат и загрузите его в тестовую базу
- 7Проверьте синтаксис модуля в конфигураторе
Сравнение каталогов выгрузки целиком
KDiff3 умеет сравнивать не только файлы, но и каталоги рекурсивно — это быстрый способ получить карту изменений между двумя конфигурациями. Укажите в стартовом диалоге два каталога выгрузки, и программа покажет список файлов с отметками: совпадают, различаются, есть только в одном каталоге.
Двойной щелчок по различающемуся файлу открывает построчное сравнение. Так вы быстро находите, какие общие модули, модули объектов и формы затронуты доработками, не запуская штатное сравнение конфигураций.
Учтите ограничение: выгрузка конфигуратора создаёт много XML-файлов метаданных, где различия часто носят технический характер (внутренние идентификаторы, порядок элементов). Не трактуйте каждое различие XML как функциональное изменение — смысловую нагрузку несут прежде всего файлы модулей и запросов.
Перед сравнением каталогов отсортируйте список по столбцу состояния, чтобы сверху оказались только различающиеся файлы. В больших конфигурациях совпадающих файлов тысячи, и без фильтрации по состоянию поиск нужных отличий превращается в рутину.
Трёхстороннее слияние при конфликтах
Главная сила KDiff3 — слияние трёх версий: базовой (общий предок) и двух изменённых. Такая ситуация возникает, когда два разработчика параллельно меняли один модуль, а также при работе с Git, где KDiff3 выступает mergetool.
В стартовом диалоге укажите три файла: A — базовая версия, B — версия первого разработчика, C — версия второго. KDiff3 автоматически объединит блоки, изменённые только в одной из версий, и подсветит конфликты — места, где оба изменили одни и те же строки.
Конфликты разбираются вручную: для каждого конфликтного блока выберите B, C или оба варианта в нужном порядке. В окне результата можно дополнительно править текст вручную — например, объединить логику обеих правок, если они дополняют друг друга. После разрешения всех конфликтов сохраните файл.
Для подключения KDiff3 к Git как инструменту сравнения и слияния выполните настройку конфигурации:
git config --global merge.tool kdiff3
git config --global mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global diff.tool kdiff3
git config --global difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"После этого при конфликте слияния достаточно выполнить git mergetool — KDiff3 откроется с тремя версиями конфликтующего файла, а результат сохранится в рабочий каталог репозитория.
Загрузка результата обратно и проверка
После слияния текстовый модуль нужно вернуть в конфигурацию. Если вы работаете через выгрузку в файлы, используйте «Конфигурация» → «Загрузить конфигурацию из файлов» в тестовой базе. Если ведёте разработку в EDT или через Git — просто зафиксируйте изменения и обновите базу из проекта.
Обязательные проверки после загрузки:
- синтаксическая проверка модуля в конфигураторе (включите проверку в режимах толстого и тонкого клиента, если модуль общий);
- обновление конфигурации базы данных без ошибок;
- прогон ключевых сценариев, которые затрагивает изменённый модуль;
- сравнение итоговой конфигурации с исходной штатным механизмом — чтобы убедиться, что изменился только ожидаемый состав объектов.
Как проверить результат слияния
Проверка в конфигураторе проходит без ошибок
Ошибки компиляции, незакрытые конструкции Если/КонецЕсли
Штатное сравнение показывает только ожидаемые доработки
Появились незапланированные изменения в других объектах
Комментарии и строковые литералы читаются корректно
Кракозябры — признак порчи кодировки при сохранении
Ключевые сценарии выполняются как задумано
Ошибки времени выполнения, неверные результаты расчётов
Альтернативы и когда их выбрать
KDiff3 — не единственный вариант. Если ваша команда работает в 1C:EDT, встроенные механизмы сравнения и слияния уже интегрированы с Git и покрывают большинство сценариев без внешних утилит. Для разовых сравнений удобен любой diff-инструмент — например, WinMerge или сравнение в VS Code.
KDiff3 остаётся предпочтительным выбором, когда нужно именно трёхстороннее слияние с ручным контролем каждого конфликта и когда требуется сравнение каталогов выгрузки без запуска конфигуратора. Для анализа различий метаданных и поставки обновлений основным инструментом остаётся штатное сравнение конфигураций.
Что важно запомнить
KDiff3 дополняет, а не заменяет штатные механизмы 1С: используйте его для построчного сравнения и слияния текстов модулей, особенно трёхстороннего. Работайте только с копиями, проверяйте кодировку и обязательно тестируйте результат в отдельной базе перед переносом в рабочую.
Частые вопросы
Можно ли сравнить в KDiff3 два файла .cf напрямую?
Нет. Файл .cf — это двоичный контейнер конфигурации, KDiff3 его не прочитает. Сначала загрузите обе конфигурации в отдельные базы и выгрузите каждую в файлы через конфигуратор, после чего сравнивайте полученные текстовые файлы модулей.
KDiff3 показывает весь модуль как изменённый, хотя правки точечные. В чём причина?
Чаще всего причина в различиях концов строк (CRLF против LF) или в смене кодировки при выгрузке разными инструментами. Проверьте настройки игнорирования различий в концах строк и убедитесь, что оба файла в одной кодировке.
Как разобрать конфликт, если оба разработчика изменили одну процедуру?
Откройте трёхстороннее слияние с базовой версией, найдите конфликтный блок и решите по смыслу: выберите один из вариантов либо включите оба, а затем вручную отредактируйте результат в нижнем окне, объединив логику обеих правок. После этого обязательно проверьте синтаксис модуля.
Работает ли KDiff3 с выгрузкой в формате EDT?
Да. Проект EDT хранится на диске как набор текстовых файлов (модули в формате .bsl), которые KDiff3 сравнивает без ограничений. Обычно KDiff3 подключают как внешний mergetool для Git, под который уже работает EDT.
Можно ли через KDiff3 объединить две конфигурации целиком?
Полноценно — нет. KDiff3 объединяет тексты модулей, но не разрешает различия метаданных: реквизиты, роли, подсистемы. Для объединения конфигураций используйте штатный механизм «Сравнить, объединить», а KDiff3 применяйте точечно для конфликтных модулей.
Что делать, если после слияния модуль не компилируется?
Откройте модуль в конфигураторе и посмотрите первую ошибку — обычно это незакрытая конструкция или дублирование переменных после ручного объединения блоков. Исправьте текст, либо откатитесь к резервной копии и повторите слияние аккуратнее, разбирая каждый конфликт отдельно.