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

Разработка и Конфигурация · 9 мин

Как сравнить два кода в 1С

Способы сравнения двух фрагментов кода в 1С: сравнение конфигураций, файлы модулей, EDT, Git и внешние diff-инструменты. Пошаговые инструкции и типичные ошибки.

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

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

Сравнение конфигураций через конфигуратор

Штатный механизм конфигуратора сравнивает не отдельные строки, а объекты метаданных и тексты модулей двух конфигураций. Это основной инструмент, когда нужно понять, чем отличается рабочая база от файла поставки или от другой выгрузки.

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

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

Порядок действий в конфигураторе
  1. 1
    Откройте конфигуратор и разблокируйте конфигурацию от поддержки при необходимости
  2. 2
    Меню: Конфигурация → Сравнить, объединить с конфигурацией из файла
  3. 3
    Укажите cf-файл второй конфигурации и дождитесь построения дерева различий
  4. 4
    Откройте нужный модуль двойным кликом и просмотрите построчные отличия
  5. 5
    Снимите лишние флажки объединения, если нужно только посмотреть различия
  6. 6
    Откажитесь от выполнения объединения, если задача была только в анализе

Сравнение с конфигурацией базы данных и поставщика

Помимо файла, конфигуратор умеет сравнивать текущую конфигурацию с конфигурацией базы данных («Конфигурация → Сравнить, объединить с конфигурацией БД») и с конфигурацией поставщика. Первый вариант показывает неприменённые изменения, второй — все доработки относительно типовой поставки, что удобно перед обновлением.

Сравнение версий из хранилища конфигурации

Если разработка ведётся через хранилище, самый точный способ увидеть изменения — сравнить версии объекта. В конфигураторе выделите объект, откройте контекстное меню и выберите пункт сравнения версий хранилища (доступен также через «Конфигурация → Хранилище конфигурации»).

Можно сравнить текущую версию с любой предыдущей или две произвольные версии между собой. Для модулей платформа покажет построчный diff, для форм и макетов — отличия на уровне структуры объекта. Это надёжный способ найти, в какой версии появилась конкретная правка.

Ограничение: сравнение работает только внутри одного хранилища. Если две копии проекта ведутся в разных хранилищах без общей истории, сначала придётся выгрузить конфигурации в файлы и сравнивать их как независимые.

Сравнение файлов выгрузки модулей

Когда нужно сравнить не конфигурации целиком, а конкретные модули, удобнее выгрузить их в текстовые файлы. В конфигураторе есть команда «Конфигурация → Выгрузить модули в файлы» (в свежих версиях платформы), а также выгрузка конфигурации в файлы XML или в формате EDT.

Полученные bsl-файлы сравниваются любым внешним инструментом: WinMerge, KDiff3, Beyond Compare, встроенным сравнением VS Code или Total Commander. Эти программы показывают различия нагляднее конфигуратора и позволяют сравнивать произвольные пары файлов, а не только связанные конфигурации.

bash
fc /N Module1.bsl Module2.bsl > diff.txt

Для быстрой проверки без установки программ подойдёт и штатная команда Windows fc, но её вывод неудобен для больших модулей: она показывает различия фрагментами и не даёт интерактивной навигации. Для регулярной работы лучше настроить полноценный diff-инструмент.

Сравнение кода в 1C:EDT

В среде разработки 1C:EDT сравнение кода реализовано полноценно, поскольку проект хранится в текстовых файлах. Пункт «Compare With» в контекстном меню позволяет сравнить файл с локальной историей, с другим файлом проекта или с версией из Git.

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

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

Сравнение способов

Конфигуратор

Подходит для сравнения конфигураций целиком и версий хранилища; не сравнивает произвольные фрагменты текста

Выгрузка модулей + внешний diff

Гибкий вариант для отдельных модулей и файлов; требует ручной выгрузки и сторонней программы

1C:EDT с Git

Лучший вариант для командной работы и истории изменений; требует перехода проекта на EDT

Хранилище конфигурации

Точная история по версиям объектов; работает только внутри одного хранилища

Сравнение произвольных фрагментов кода

Частая задача — сравнить два куска кода, которые не являются файлами: например, процедуру из базы и фрагмент из письма коллеги. Здесь помогает простой приём: вставьте оба фрагмента в два временных текстовых файла и откройте их в diff-инструменте.

