Как сравнить код и объекты в основной конфигурации и расширении 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Почему прямое сравнение недоступно?

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

Метод 1: Использование внешних текстовых редакторов

Рассмотрим самый простой и быстрый способ, который подходит для небольших процедур и функций. Если нам нужно сравнить конкретный блок кода, мы можем воспользоваться внешними инструментами, такими как Notepad++, Visual Studio Code или Sublime Text.

  1. Откроем модуль в основной конфигурации и найдем нужную процедуру.
  2. Скопируем весь текст процедуры (включая заголовок и конец процедуры).
  3. Вставим текст в новый файл в Notepad++.
  4. Аналогично скопируем текст процедуры из расширения, например:

&НаКлиенте
&ИзменениеИКонтроль("УстановитьВариантыОтраженияФрагмент")
Процедура Расш1_1УстановитьВариантыОтраженияФрагмент(Знач ВариантОтраженияУвеличениеКоличестваБезИнвентаризации)
    // Здесь находится измененный код
КонецПроцедуры
  1. Вставим этот текст во второй файл или вторую вкладку редактора.
  2. Воспользуемся плагином Compare в Notepad++ для визуального поиска различий.

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

Метод 2: Сравнение через внешние файлы (обработки)

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

  1. Создадим две новые внешние обработки (Файл -> Новый -> Внешняя обработка).
  2. В модуль объекта первой обработки вставим код из основной конфигурации.
  3. В модуль объекта второй обработки вставим код из расширения.
  4. Сохраним обе обработки на диск как .epf файлы.
  5. В конфигураторе выберем пункт меню Файл -> Сравнить файлы....
  6. Укажем пути к нашим обработкам.

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

Метод 3: Настройка внешней программы сравнения и объединения

Для профессиональной работы рекомендуется настроить интеграцию Конфигуратора с внешними утилитами сравнения, такими как KDiff3, WinMerge или P4Merge. Это позволит автоматизировать процесс актуализации расширений.

Проанализируем процесс настройки:

  1. Перейдем в меню Сервис -> Параметры.
  2. Откроем вкладку Общие -> Сравнение/Объединение.
  3. Нажмем кнопку Настройка программ сравнения....
  4. Добавим новую настройку, выбрав тип файла "Текстовый документ" или оставив "Для всех файлов".
  5. Укажем путь к исполняемому файлу внешней утилиты (например, kdiff3.exe).

После этой настройки, когда вы запускаете "Проверку возможности применения" расширения (в списке расширений), платформа при обнаружении конфликтов предложит открыть внешнюю программу. В ней вы увидите три панели: старый текст из расширения, новый текст из конфигурации и результат объединения.

Метод 4: Штатный механизм актуализации (для версий 8.3.15+)

В современных версиях платформы реализован мощный инструмент для работы с аннотацией &ИзменениеИКонтроль. Посмотрим на алгоритм его использования:

Когда основная конфигурация обновляется, хэш-сумма контролируемого метода меняется, и расширение перестает применяться. В этом случае:

  1. В дереве конфигурации щелкнем правой кнопкой мыши по расширению.
  2. Выберем пункт "Обновить расширение до текущей конфигурации".
  3. Откроется специализированное окно трехстороннего сравнения.

В этом окне платформа подсветит конкретные строки, которые изменились в основной конфигурации с момента создания расширения. Вы сможете перенести новые строки кода из конфигурации в блок #Вставка или #Удаление внутри вашего расширения прямо в этом интерфейсе.

Метод 5: Использование специализированных утилит (cfe2cf)

Существуют инструменты сообщества, такие как cfe2cf. Проанализируем принцип их работы: эта утилита конвертирует файл расширения (.cfe) в обычный файл конфигурации (.cf).

  1. Выгрузим расширение в файл .cfe.
  2. С помощью утилиты преобразуем его в .cf.
  3. Теперь мы можем использовать штатную функцию Конфигурация -> Сравнить конфигурации из файла, указав полученный .cf файл.

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

Метод 6: Среда разработки EDT (Enterprise Development Tools)

Рассмотрим продвинутый способ сравнения через 1C:EDT. В отличие от стандартного Конфигуратора, EDT основана на Eclipse и работает с файловой структурой проекта.

  1. Импортируем конфигурацию и расширение в проект EDT.
  2. В навигаторе проекта выделим объект в основной конфигурации и зажав Ctrl, выделим аналогичный объект в расширении.
  3. Нажмем правую кнопку мыши и выберем Compare With -> Each Other.

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

Метод 7: Выгрузка в XML-файлы

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

  1. Выполним команду Конфигурация -> Выгрузить конфигурацию в файлы... для основной конфигурации.
  2. Аналогично выгрузим расширение в другую папку.
  3. Используем программу для сравнения каталогов (например, Beyond Compare).

Этот метод незаменим, когда нужно понять, какие невидимые свойства объектов (например, составные типы данных или настройки прав) были изменены в расширении по сравнению с эталоном.

Важный совет: При работе с &ИзменениеИКонтроль всегда старайтесь минимизировать объем заимствованного кода. Чем меньше строк вы копируете из основной конфигурации в блок #Вставка, тем реже вам придется прибегать к процедуре сравнения и актуализации при обновлениях платформы.

← На главную