Разработчики, работающие с платформой 1С:Предприятие 8, часто сталкиваются с необходимостью сравнить расширение конфигурации с основной конфигурацией. Это важно для отслеживания изменений, внесенных расширением, особенно после обновлений основной конфигурации, и для понимания влияния этих изменений на базовую логику. Однако, как мы видим из первого сообщения на форуме, стандартные средства конфигуратора (например, в версии 8.3.13.1809) прямое сравнение конфигурации и расширения не поддерживают, выдавая сообщение "Сравнение конфигурации и расширения конфигурации не поддерживается". Эта ситуация создает определенные сложности, особенно при работе с большим количеством расширений или при сопровождении доработок, выполненных разными специалистами.
В этой статье мы подробно разберем, почему возникает такая проблема и какие существуют эффективные способы ее решения, начиная от простых обходных путей и заканчивая более продвинутыми профессиональными методами. Мы рассмотрим как встроенные в платформу возможности, так и сторонние инструменты, которые помогут нам получить полный отчет о различиях между расширением и основной конфигурацией.
Платформа 1С:Предприятие разработана таким образом, что конфигурация и расширение являются разными сущностями с точки зрения механизма сравнения. Конфигурация – это основной программный код и метаданные приложения, а расширение – это набор изменений и дополнений, который "накладывается" поверх основной конфигурации, не изменяя ее напрямую. Механизм сравнения в конфигураторе изначально был ориентирован на сравнение двух конфигураций (например, текущей с конфигурацией поставщика или двух версий одной конфигурации) или двух расширений между собой. Прямое сравнение основной конфигурации и расширения конфигурации, как если бы расширение было "измененной" версией основной конфигурации, не предусмотрено, поскольку расширение работает по принципу "наследования" и "переопределения", а не прямого изменения базовых объектов.
Тем не менее, эта потребность является одной из ключевых в процессе разработки и поддержки систем 1С. К счастью, сообщество разработало несколько подходов для решения этой задачи.
Один из самых простых и доступных способов, предложенных на форуме, заключается в ручной выгрузке исходного кода и его последующем сравнении. Этот метод подходит, если вам нужно проанализировать изменения только в одном или нескольких модулях.
Выгружаем исходный модуль из основной конфигурации:
Откройте основную конфигурацию в режиме "Конфигуратор". Найдите нужный модуль (например, модуль объекта, модуль формы, общий модуль). Откройте его и используйте команду "Файл" -> "Сохранить как..." (или аналогичную) для сохранения текста модуля в обычный текстовый файл (например, МойМодуль_Основной.txt).
Выгружаем измененный модуль из расширения:
Переключитесь на расширение конфигурации. Найдите тот же модуль, который был заимствован и изменен в расширении. Откройте его и аналогичным образом сохраните текст модуля в отдельный текстовый файл (например, МойМодуль_Расширение.txt).
Сравниваем текстовые файлы:
Используйте любой удобный текстовый редактор с функцией сравнения файлов (например, Notepad++, Sublime Text, Visual Studio Code) или специализированную утилиту для сравнения текстовых файлов (diff-утилиту). Загрузите оба файла в инструмент сравнения, и он наглядно покажет все различия в коде.
Преимущества: Простота, не требует специализированного ПО, кроме конфигуратора и текстового редактора.
Недостатки: Крайне неэффективно для большого количества модулей, форм или других объектов. Ручной перенос изменений может быть трудоемким.
Для более объемного сравнения или если нужно анализировать не только модули, но и другие объекты конфигурации (формы, макеты и т.д.), мы можем выгрузить всю конфигурацию и расширение в файлы и затем использовать внешние инструменты.
Выгружаем основную конфигурацию в набор файлов:
В конфигураторе откройте основную конфигурацию. Используйте команду "Конфигурация" -> "Сохранить конфигурацию в файл..." и выберите папку для сохранения. Важно: для детального сравнения выбирайте опцию "Сохранить конфигурацию в файлы" (XML-файлы), а не просто "Сохранить конфигурацию в файл" (бинарный .cf файл), либо используйте В8АнПак - инструмент для распаковки конфигураций. Это создаст иерархию XML-файлов, представляющих каждый объект конфигурации.
Выгружаем расширение конфигурации в набор файлов:
Аналогично, в окне расширения конфигурации используйте команду "Конфигурация" -> "Сохранить расширение в файл..." и выберите отдельную папку для сохранения в виде XML-файлов.
Сравниваем папки с файлами:
Используйте специализированные утилиты для сравнения папок и файлов, такие как k3diff, Beyond Compare, WinMerge, Meld и другие. Эти программы могут сравнивать не только текстовые файлы, но и структуру каталогов, позволяя увидеть, какие файлы были добавлены, удалены или изменены. При этом мы будем анализировать XML-представление объектов, что намного информативнее прямого сравнения бинарных файлов .cf и .cfe, которое приводит к «абракадабре».
Преимущества: Позволяет сравнивать не только модули, но и другие объекты в более структурированном виде.
Недостатки: Все еще требует ручного анализа различий, может быть неудобно для выявления точечных изменений, внесенных расширением в типовые объекты.
Этот метод является одним из наиболее эффективных и рекомендованных 1С для работы с расширениями, начиная с платформы 8.3.15. Он значительно упрощает процесс отслеживания и слияния изменений, особенно при обновлении основной конфигурации.
Аннотация &ИзменениеИКонтроль используется в расширениях для модификации существующих методов основной конфигурации. В отличие от &Вместо (которая полностью заменяет исходный метод), &ИзменениеИКонтроль позволяет выполнить ваш код в расширении, а затем (или до, или вместо, в зависимости от логики) вызвать оригинальный метод конфигурации с помощью ПродолжитьВызов(). Главное преимущество этой аннотации заключается в том, что платформа 1С отслеживает изменения в исходном методе основной конфигурации. Если код исходного метода изменится (например, при обновлении), система предупредит вас об этом.
Этот подход особенно ценен при обновлении типовой конфигурации, когда нам необходимо убедиться, что наше расширение продолжает корректно работать с новой версией базовой конфигурации. Разберем по шагам, как мы будем действовать:
Отключаем расширения:
Перед началом обновления основной конфигурации временно отключаем все расширения. Это гарантирует, что обновление пройдет без конфликтов, связанных с расширениями.
Обновляем типовую конфигурацию:
Выполняем стандартную процедуру обновления основной конфигурации до новой версии поставщика. На этом этапе мы просто принимаем все изменения поставщика.
Подключаем расширения:
После успешного обновления основной конфигурации, снова подключаем все наши расширения.
Выполняем "Проверку возможности применения":
В окне "Расширения конфигурации" (открывается через "Конфигурация" -> "Расширения конфигурации") выбираем наше расширение и нажимаем кнопку "Конфигурация" -> "Проверка возможности применения".
Платформа 1С проанализирует все методы в расширении, использующие &ИзменениеИКонтроль. Если исходный метод в основной конфигурации, который мы модифицировали, изменился, система уведомит нас об этом. Мы увидим список функций расширений, для которых изменен текст модуля в основной конфигурации. Это очень удобно, так как нам не придется вручную выискивать изменения.
Исправляем конфликты:
Для каждого метода, который был изменен в типовой конфигурации и затрагивает наше расширение, мы получим возможность "восстановить соответствие". Обычно это происходит в полуавтоматическом режиме. При нажатии на соответствующую ссылку или кнопку, открывается окно сравнения, где мы видим три версии кода:
Нам останется только проанализировать эти три версии, понять, какие изменения внес поставщик, и какие изменения были сделаны нами, а затем аккуратно объединить их. Часто достаточно просто пролистать окно сравнения и подтвердить изменения, если наша логика не конфликтует с новой логикой типового решения. Если же логика существенно изменилась, придется вручную скорректировать код расширения или использовать ИИ помощник обновления процедур/функций расширений.
Преимущества:
Недостатки:
&ИзменениеИКонтроль. Если вы используете &Вместо, такой контроль недоступен.Этот метод, предложенный на форуме, является своеобразным обходным путем, позволяющим использовать стандартные средства сравнения конфигуратора, но немного "схитрив".
Создаем пустое расширение-"скелет":
В конфигураторе создаем абсолютно новое, пустое расширение. Мы будем использовать его как временную рабочую область.
Заимствуем в него объекты из основной конфигурации:
В это расширение-"скелет" заимствуем все те объекты (справочники, документы, общие модули, формы и т.д.), которые были заимствованы и изменены в нашем *анализируемом* расширении. Это означает, что в расширении-"скелете" окажутся объекты в их *оригинальном* (типовом) виде из основной конфигурации.
Сохраняем расширение-"скелет":
Сохраняем это новое расширение-"скелет" в файл .cfe.
Сравниваем "расширение-скелет" с анализируемым расширением:
Теперь мы можем использовать стандартный механизм сравнения расширений: в конфигураторе открываем наше *анализируемое* расширение, затем выбираем "Конфигурация" -> "Сравнить, объединить с конфигурацией из файла..." и указываем файл .cfe нашего "скелета".
В результате мы получим отчет о сравнении, который покажет все отличия *анализируемого* расширения от тех объектов, которые были заимствованы из основной конфигурации (представленные в "скелете"). Это позволяет нам увидеть, какие именно изменения были внесены нашим расширением относительно типовой конфигурации, используя стандартный интерфейс сравнения 1С (существует также специализированное решение для поиска заимствованных форм в расширениях при обновлении).
Преимущества: Позволяет использовать привычный интерфейс сравнения конфигуратора.
Недостатки: Требует ручного заимствования объектов в "скелет", что может быть трудоемким для большого количества измененных объектов.
Этот метод является более продвинутым и требует хорошего понимания структуры XML-файлов конфигураций 1С. Он предлагает максимальную гибкость и может быть автоматизирован.
Выгружаем конфигурацию и расширение в XML-файлы:
Как и в Решении 2, мы выгружаем и основную конфигурацию, и расширение в набор XML-файлов в отдельные папки. Например, основная конфигурация в Папка_Конфигурации, расширение в Папка_Расширения.
Анализируем структуру XML-файлов:
Структура этих файлов довольно специфична. Мы можем проанализировать, как объекты расширения отличаются от объектов конфигурации на уровне XML. Например, расширения могут содержать файлы с атрибутом , который указывает на базовый объект, и файлы с изменениями. В расширении объекты, которые были изменены, имеют особую структуру, указывающую на тип изменения (например, добавление реквизита, изменение метода).
Преобразование конфигурации в "расширениеобразный" вид (опционально):
Один из участников обсуждения предлагает радикальный подход: вручную или с помощью скриптов модифицировать XML-файлы основной конфигурации так, чтобы она "притворилась" расширением. Это может включать добавление служебных XML-тегов, изменение определенных атрибутов и удаление лишних метаданных, чтобы затем можно было сравнить "модифицированную" конфигурацию с реальным расширением. Этот процесс сложен и требует глубоких знаний, но позволяет добиться очень точного сравнения на уровне XML-структур.
Сравнение XML-файлов/папок:
После подготовки мы используем те же инструменты для сравнения папок и файлов, что и в Решении 2, но теперь анализ будет более осмысленным, поскольку мы работаем с XML-структурами.
Автоматизация:
Для регулярного контроля изменений мы можем создать скрипты (например, на Python или PowerShell), которые будут автоматически выполнять выгрузку конфигурации и расширений в XML, а затем запускать внешние инструменты сравнения. Результаты сравнения могут быть сохранены в отчетах для дальнейшего анализа. Это особенно полезно в проектах с частыми обновлениями и большим количеством доработок.
Преимущества: Максимальная гибкость и детализация, возможность полной автоматизации.
Недостатки: Высокий порог входа, требует глубоких знаний XML-структуры 1С и навыков программирования.
Для профессиональной разработки и командной работы системы контроля версий, такие как Git или SVN, являются неотъемлемой частью процесса. Хотя сами по себе СКВ не сравнивают расширение с конфигурацией напрямую, они позволяют эффективно отслеживать изменения в исходных текстах, выгруженных из конфигурации и расширения.
Настройка рабочего процесса с СКВ:
Мы настраиваем рабочий процесс таким образом, чтобы как основная конфигурация, так и расширения регулярно выгружались в набор файлов (например, в XML-представлении или в виде исходных текстов модулей) и ставились под контроль версий. Для этого можно использовать как встроенные средства 1С (при работе с хранилищем конфигурации), так и внешние утилиты для выгрузки.
Отслеживание изменений:
Каждое изменение в конфигурации или расширении фиксируется в СКВ. Это позволяет нам отслеживать историю изменений, кто и когда внес определенные правки.
Сравнение версий:
Когда нам нужно сравнить, например, изменения в расширении относительно новой версии основной конфигурации, мы можем выполнить следующие шаги:
Затем с помощью инструментов визуализации сравнений (diff-инструменты, встроенные в среды разработки или клиент СКВ) мы можем сравнивать соответствующие файлы (модули, формы и т.д.) между разными релизными версиями основной конфигурации и расширения. Это часто включает трехстороннее сравнение, где мы видим исходный код типовой конфигурации, код расширения и обновленный код типовой конфигурации, что очень удобно для слияния изменений.
Преимущества: Полный контроль версий, история изменений, удобное сравнение версий, поддержка командной работы, возможность отката к предыдущим версиям.
Недостатки: Требует настройки инфраструктуры СКВ, дисциплины в работе с версиями, выгрузки объектов 1С в файловую систему.
1С:Enterprise Development Tools (EDT) – это современная среда разработки на базе Eclipse, предназначенная для работы с решениями 1С:Предприятие. EDT кардинально меняет подход к разработке, позволяя работать с конфигурациями и расширениями как с проектами, где все объекты хранятся в виде исходных текстов на диске.
Хотя в ранних версиях EDT функционал сравнения мог быть "убогим", как упоминалось на форуме, современные версии EDT предлагают значительно более развитые средства:
Проектный подход:
В EDT мы работаем не с бинарными файлами .cf или .cfe, а с проектами, где конфигурация и расширения представлены в виде файлов (XML, исходные тексты модулей). Это позволяет использовать все преимущества работы с файловой системой и внешними инструментами, интегрированными в IDE.
Встроенные средства сравнения:
EDT имеет мощные встроенные инструменты для сравнения кода и визуализации различий между любыми двумя версиями файлов или целых проектов. Мы можем легко сравнивать версии модулей, форм, макетов и других объектов, а также анализировать, как изменения в расширении влияют на основную конфигурацию, работая с текстовыми представлениями кода.
Интеграция с СКВ:
EDT изначально тесно интегрирована с системами контроля версий (Git, SVN), что позволяет эффективно управлять изменениями, сравнивать версии, выполнять слияния и разрешать конфликты.
Преимущества: Современная среда разработки, мощные встроенные средства сравнения, глубокая интеграция с СКВ, работа с исходными текстами.
Недостатки: Требует перехода на EDT, может быть сложным для освоения новичками, требует привыкания к новому рабочему процессу.
Несмотря на изначальное отсутствие прямого сравнения расширения с конфигурацией в стандартном конфигураторе 1С, существует множество эффективных способов решения этой проблемы. Выбор метода зависит от ваших потребностей, объема проекта и версии платформы:
&ИзменениеИКонтроль в сочетании с механизмом "Проверка возможности применения". Этот подход значительно упрощает процесс обновления и отслеживания изменений.Важно помнить, что технологические возможности платформы 1С постоянно развиваются. С каждой новой версией появляются новые инструменты и улучшаются существующие механизмы для работы с расширениями, в том числе и для их сравнения с основной конфигурацией. Активное использование аннотации &ИзменениеИКонтроль является ключевым для упрощения процесса обновления и контроля изменений в ваших расширениях.