Как сравнить расширение конфигурации 1С с основной конфигурацией, если прямое сравнение не поддерживается?

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

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

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

Причина проблемы: Почему прямое сравнение не поддерживается?

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

Тем не менее, эта потребность является одной из ключевых в процессе разработки и поддержки систем 1С. К счастью, сообщество разработало несколько подходов для решения этой задачи.

Решение 1: Ручное сравнение модулей через текстовые файлы

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

  1. Выгружаем исходный модуль из основной конфигурации:

    Откройте основную конфигурацию в режиме "Конфигуратор". Найдите нужный модуль (например, модуль объекта, модуль формы, общий модуль). Откройте его и используйте команду "Файл" -> "Сохранить как..." (или аналогичную) для сохранения текста модуля в обычный текстовый файл (например, МойМодуль_Основной.txt).

  2. Выгружаем измененный модуль из расширения:

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

  3. Сравниваем текстовые файлы:

    Используйте любой удобный текстовый редактор с функцией сравнения файлов (например, Notepad++, Sublime Text, Visual Studio Code) или специализированную утилиту для сравнения текстовых файлов (diff-утилиту). Загрузите оба файла в инструмент сравнения, и он наглядно покажет все различия в коде.

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

Решение 2: Использование внешних программ для сравнения файлов (через выгрузку в XML)

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

  1. Выгружаем основную конфигурацию в набор файлов:

    В конфигураторе откройте основную конфигурацию. Используйте команду "Конфигурация" -> "Сохранить конфигурацию в файл..." и выберите папку для сохранения. Важно: для детального сравнения выбирайте опцию "Сохранить конфигурацию в файлы" (XML-файлы), а не просто "Сохранить конфигурацию в файл" (бинарный .cf файл), либо используйте В8АнПак - инструмент для распаковки конфигураций. Это создаст иерархию XML-файлов, представляющих каждый объект конфигурации.

  2. Выгружаем расширение конфигурации в набор файлов:

    Аналогично, в окне расширения конфигурации используйте команду "Конфигурация" -> "Сохранить расширение в файл..." и выберите отдельную папку для сохранения в виде XML-файлов.

  3. Сравниваем папки с файлами:

    Используйте специализированные утилиты для сравнения папок и файлов, такие как k3diff, Beyond Compare, WinMerge, Meld и другие. Эти программы могут сравнивать не только текстовые файлы, но и структуру каталогов, позволяя увидеть, какие файлы были добавлены, удалены или изменены. При этом мы будем анализировать XML-представление объектов, что намного информативнее прямого сравнения бинарных файлов .cf и .cfe, которое приводит к «абракадабре».

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

Решение 3: Использование аннотации &ИзменениеИКонтроль и механизма "Проверка возможности применения" (рекомендуемый подход с версии 8.3.15)

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

Что такое &ИзменениеИКонтроль?

Аннотация &ИзменениеИКонтроль используется в расширениях для модификации существующих методов основной конфигурации. В отличие от &Вместо (которая полностью заменяет исходный метод), &ИзменениеИКонтроль позволяет выполнить ваш код в расширении, а затем (или до, или вместо, в зависимости от логики) вызвать оригинальный метод конфигурации с помощью ПродолжитьВызов(). Главное преимущество этой аннотации заключается в том, что платформа 1С отслеживает изменения в исходном методе основной конфигурации. Если код исходного метода изменится (например, при обновлении), система предупредит вас об этом.

Процесс работы с &ИзменениеИКонтроль и "Проверка возможности применения":

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

  1. Отключаем расширения:

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

  2. Обновляем типовую конфигурацию:

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

  3. Подключаем расширения:

    После успешного обновления основной конфигурации, снова подключаем все наши расширения.

  4. Выполняем "Проверку возможности применения":

    В окне "Расширения конфигурации" (открывается через "Конфигурация" -> "Расширения конфигурации") выбираем наше расширение и нажимаем кнопку "Конфигурация" -> "Проверка возможности применения".

    Платформа 1С проанализирует все методы в расширении, использующие &ИзменениеИКонтроль. Если исходный метод в основной конфигурации, который мы модифицировали, изменился, система уведомит нас об этом. Мы увидим список функций расширений, для которых изменен текст модуля в основной конфигурации. Это очень удобно, так как нам не придется вручную выискивать изменения.

  5. Исправляем конфликты:

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

    • Исходный метод из старой версии типовой конфигурации.
    • Ваш измененный метод в расширении.
    • Исходный метод из новой версии типовой конфигурации.

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

Преимущества:

Недостатки:

Решение 4: Создание "расширения-скелета" для сравнения

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

  1. Создаем пустое расширение-"скелет":

    В конфигураторе создаем абсолютно новое, пустое расширение. Мы будем использовать его как временную рабочую область.

  2. Заимствуем в него объекты из основной конфигурации:

    В это расширение-"скелет" заимствуем все те объекты (справочники, документы, общие модули, формы и т.д.), которые были заимствованы и изменены в нашем *анализируемом* расширении. Это означает, что в расширении-"скелете" окажутся объекты в их *оригинальном* (типовом) виде из основной конфигурации.

  3. Сохраняем расширение-"скелет":

    Сохраняем это новое расширение-"скелет" в файл .cfe.

  4. Сравниваем "расширение-скелет" с анализируемым расширением:

    Теперь мы можем использовать стандартный механизм сравнения расширений: в конфигураторе открываем наше *анализируемое* расширение, затем выбираем "Конфигурация" -> "Сравнить, объединить с конфигурацией из файла..." и указываем файл .cfe нашего "скелета".

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

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