В VS Code для этого не нужны даже файлы на диске: создайте два новых документа, вставьте код и выполните команду сравнения активного редактора с другим. Аналогичная возможность есть в Notepad++ с плагином Compare.

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

Риски и типичные ошибки

Главный риск при сравнении через «Сравнить, объединить» — случайно выполнить объединение вместо просмотра. Перед запуском убедитесь, что у вас есть актуальная выгрузка базы (dt) или cf-файл текущей конфигурации, и снимайте флажки с объектов, которые не должны измениться.

Вторая распространённая ошибка — сравнение файлов в разных кодировках или с разными окончаниями строк. Выгрузки 1С и внешние редакторы могут использовать разные соглашения, из-за чего diff показывает изменённым каждый файл целиком. Настройте в инструменте игнорирование различий в пробелах и переводах строк.

Типичные ошибки
01
Запуск объединения без резервной копии — при ошибочном переносе изменений откат будет невозможен
02
Сравнение файлов с разными окончаниями строк — весь файл подсвечивается как изменённый
03
Выводы о логике по количеству различий — косметические правки маскируют реальные изменения
04
Сравнение устаревшей выгрузки с актуальной базой — различия не отражают текущее состояние

Проверка результата сравнения

После сравнения убедитесь, что вы смотрели правильные версии: сверьте дату и источник каждого файла или конфигурации. Полезно зафиксировать результат — сохранить отчёт diff-инструмента или скриншот дерева различий, особенно если выводы понадобятся коллегам.

Если сравнение делалось перед переносом изменений, после объединения проверьте конфигурацию на синтаксические ошибки («Конфигурация → Проверка конфигурации») и выполните тестовый запуск затронутой функциональности. Совпадение текста не гарантирует корректную работу, если у модулей разный контекст вызова.

Контрольные точки

Как проверить результат

Источники сравнения
Норма

Оба файла или конфигурации имеют известное происхождение и дату

Тревожный признак

Неясно, какая версия новее и откуда взят файл

Настройки diff-инструмента
Норма

Игнорируются пробелы и переводы строк, показаны только реальные правки

Тревожный признак

Подсвечены целые файлы из-за форматирования

Конфигурация после объединения
Норма

Проверка конфигурации проходит без ошибок, функциональность работает

Тревожный признак

Синтаксические ошибки или падение сценариев после переноса

Итог

Что важно запомнить

Конфигурации сравнивайте штатным механизмом конфигуратора, версии — через хранилище, отдельные модули — выгрузкой в файлы и внешним diff-инструментом, а для командной работы используйте EDT с Git. Перед любым объединением делайте резервную копию и проверяйте результат на копии базы.

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

Можно ли сравнить два куска кода прямо в конфигураторе без файлов?

Нет, конфигуратор не сравнивает произвольные текстовые фрагменты. Сохраните оба фрагмента во временные файлы и откройте их в WinMerge, VS Code или Notepad++ с плагином Compare — это займёт меньше минуты.

Как сравнить конфигурацию с расширением?

Напрямую построчного сравнения расширения с основной конфигурацией в конфигураторе нет. Откройте модуль в расширении — платформа показывает заимствованные процедуры рядом с изменёнными, а для детального анализа выгрузите основной модуль в файл и сравните внешним инструментом.

Чем сравнить две выгрузки конфигурации в файлы XML?

Выгрузки в XML объёмны и содержат служебные идентификаторы, поэтому обычный diff даст много шума. Практичнее сравнивать только каталоги с модулями (bsl-файлы) или использовать инструменты, понимающие структуру выгрузки, например сравнение проектов в EDT.

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

Чаще всего причина в смене окончания строк (CRLF/LF) или кодировке файла при выгрузке. Проверьте настройки core.autocrlf в Git и выгружайте модули одним и тем же способом, чтобы формат был стабильным.

Можно ли автоматизировать сравнение двух конфигураций?

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

Как найти, кто и когда изменил конкретную строку кода?

В хранилище конфигурации посмотрите историю версий объекта и сравните соседние версии — по номеру версии видно автора захвата. В EDT с Git используйте аннотацию файла (blame), которая показывает автора каждой строки.