Разработка в среде 1С:Предприятие 8.3 часто требует использования расширений для доработки типовых конфигураций. Одной из наиболее частых задач является актуализация кода в расширении после обновления основной конфигурации. Однако при попытке вызвать стандартную команду "Сравнить, объединить с конфигурацией" для расширения, разработчики часто сталкиваются с ошибкой: "Сравнение конфигурации и расширения конфигурации не поддерживается". Разберем подробно, почему так происходит и какие существуют эффективные способы решения этой задачи. Для проведения регламентных работ при наличии нескольких информационных баз можно использовать инструмент для автоматического архивирования и обновления баз 1С.
Проанализируем архитектурную причину данного ограничения. Основная конфигурация 1С представляет собой полное описание структуры метаданных и программной логики. Расширение же — это набор "патчей" или дельт. В расширении могут присутствовать только измененные объекты или добавленные модули. Платформа не может сопоставить структуру расширения со структурой всей конфигурации в рамках одного окна сравнения, так как расширение — это не самостоятельная конфигурация, а дополнение к ней. Особенно остро проблема встает при использовании директивы &ИзменениеИКонтроль, где критически важно соответствие текста процедуры в расширении тексту в основной конфигурации. Для автоматического выявления таких пересечений метаданных и методов модулей можно использовать инструмент для аудита конфликтов расширений.
Рассмотрим самый простой и быстрый способ, который подходит для небольших процедур и функций. Если нам нужно сравнить конкретный блок кода, мы можем воспользоваться внешними инструментами, такими как Notepad++, Visual Studio Code или Sublime Text.
&НаКлиенте
&ИзменениеИКонтроль("УстановитьВариантыОтраженияФрагмент")
Процедура Расш1_1УстановитьВариантыОтраженияФрагмент(Знач ВариантОтраженияУвеличениеКоличестваБезИнвентаризации)
// Здесь находится измененный код
КонецПроцедуры
Compare в Notepad++ для визуального поиска различий.Этот метод удобен тем, что он не требует сложной настройки, однако он не учитывает контекст метаданных и требует ручного копирования. Для автоматизации повторяющихся действий в интерфейсе и избавления от рутины при переносе информации между окнами может применяться платформа для создания программных роботов RPA.
Выясним, как можно задействовать штатный механизм сравнения файлов 1С, если прямое сравнение конфигураций закрыто. Мы можем временно перенести код во внешние объекты.
Файл -> Новый -> Внешняя обработка)..epf файлы.Файл -> Сравнить файлы....Таким образом, мы обходим ограничение на сравнение конфигурации и расширения, используя инструмент сравнения произвольных файлов.
Для профессиональной работы рекомендуется настроить интеграцию Конфигуратора с внешними утилитами сравнения, такими как KDiff3, WinMerge или P4Merge. Это позволит автоматизировать процесс актуализации расширений.
Проанализируем процесс настройки:
Сервис -> Параметры.Общие -> Сравнение/Объединение.Настройка программ сравнения....kdiff3.exe).После этой настройки, когда вы запускаете "Проверку возможности применения" расширения (в списке расширений), платформа при обнаружении конфликтов предложит открыть внешнюю программу. В ней вы увидите три панели: старый текст из расширения, новый текст из конфигурации и результат объединения.
В современных версиях платформы реализован мощный инструмент для работы с аннотацией &ИзменениеИКонтроль. Посмотрим на алгоритм его использования:
Когда основная конфигурация обновляется, хэш-сумма контролируемого метода меняется, и расширение перестает применяться. В этом случае:
В этом окне платформа подсветит конкретные строки, которые изменились в основной конфигурации с момента создания расширения. Вы сможете перенести новые строки кода из конфигурации в блок #Вставка или #Удаление внутри вашего расширения прямо в этом интерфейсе.
Существуют инструменты сообщества, такие как cfe2cf. Проанализируем принцип их работы: эта утилита конвертирует файл расширения (.cfe) в обычный файл конфигурации (.cf).
.cfe..cf.Конфигурация -> Сравнить конфигурации из файла, указав полученный .cf файл.Это позволяет увидеть все отличия не только в коде, но и в макетах, формах и свойствах объектов метаданных.
Рассмотрим продвинутый способ сравнения через 1C:EDT. В отличие от стандартного Конфигуратора, EDT основана на Eclipse и работает с файловой структурой проекта.
Ctrl, выделим аналогичный объект в расширении.Compare With -> Each Other.EDT предоставляет гораздо более гибкие инструменты сравнения, позволяя сопоставлять любые элементы проекта между собой, независимо от их типа.
Для детального технического аудита изменений можно использовать выгрузку конфигурации в файлы. Разберем по шагам: чтобы дополнительно проконтролировать результат доработок и исключить ошибки в учете, применяется автоматическая сверка бухгалтерских и налоговых проводок.
Конфигурация -> Выгрузить конфигурацию в файлы... для основной конфигурации.Этот метод незаменим, когда нужно понять, какие невидимые свойства объектов (например, составные типы данных или настройки прав) были изменены в расширении по сравнению с эталоном.
Важный совет: При работе с &ИзменениеИКонтроль всегда старайтесь минимизировать объем заимствованного кода. Чем меньше строк вы копируете из основной конфигурации в блок #Вставка, тем реже вам придется прибегать к процедуре сравнения и актуализации при обновлениях платформы.