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

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

Как сравнить два расширения 1С

Как сравнить два расширения конфигурации 1С: встроенное сравнение в конфигураторе, выгрузка в XML, внешние инструменты, проверка совместимости и типичные ошибки.

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

Платформа 1С:Предприятие 8.3 предоставляет встроенный механизм сравнения и объединения, который работает и с расширениями. Однако он показывает различия на уровне метаданных и модулей, а для глубокого анализа — например, построчного сравнения кода или проверки заимствованных объектов — часто удобнее выгрузить расширения в файлы конфигурации и сравнить их внешними средствами. Ниже разобраны оба подхода, их ограничения и порядок действий для каждого сценария.

Определите цель сравнения и формат исходных данных

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

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

Подготовьте базу и сделайте резервную копию

Любые операции с расширениями выполняйте на копии базы, а не на рабочей. Загрузка и сравнение расширений могут менять структуру данных в подключённых расширениях, и при ошибке откат без бэкапа будет затруднён. Создайте выгрузку информационной базы через пункт «Администрирование — Выгрузить информационную базу» в конфигураторе или штатное резервное копирование на уровне СУБД, если база клиент-серверная.

Если расширения уже подключены к базе, запишите их текущие версии и порядок подключения: откройте в режиме «Предприятие» список расширений (раздел «Администрирование — Печатные формы, отчеты и обработки — Расширения» в типовых конфигурациях) или аналогичный список в конфигураторе. Это понадобится, чтобы восстановить исходное состояние после экспериментов.

Сравните расширения встроенными средствами конфигуратора

Основной сценарий: одно расширение уже открыто в конфигураторе, второе лежит в файле .cfe. Откройте конфигуратор, загрузите первое расширение в нужную базу (или откройте базу, где оно уже подключено), затем перейдите в меню «Конфигурация — Расширения конфигурации», выделите нужное расширение и откройте его. Далее используйте команду «Конфигурация — Сравнить, объединить с расширением конфигурации из файла» и укажите второй файл .cfe.

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

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

Порядок действий в конфигураторе
  1. 1
    Создайте копию базы и откройте её в конфигураторе
  2. 2
    Загрузите первое расширение через «Конфигурация — Расширения конфигурации»
  3. 3
    Откройте расширение и выполните «Сравнить, объединить с расширением конфигурации из файла»
  4. 4
    Укажите второй файл *.cfe и изучите дерево различий
  5. 5
    Для модулей откройте детальное построчное сравнение двойным щелчком
  6. 6
    При необходимости отметьте объекты для объединения и выполните обновление

Выгрузите расширения в XML для построчного сравнения

Когда нужен аудит кода или сравнение вне конфигуратора, выгрузите оба расширения в файлы конфигурации. В конфигураторе с открытым расширением выполните «Конфигурация — Выгрузить в файлы» (для расширения команда доступна в его контексте) и укажите каталог. Повторите для второго расширения в другой каталог. Каждый объект будет сохранён как отдельный XML-файл, а модули — как текстовые файлы bsl.

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

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

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

Проверьте заимствованные объекты и совместимость с основной конфигурацией

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

Обратите внимание на свойства расширения: назначение (исправление, адаптация, дополнение), контролируемые объекты и режимы проверки. Два расширения с одинаковым кодом, но разным назначением, ведут себя по-разному при обновлении основной конфигурации. Также сравните версии платформы и режимы совместимости, указанные в свойствах расширений.

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

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

Дерево сравнения в конфигураторе
Норма

Различия соответствуют ожидаемым доработкам, лишних изменённых объектов нет

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

Изменены объекты, которые по задаче меняться не должны

Заимствованные объекты
Норма

Все заимствования ссылаются на существующие объекты основной конфигурации

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

Есть ссылки на отсутствующие объекты или реквизиты

Подключение к тестовой базе
Норма

Расширение подключается без ошибок, база обновляется

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

Ошибки проверки применимости или обновления

Объедините расширения, если это цель сравнения

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

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

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

Частые вопросы о сравнении расширений 1С

Можно ли сравнить два файла *.cfe напрямую, без базы?

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

Что делать, если при сравнении платформа сообщает о несовместимости?

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

Как сравнить расширение, подключённое к базе, с его прежней версией?

Если прежняя версия сохранена в файле *.cfe, откройте расширение в конфигураторе и выполните сравнение с файлом. Если файла нет, а прежняя версия осталась в другой базе, выгрузите её оттуда через «Сохранить в файл» в списке расширений и далее сравнивайте как обычно.

Почему построчное сравнение модулей в конфигураторе неудобно для больших доработок?

Встроенное сравнение открывается по одному объекту и не даёт общей картины по всем изменённым строкам сразу. Для масштабного анализа выгрузите расширения в файлы и сравните каталоги внешним diff-инструментом — так видны все отличия одновременно и доступен поиск по коду.

Можно ли объединить два расширения автоматически, без ручного разбора?

Полностью автоматически — только если изменения не пересекаются. Как только оба расширения меняют один объект или модуль, требуется ручной выбор версии или ручная правка кода. Автоматическое принятие всех изменений с высокой вероятностью приведёт к потере части доработок.

Итог

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

Расширения 1С сравнивают в конфигураторе командой «Сравнить, объединить с расширением из файла» или через выгрузку в XML и внешний diff-инструмент. Работайте только на копии базы, проверяйте заимствованные объекты и назначение расширения, а конфликты при объединении разбирайте вручную с последующей проверкой ключевых сценариев.