Решение 5: Выгрузка в XML-файлы и ручная/автоматизированная обработка (продвинутый подход)

Этот метод является более продвинутым и требует хорошего понимания структуры XML-файлов конфигураций 1С. Он предлагает максимальную гибкость и может быть автоматизирован.

  1. Выгружаем конфигурацию и расширение в XML-файлы:

    Как и в Решении 2, мы выгружаем и основную конфигурацию, и расширение в набор XML-файлов в отдельные папки. Например, основная конфигурация в Папка_Конфигурации, расширение в Папка_Расширения.

  2. Анализируем структуру XML-файлов:

    Структура этих файлов довольно специфична. Мы можем проанализировать, как объекты расширения отличаются от объектов конфигурации на уровне XML. Например, расширения могут содержать файлы с атрибутом , который указывает на базовый объект, и файлы с изменениями. В расширении объекты, которые были изменены, имеют особую структуру, указывающую на тип изменения (например, добавление реквизита, изменение метода).

  3. Преобразование конфигурации в "расширениеобразный" вид (опционально):

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

  4. Сравнение XML-файлов/папок:

    После подготовки мы используем те же инструменты для сравнения папок и файлов, что и в Решении 2, но теперь анализ будет более осмысленным, поскольку мы работаем с XML-структурами.

  5. Автоматизация:

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

Преимущества: Максимальная гибкость и детализация, возможность полной автоматизации.
Недостатки: Высокий порог входа, требует глубоких знаний XML-структуры 1С и навыков программирования.

Решение 6: Консолидация изменений через системы контроля версий (СКВ)

Для профессиональной разработки и командной работы системы контроля версий, такие как Git или SVN, являются неотъемлемой частью процесса. Хотя сами по себе СКВ не сравнивают расширение с конфигурацией напрямую, они позволяют эффективно отслеживать изменения в исходных текстах, выгруженных из конфигурации и расширения.

  1. Настройка рабочего процесса с СКВ:

    Мы настраиваем рабочий процесс таким образом, чтобы как основная конфигурация, так и расширения регулярно выгружались в набор файлов (например, в XML-представлении или в виде исходных текстов модулей) и ставились под контроль версий. Для этого можно использовать как встроенные средства 1С (при работе с хранилищем конфигурации), так и внешние утилиты для выгрузки.

  2. Отслеживание изменений:

    Каждое изменение в конфигурации или расширении фиксируется в СКВ. Это позволяет нам отслеживать историю изменений, кто и когда внес определенные правки.

  3. Сравнение версий:

    Когда нам нужно сравнить, например, изменения в расширении относительно новой версии основной конфигурации, мы можем выполнить следующие шаги:

    • Получаем из СКВ базовую версию конфигурации.
    • Получаем из СКВ новую версию конфигурации.
    • Получаем из СКВ текущую версию расширения.

    Затем с помощью инструментов визуализации сравнений (diff-инструменты, встроенные в среды разработки или клиент СКВ) мы можем сравнивать соответствующие файлы (модули, формы и т.д.) между разными релизными версиями основной конфигурации и расширения. Это часто включает трехстороннее сравнение, где мы видим исходный код типовой конфигурации, код расширения и обновленный код типовой конфигурации, что очень удобно для слияния изменений.

Преимущества: Полный контроль версий, история изменений, удобное сравнение версий, поддержка командной работы, возможность отката к предыдущим версиям.
Недостатки: Требует настройки инфраструктуры СКВ, дисциплины в работе с версиями, выгрузки объектов 1С в файловую систему.

Решение 7: Использование 1С:Enterprise Development Tools (EDT)

1С:Enterprise Development Tools (EDT) – это современная среда разработки на базе Eclipse, предназначенная для работы с решениями 1С:Предприятие. EDT кардинально меняет подход к разработке, позволяя работать с конфигурациями и расширениями как с проектами, где все объекты хранятся в виде исходных текстов на диске.

Хотя в ранних версиях EDT функционал сравнения мог быть "убогим", как упоминалось на форуме, современные версии EDT предлагают значительно более развитые средства:

  1. Проектный подход:

    В EDT мы работаем не с бинарными файлами .cf или .cfe, а с проектами, где конфигурация и расширения представлены в виде файлов (XML, исходные тексты модулей). Это позволяет использовать все преимущества работы с файловой системой и внешними инструментами, интегрированными в IDE.

  2. Встроенные средства сравнения:

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

  3. Интеграция с СКВ:

    EDT изначально тесно интегрирована с системами контроля версий (Git, SVN), что позволяет эффективно управлять изменениями, сравнивать версии, выполнять слияния и разрешать конфликты.

Преимущества: Современная среда разработки, мощные встроенные средства сравнения, глубокая интеграция с СКВ, работа с исходными текстами.
Недостатки: Требует перехода на EDT, может быть сложным для освоения новичками, требует привыкания к новому рабочему процессу.

Заключение

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

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

← На главную