К статье
Практический материал

Разработка и Конфигурация · 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С

Штатное сравнение конфигураций

Подходит для анализа метаданных и поставки обновлений. Неудобно для построчного слияния кода модулей.

KDiff3

Идеален для построчного сравнения и слияния текстов модулей, в том числе трёхстороннего. Не видит структуру метаданных.

Сравнение в 1C:EDT

Встроено в среду разработки, интегрировано с Git. Менее гибкое ручное слияние, чем в KDiff3.

Настройка KDiff3 для файлов 1С

Базовая настройка занимает несколько минут. Откройте «Настройка» → «Настроить KDiff3» и пройдитесь по ключевым параметрам. В разделе редактора укажите кодировку UTF-8 как кодировку по умолчанию и настройте моноширинный шрифт, удобный для чтения кода.

Полезные опции для 1С-разработчика:

  • Игнорировать пробелы в конце строк — снижает шум от автоформатирования;
  • Показывать номера строк — облегчает навигацию по большим модулям;
  • Автоматическое слияние неконфликтных изменений — при трёхстороннем слиянии совпадающие правки объединяются без вашего участия;
  • Регулярные выражения для игнорирования строк — можно исключить из сравнения служебные комментарии, если они генерируются автоматически.

Рекомендуется отключить полное игнорирование регистра и пробельных различий внутри строк: в коде 1С отступы и регистр не влияют на выполнение, но их потеря при слиянии ухудшает читаемость и создаёт лишние изменения при следующем сравнении.

Сравнение двух модулей: пошаговый сценарий

Самая частая задача — понять, что именно изменилось в модуле между двумя версиями конфигурации. Порядок действий одинаков независимо от того, откуда взяты файлы: из выгрузки конфигуратора, из EDT или из Git.

Сначала получите текстовые версии модулей. В конфигураторе используйте «Конфигурация» → «Выгрузить конфигурацию в файлы» для обеих версий (старую конфигурацию откройте в отдельной базе или выгрузите из файла .cf через загрузку в пустую базу). В результате вы получите каталоги с XML-файлами метаданных и .txt-файлами модулей.

Запустите KDiff3 и укажите два файла: например, ОбщийМодуль.Расчеты.txt из старой выгрузки и тот же файл из новой. Левая панель покажет первую версию, правая — вторую, различия подсвечиваются цветом. Перемещайтесь между отличиями кнопками навигации на панели инструментов.

Если задача — не просто посмотреть, а собрать итоговый модуль, включите окно результата слияния (нижняя часть окна) и для каждого блока различий выбирайте источник: кнопки A или B, либо комбинацию обоих. После обработки всех блоков сохраните результат через «Файл» → «Сохранить».

Сравнение двух версий модуля
  1. 1
    Выгрузите обе конфигурации в файлы в отдельные каталоги
  2. 2
    Откройте KDiff3 и укажите два одноимённых файла модуля
  3. 3
    Проверьте, что кодировка определилась верно и кириллица читается
  4. 4
    Пройдите по всем подсвеченным различиям кнопками навигации
  5. 5
    При необходимости соберите итоговый файл, выбирая источник для каждого блока
  6. 6
    Сохраните результат и загрузите его в тестовую базу
  7. 7
    Проверьте синтаксис модуля в конфигураторе

Сравнение каталогов выгрузки целиком

KDiff3 умеет сравнивать не только файлы, но и каталоги рекурсивно — это быстрый способ получить карту изменений между двумя конфигурациями. Укажите в стартовом диалоге два каталога выгрузки, и программа покажет список файлов с отметками: совпадают, различаются, есть только в одном каталоге.

Двойной щелчок по различающемуся файлу открывает построчное сравнение. Так вы быстро находите, какие общие модули, модули объектов и формы затронуты доработками, не запуская штатное сравнение конфигураций.

Учтите ограничение: выгрузка конфигуратора создаёт много XML-файлов метаданных, где различия часто носят технический характер (внутренние идентификаторы, порядок элементов). Не трактуйте каждое различие XML как функциональное изменение — смысловую нагрузку несут прежде всего файлы модулей и запросов.

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

Трёхстороннее слияние при конфликтах

Главная сила KDiff3 — слияние трёх версий: базовой (общий предок) и двух изменённых. Такая ситуация возникает, когда два разработчика параллельно меняли один модуль, а также при работе с Git, где KDiff3 выступает mergetool.

В стартовом диалоге укажите три файла: A — базовая версия, B — версия первого разработчика, C — версия второго. KDiff3 автоматически объединит блоки, изменённые только в одной из версий, и подсветит конфликты — места, где оба изменили одни и те же строки.

Конфликты разбираются вручную: для каждого конфликтного блока выберите B, C или оба варианта в нужном порядке. В окне результата можно дополнительно править текст вручную — например, объединить логику обеих правок, если они дополняют друг друга. После разрешения всех конфликтов сохраните файл.

Для подключения KDiff3 к Git как инструменту сравнения и слияния выполните настройку конфигурации:

bash
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 откроется с тремя версиями конфликтующего файла, а результат сохранится в рабочий каталог репозитория.

Типичные ошибки
01
Слияние без базовой версии: при сравнении только двух файлов невозможно отличить добавление от удаления, и чужие правки легко потерять
02
Сохранение результата поверх единственной копии файла без резервной копии
03
Игнорирование кодировки: сохранение в неверной кодировке портит кириллицу в модуле
04
Перенос результата сразу в рабочую базу без проверки синтаксиса и тестирования
05
Ручная правка XML-файлов метаданных в 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 применяйте точечно для конфликтных модулей.

Что делать, если после слияния модуль не компилируется?

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