Разработка и Конфигурация · 10 мин
Как сравнить расширения 1С: практическое руководство
Как сравнить расширения конфигурации 1С между собой и с основной конфигурацией: встроенное сравнение, выгрузка в файлы конфигурации, анализ заимствованных объектов и типичные ошибки.
Расширения конфигурации в 1С позволяют дорабатывать типовой функционал без снятия конфигурации с поддержки. Но как только расширений становится несколько — от разных разработчиков, подрядчиков или версий — возникает задача их сравнения: понять, какие объекты заимствованы, где пересекаются доработки, что изменилось между версиями одного расширения и не конфликтуют ли они между собой.
Сравнивать расширения можно несколькими способами: встроенным механизмом «Сравнение и объединение конфигураций», выгрузкой расширения в файл и последующим анализом, а также через сравнение XML-выгрузок внешними инструментами. Выбор зависит от цели: быстрая проверка пересечений, аудит чужого расширения перед установкой или контроль изменений между версиями.
Важно понимать ограничение: штатный механизм сравнения в конфигураторе работает с конфигурациями, а расширение — не полноценная конфигурация, а надстройка. Поэтому прямого пункта «сравнить два расширения» в меню нет, и задача решается обходными, но вполне рабочими путями.
Что именно можно сравнивать у расширений
Прежде чем выбирать инструмент, определите объект сравнения. Расширение состоит из заимствованных объектов (метаданных, взятых из основной конфигурации и изменённых), собственных добавленных объектов, модулей с кодом, ролей, форм и макетов. Сравнивать можно любой из этих слоёв.
Типовые задачи сравнения выглядят так:
- сравнение двух версий одного расширения — что изменил подрядчик в новой поставке;
- сравнение двух разных расширений — не дорабатывают ли они одни и те же объекты, что грозит конфликтом;
- сравнение расширения с основной конфигурацией — какие именно объекты заимствованы и как изменены;
- проверка расширения после обновления основной конфигурации — не «отвалились» ли заимствованные объекты.
От задачи зависит метод. Для анализа кода удобнее текстовое сравнение модулей, для структуры метаданных — штатное сравнение конфигураций, для проверки конфликтов — контроль применимости в конфигураторе.
Способ 1. Сравнение через выгрузку расширения в файл конфигурации
Наиболее наглядный способ — превратить расширение в конфигурацию и воспользоваться стандартным механизмом сравнения. В конфигураторе откройте список расширений (Конфигурация → Расширения конфигурации), выделите нужное расширение и используйте команду сохранения в файл — расширение выгружается в файл с расширением .cfe.
Далее есть два пути. Первый: создать пустую информационную базу, загрузить в неё файл расширения как конфигурацию (для этого потребуется преобразование, так как .cfe — не .cf), что не всегда удобно. Второй, более практичный: использовать возможность сравнения расширения с конфигурацией из файла, если ваша версия платформы это поддерживает, либо перейти к сравнению XML-выгрузок.
На практике чаще всего поступают так: выгружают расширение в файлы конфигурации (XML-формат) через команду «Конфигурация → Выгрузить конфигурацию в файлы», предварительно сделав расширение активным в дереве конфигурации. Полученный каталог XML-файлов уже можно сравнивать любым инструментом.
- 1Выгрузите первую версию расширения в XML-файлы в отдельный каталог
- 2Выгрузите вторую версию в другой каталог
- 3Откройте сравнение каталогов в WinMerge, KDiff3 или аналогичном инструменте
- 4Отфильтруйте служебные файлы и проанализируйте различия в модулях и формах
- 5Зафиксируйте изменённые объекты и проверьте критичные доработки вручную
Способ 2. Сравнение расширения с основной конфигурацией
Когда нужно понять, что именно расширение меняет в типовой конфигурации, откройте расширение в конфигураторе — его дерево показывает только заимствованные и собственные объекты. Уже сам список заимствованных объектов даёт ответ на вопрос «что затронуто».
Для детального анализа кода откройте заимствованный модуль: конфигуратор показывает разметку, где видно, какие методы переопределены, какие вызываются до, после или вместо типовых (аннотации &Перед, &После, &Вместо, &ИзменениеИКонтроль). Сравнение с типовым кодом выполняется визуально по этой разметке.
Для форм ситуация аналогична: расширенная форма показывает добавленные и изменённые элементы. Если доработок много, полезно выгрузить форму в XML и сравнить с типовой формой из выгрузки основной конфигурации.
Способ 3. Проверка конфликтов нескольких расширений
Если в базе работает несколько расширений, главный вопрос сравнения — пересекаются ли они по объектам. Два расширения, изменяющие один и тот же метод или одну форму, могут конфликтовать: порядок применения определяется сортировкой в списке расширений, и поведение становится неочевидным.
Чтобы выявить пересечения, откройте каждое расширение и выпишите (или выгрузите) списки заимствованных объектов. Совпадения по документам, общим модулям и формам — зона риска. Дополнительно используйте контроль применимости: конфигуратор и режим предприятия показывают ошибки применения расширений при обновлении конфигурации или подключении.
Для автоматизации анализа можно выгрузить оба расширения в XML и сравнить списки файлов: совпадающие пути объектов укажут на пересечения. Это быстрее ручного перебора при большом количестве доработок.
Сравнение расширений в 1С:EDT
Если разработка ведётся в 1C:Enterprise Development Tools, сравнение заметно удобнее. EDT хранит расширение как проект, и к нему применимы все возможности сравнения версий: встроенное сравнение с историей Git, сравнение двух проектов, сравнение с конфигурацией информационной базы.
Практический сценарий: импортируйте оба расширения как два проекта, затем используйте функцию сравнения проектов (Compare With → Each Other). EDT покажет структурное сравнение по объектам, модулям и формам с подсветкой различий — это самый полный штатный вариант для расширений.
Дополнительный плюс EDT — хранение проектов в системе контроля версий. Если расширение ведётся в Git, сравнение любых двух версий сводится к стандартному diff, а история изменений документируется автоматически.
Сравнение инструментов
Подходит для разового сравнения версий без дополнительного ПО; требует внешней утилиты сравнения файлов
Лучший вариант для регулярной работы и командной разработки; требует перехода на EDT и желательно Git
Быстрое текстовое сравнение модулей; не понимают структуру метаданных, показывают только различия файлов
Как проверить результат сравнения и не ошибиться
Само по себе сравнение файлов не гарантирует корректности выводов. Расширение хранит дельту, поэтому одинаковые с виду XML-файлы могут по-разному применяться к разным версиям основной конфигурации. Всегда учитывайте, для какой версии конфигурации написано расширение.
После сравнения и установки расширения выполните контрольные проверки: применимость расширения в конфигураторе, отсутствие ошибок в журнале регистрации при запуске, работоспособность изменённых документов и отчётов на тестовых данных.
Как проверить результат
В списке расширений нет пометок об ошибках, контроль проходит без сообщений
Ошибки применимости, ссылки на отсутствующие объекты конфигурации
Документы проводятся, формы открываются, отчёты формируются
Ошибки вызова методов, падение форм, сообщения о ненайденных процедурах
Нет новых ошибок после подключения расширения
Повторяющиеся ошибки в сеансах пользователей
Типичные ошибки при сравнении расширений
Первая ошибка — сравнение «в лоб» через бинарные файлы .cfe. Эти файлы не предназначены для текстового сравнения: различия в них нечитаемы. Всегда преобразуйте расширение в XML-выгрузку или проект EDT.
Вторая ошибка — игнорирование контекста основной конфигурации. Расширение, корректное для одной версии типовой конфигурации, может быть неприменимо к другой. Сравнивать расширения без учёта версии базовой конфигурации бессмысленно.
Третья ошибка — оценка только кода модулей. Конфликты часто сидят в формах, ролях и изменении состава реквизитов, а не только в процедурах. Сравнивайте все слои расширения.
Что важно запомнить
Штатного пункта «сравнить два расширения» в конфигураторе нет. Рабочие подходы: выгрузка в XML и сравнение внешним инструментом, проекты и сравнение в EDT, анализ заимствованных объектов и контроль применимости. Любые проверки выполняйте на копии базы, обращая внимание на пересечения расширений по объектам.
Частые вопросы
Можно ли сравнить два расширения прямо в конфигураторе?
Нет, штатной команды сравнения двух расширений в конфигураторе нет. Обходные пути: выгрузить расширения в XML-файлы и сравнить внешним инструментом либо импортировать их в 1C:EDT и сравнить проекты между собой.
Чем открыть и сравнить файл расширения .cfe?
Файл .cfe — бинарный формат поставки расширения, текстово он не сравнивается. Загрузите его в тестовую базу через конфигуратор, затем выгрузите расширение в файлы конфигурации (XML) и сравнивайте уже их. Либо импортируйте расширение в проект EDT.
Как узнать, конфликтуют ли два расширения между собой?
Сравните списки заимствованных объектов обоих расширений: совпадения по модулям, формам и объектам — зона риска. Затем проверьте работу на копии базы: подключите оба расширения, выполните контроль применимости и протестируйте изменённые документы и отчёты.
Что делать, если после обновления конфигурации расширение перестало применяться?
Откройте расширение в конфигураторе и посмотрите ошибки применимости: обычно это переименованные или удалённые объекты и методы типовой конфигурации. Сравните заимствованные методы с новыми типовыми версиями (удобно через &ИзменениеИКонтроль) и актуализируйте код расширения.
Как сравнить только код модулей двух версий расширения?
Выгрузите обе версии в XML-файлы, найдите файлы модулей (обычно Module.bsl в каталогах соответствующих объектов) и сравните их пару за парой в WinMerge или аналогичном инструменте. Так видны точные изменения в процедурах и функциях.
Нужен ли Git для работы с расширениями?
Не обязателен, но сильно упрощает жизнь: при ведении расширения в EDT с Git сравнение любых версий сводится к стандартному diff, появляется история изменений и возможность отката. Для разовых задач достаточно XML-выгрузки и внешнего инструмента сравнения.