В процессе разработки на платформе 1С:Предприятие 8.3 часто возникает ситуация, когда функционал, изначально реализованный в расширении, необходимо «впитать» в основную конфигурацию. Это может быть связано с переходом на новый этап поддержки, требованием производительности или необходимостью реструктуризации кода. Однако многие разработчики сталкиваются с тем, что стандартного механизма «Сравнить и объединить» для пары «Конфигурация — Расширение» в обычном «Конфигураторе» не существует.
В этой статье мы подробно разберем, почему платформа выдает ошибку сравнения, и рассмотрим все доступные способы переноса доработок (включая конвертацию расширения в патч для временных решений), от ручных методов до продвинутой автоматизации с использованием современных инструментов разработки.
Разберем причину ограничения. Платформа 1С хранит расширения (файлы .cfe) отдельно от основной конфигурации (.cf). Механизм расширений задуман как аддитивный слой, который «накладывается» на основную структуру. При попытке сравнить их через стандартное меню Конфигуратор выдает предупреждение: «Сравнение конфигурации и расширения конфигурации не поддерживается». Это связано с разной логикой хранения метаданных и идентификаторов (UUID) объектов в этих сущностях.
Поскольку прямой кнопки нет, рассмотрим алгоритмы действий, которые позволяют решить задачу эффективно и без потерь данных.
Это самый доступный метод, не требующий установки дополнительного программного обеспечения. Проанализируем ситуацию: в расширении могут быть сотни заимствованных объектов, в которых вы ничего не меняли, а только использовали их для контекста. Переносить их вручную было бы слишком долго.
Рассмотрим пошагово, как упростить этот процесс:
Важный совет: При ручном переносе программного кода из модулей расширения (где используются аннотации &Перед, &После или &Вместо), не забудьте адаптировать код. В основной конфигурации эти аннотации не нужны — код должен быть интегрирован непосредственно в тело процедур или функций.
Проанализируем возможности современной среды разработки EDT. В отличие от классического «Конфигуратора», EDT представляет все объекты в виде набора текстовых XML-файлов и скриптов. Это кардинально меняет подход к объединению.
Посмотрим, как это работает в среде EDT:
Этот метод является наиболее «профессиональным» и надежным, так как позволяет видеть изменения на уровне текста и не пропускать мелкие правки в свойствах объектов.
Если вы не используете EDT, но объем изменений велик, разберем способ с выгрузкой исходных кодов. Платформа позволяет выгружать конфигурацию в файлы для последующего анализа.
Выполним следующие действия:
Конфигурация — Разработка конфигурации — Выгрузить конфигурацию в файлы. Выполним это для основной конфигурации.Проанализировав различия в папках src, вы сможете точно определить, какие модули (.bsl) и какие описания форм (.xml) были изменены. Хотя загружать изменения обратно в 1С через XML-файлы новичкам не рекомендуется, этот метод незаменим для глубокого аудита сделанных в расширении правок перед их ручным дублированием в основную базу.
Выясним причину, почему иногда полезно создать «пустое» расширение для сравнения. Хотя напрямую сравнить «CF — CFE» нельзя, платформа позволяет сравнивать два расширения между собой («Сравнить и объединить с расширением из файла»).
Некоторые разработчики используют такой трюк:
Однако этот метод довольно трудоемок и часто приводит к ошибкам из-за ограничений на типы заимствуемых объектов.
После того как вы перенесли функционал из расширения в основную конфигурацию, необходимо правильно «замести следы», чтобы избежать конфликтов в работе системы.
Разберем обязательные шаги:
ПриЗаписи из расширения в конфигурацию, но не удалили её из расширения, код выполнится дважды.Рассмотрим пример кода, который часто встречается в расширениях и требует адаптации при переносе:
// Так код выглядит в расширении
&Вместо("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)
// Наш новый код
ПровестиПоДополнительномуРегистру();
// Вызов основной логики
ПродолжитьВызов(Отказ, РежимПроведения);
КонецПроцедуры
// Так он должен выглядеть в основной конфигурации после переноса
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
// Стандартный код конфигурации...
// Вставленный нами код из расширения
ПровестиПоДополнительномуРегистру();
КонецПроцедуры
Подведем итог: На текущий момент платформа не предоставляет «волшебной кнопки» для слияния. Наиболее надежным способом для крупных проектов является использование EDT и систем контроля версий, а для небольших правок — использование фильтров измененных объектов в Конфигураторе и внимательный ручной перенос.