Разработка и Конфигурация · 9 мин
Как сравнить два кода в 1С
Способы сравнения двух фрагментов кода в 1С: сравнение конфигураций, файлы модулей, EDT, Git и внешние diff-инструменты. Пошаговые инструкции и типичные ошибки.
Сравнение кода — рутинная задача разработчика 1С: нужно понять, что изменилось между версиями модуля, проверить доработки коллеги, найти отличия между основной конфигурацией и расширением или просто сверить два фрагмента текста. Встроенных «диффов» произвольных кусков кода в конфигураторе нет, поэтому используют несколько обходных и штатных механизмов.
Выбор способа зависит от того, что именно сравнивается: две конфигурации целиком, два файла выгрузки, версии из хранилища или просто два текстовых фрагмента. Ниже разобраны все рабочие варианты с точными шагами и ограничениями каждого.
Сравнение конфигураций через конфигуратор
Штатный механизм конфигуратора сравнивает не отдельные строки, а объекты метаданных и тексты модулей двух конфигураций. Это основной инструмент, когда нужно понять, чем отличается рабочая база от файла поставки или от другой выгрузки.
Чтобы запустить сравнение, откройте конфигуратор, в меню выберите «Конфигурация → Сравнить, объединить с конфигурацией из файла…» и укажите cf-файл второй конфигурации. Платформа построит дерево различий: изменённые объекты будут помечены, а двойной клик по модулю откроет построчное сравнение текстов.
В окне сравнения текстов модулей различия подсвечиваются: добавленные, удалённые и изменённые строки имеют разную маркировку. Можно перемещаться между изменениями кнопками навигации и выборочно переносить строки из одной версии в другую.
- 1Откройте конфигуратор и разблокируйте конфигурацию от поддержки при необходимости
- 2Меню: Конфигурация → Сравнить, объединить с конфигурацией из файла
- 3Укажите cf-файл второй конфигурации и дождитесь построения дерева различий
- 4Откройте нужный модуль двойным кликом и просмотрите построчные отличия
- 5Снимите лишние флажки объединения, если нужно только посмотреть различия
- 6Откажитесь от выполнения объединения, если задача была только в анализе
Сравнение с конфигурацией базы данных и поставщика
Помимо файла, конфигуратор умеет сравнивать текущую конфигурацию с конфигурацией базы данных («Конфигурация → Сравнить, объединить с конфигурацией БД») и с конфигурацией поставщика. Первый вариант показывает неприменённые изменения, второй — все доработки относительно типовой поставки, что удобно перед обновлением.
Сравнение версий из хранилища конфигурации
Если разработка ведётся через хранилище, самый точный способ увидеть изменения — сравнить версии объекта. В конфигураторе выделите объект, откройте контекстное меню и выберите пункт сравнения версий хранилища (доступен также через «Конфигурация → Хранилище конфигурации»).
Можно сравнить текущую версию с любой предыдущей или две произвольные версии между собой. Для модулей платформа покажет построчный diff, для форм и макетов — отличия на уровне структуры объекта. Это надёжный способ найти, в какой версии появилась конкретная правка.
Ограничение: сравнение работает только внутри одного хранилища. Если две копии проекта ведутся в разных хранилищах без общей истории, сначала придётся выгрузить конфигурации в файлы и сравнивать их как независимые.
Сравнение файлов выгрузки модулей
Когда нужно сравнить не конфигурации целиком, а конкретные модули, удобнее выгрузить их в текстовые файлы. В конфигураторе есть команда «Конфигурация → Выгрузить модули в файлы» (в свежих версиях платформы), а также выгрузка конфигурации в файлы XML или в формате EDT.
Полученные bsl-файлы сравниваются любым внешним инструментом: WinMerge, KDiff3, Beyond Compare, встроенным сравнением VS Code или Total Commander. Эти программы показывают различия нагляднее конфигуратора и позволяют сравнивать произвольные пары файлов, а не только связанные конфигурации.
fc /N Module1.bsl Module2.bsl > diff.txtДля быстрой проверки без установки программ подойдёт и штатная команда Windows fc, но её вывод неудобен для больших модулей: она показывает различия фрагментами и не даёт интерактивной навигации. Для регулярной работы лучше настроить полноценный diff-инструмент.
Сравнение кода в 1C:EDT
В среде разработки 1C:EDT сравнение кода реализовано полноценно, поскольку проект хранится в текстовых файлах. Пункт «Compare With» в контекстном меню позволяет сравнить файл с локальной историей, с другим файлом проекта или с версией из Git.
При подключённом Git-репозитории доступны все стандартные операции: просмотр изменений перед коммитом, сравнение веток, разбор конфликтов слияния с трёхсторонним редактором. Для командной разработки это самый удобный вариант, потому что история изменений видна построчно с указанием автора и даты.
Локальная история EDT работает даже без Git: среда автоматически сохраняет снимки файлов при редактировании, и можно откатиться или посмотреть, что менялось за сессию. Срок хранения и глубина истории настраиваются в параметрах среды.
Сравнение способов
Подходит для сравнения конфигураций целиком и версий хранилища; не сравнивает произвольные фрагменты текста
Гибкий вариант для отдельных модулей и файлов; требует ручной выгрузки и сторонней программы
Лучший вариант для командной работы и истории изменений; требует перехода проекта на EDT
Точная история по версиям объектов; работает только внутри одного хранилища
Сравнение произвольных фрагментов кода
Частая задача — сравнить два куска кода, которые не являются файлами: например, процедуру из базы и фрагмент из письма коллеги. Здесь помогает простой приём: вставьте оба фрагмента в два временных текстовых файла и откройте их в diff-инструменте.
В VS Code для этого не нужны даже файлы на диске: создайте два новых документа, вставьте код и выполните команду сравнения активного редактора с другим. Аналогичная возможность есть в Notepad++ с плагином Compare.
Перед сравнением приведите фрагменты к единому виду: одинаковые отступы, регистр ключевых слов, отсутствие лишних пустых строк. Иначе инструмент покажет массу ложных различий, и найти реальные изменения логики будет трудно.
Риски и типичные ошибки
Главный риск при сравнении через «Сравнить, объединить» — случайно выполнить объединение вместо просмотра. Перед запуском убедитесь, что у вас есть актуальная выгрузка базы (dt) или cf-файл текущей конфигурации, и снимайте флажки с объектов, которые не должны измениться.
Вторая распространённая ошибка — сравнение файлов в разных кодировках или с разными окончаниями строк. Выгрузки 1С и внешние редакторы могут использовать разные соглашения, из-за чего diff показывает изменённым каждый файл целиком. Настройте в инструменте игнорирование различий в пробелах и переводах строк.
Проверка результата сравнения
После сравнения убедитесь, что вы смотрели правильные версии: сверьте дату и источник каждого файла или конфигурации. Полезно зафиксировать результат — сохранить отчёт diff-инструмента или скриншот дерева различий, особенно если выводы понадобятся коллегам.
Если сравнение делалось перед переносом изменений, после объединения проверьте конфигурацию на синтаксические ошибки («Конфигурация → Проверка конфигурации») и выполните тестовый запуск затронутой функциональности. Совпадение текста не гарантирует корректную работу, если у модулей разный контекст вызова.
Как проверить результат
Оба файла или конфигурации имеют известное происхождение и дату
Неясно, какая версия новее и откуда взят файл
Игнорируются пробелы и переводы строк, показаны только реальные правки
Подсвечены целые файлы из-за форматирования
Проверка конфигурации проходит без ошибок, функциональность работает
Синтаксические ошибки или падение сценариев после переноса
Что важно запомнить
Конфигурации сравнивайте штатным механизмом конфигуратора, версии — через хранилище, отдельные модули — выгрузкой в файлы и внешним diff-инструментом, а для командной работы используйте EDT с Git. Перед любым объединением делайте резервную копию и проверяйте результат на копии базы.
Частые вопросы
Можно ли сравнить два куска кода прямо в конфигураторе без файлов?
Нет, конфигуратор не сравнивает произвольные текстовые фрагменты. Сохраните оба фрагмента во временные файлы и откройте их в WinMerge, VS Code или Notepad++ с плагином Compare — это займёт меньше минуты.
Как сравнить конфигурацию с расширением?
Напрямую построчного сравнения расширения с основной конфигурацией в конфигураторе нет. Откройте модуль в расширении — платформа показывает заимствованные процедуры рядом с изменёнными, а для детального анализа выгрузите основной модуль в файл и сравните внешним инструментом.
Чем сравнить две выгрузки конфигурации в файлы XML?
Выгрузки в XML объёмны и содержат служебные идентификаторы, поэтому обычный diff даст много шума. Практичнее сравнивать только каталоги с модулями (bsl-файлы) или использовать инструменты, понимающие структуру выгрузки, например сравнение проектов в EDT.
Git показывает, что изменился весь модуль, хотя правка была в одной строке. Почему?
Чаще всего причина в смене окончания строк (CRLF/LF) или кодировке файла при выгрузке. Проверьте настройки core.autocrlf в Git и выгружайте модули одним и тем же способом, чтобы формат был стабильным.
Можно ли автоматизировать сравнение двух конфигураций?
Да, конфигуратор поддерживает пакетный режим с параметрами командной строки для сравнения и объединения конфигураций, а результат можно направить в файл протокола. Это используют в скриптах сборки, но для разбора различий интерактивный режим удобнее.
Как найти, кто и когда изменил конкретную строку кода?
В хранилище конфигурации посмотрите историю версий объекта и сравните соседние версии — по номеру версии видно автора захвата. В EDT с Git используйте аннотацию файла (blame), которая показывает автора каждой строки.