Разработка и Конфигурация · 13 мин
Как перенести доработки в расширение 1С
Как перенести доработки из конфигурации 1С в расширение: подготовка, перенос объектов и кода, подмена методов, проверка результата и типичные ошибки.
Доработки, внесённые напрямую в типовую конфигурацию, усложняют обновление: каждый релиз требует ручного сопоставления изменений, а риск потерять код растёт с каждым обновлением. Расширение конфигурации решает эту проблему — оно хранит доработки отдельно от основной конфигурации и подключается поверх неё без снятия с поддержки.
Перенос доработок в расширение — это не копирование объектов «как есть», а переосмысление изменений: часть из них переносится заимствованием объектов, часть — перехватом типовых методов через аннотации, а некоторые доработки придётся реализовать иначе, потому что расширение имеет ограничения. Ниже разобран полный цикл работ: от анализа изменений до проверки результата.
Что можно и что нельзя перенести в расширение
Перед началом работ важно понять границы механизма. Расширения позволяют добавлять новые объекты метаданных (справочники, документы, отчёты, обработки, регистры сведений), заимствовать типовые объекты и изменять их формы, модули, команды, роли и макеты. Можно расширять состав подсистем, критериев отбора и планов обмена в ограниченных пределах.
Ограничения существенны. Нельзя изменять состав измерений и ресурсов регистров накопления и бухгалтерии, нельзя менять тип реквизитов типовых объектов, нельзя расширять планы счетов и планы видов расчёта в полном объёме, нельзя изменять код модулей, вызываемых в контексте, где расширение не подключено (например, фоновые задания с отключёнными расширениями). Добавленные в расширении реквизиты объектов требуют режима совместимости расширения не ниже используемого платформой.
Если доработка затрагивает то, что расширения не поддерживают, есть три варианта: реализовать логику через внешнюю обработку или подписку на событие, вынести функциональность в отдельный сервис с обменом данными, либо оставить минимальную правку в конфигурации, изолировав её для простого переноса при обновлении.
Как зафиксировать все существующие доработки
Первый шаг — получить полный и достоверный список изменений. Откройте конфигуратор и выполните сравнение рабочей конфигурации с конфигурацией поставщика: меню «Конфигурация» → «Сравнить, объединить с конфигурацией из файла», указав файл типовой поставки нужной версии, либо используйте сравнение с конфигурацией базы данных, если поставщик не обновлялся. Результат покажет все изменённые и добавленные объекты.
Выгрузите отчёт о сравнении в табличный документ и сохраните его — это ваш реестр доработок. Для каждого изменённого объекта зафиксируйте: что именно изменено (модуль, форма, состав, реквизит), зачем сделано изменение и кто его автор. Без понимания назначения правки невозможно правильно перенести её в расширение: одна и та же доработка может требовать разных подходов в зависимости от цели.
Отдельно проверьте изменения в модулях: сравнение на уровне объектов показывает факт изменения, но не его содержимое. Для модулей сделайте построчное сравнение текстов (конфигуратор умеет сравнивать тексты модулей) и выпишите каждый изменённый или добавленный фрагмент кода с указанием метода.
- 1Сравните рабочую конфигурацию с конфигурацией поставщика и сохраните отчёт о различиях.
- 2Для каждого изменённого модуля выполните построчное сравнение текста и выпишите изменённые фрагменты.
- 3Составьте реестр: объект, тип изменения, назначение доработки, способ переноса в расширение.
- 4Отметьте доработки, которые нельзя перенести в расширение, и подберите для них альтернативу.
Как создать расширение и заимствовать объекты
Создайте новое расширение: меню «Конфигурация» → «Расширения конфигурации» → «Создать». Задайте имя и обязательно укажите префикс — он будет добавляться к именам всех новых объектов расширения и предотвратит конфликты имён при обновлении типовой конфигурации. Префикс должен быть коротким и уникальным, например «Расш1_» или префикс вашей организации.
Заимствование объекта выполняется через контекстное меню объекта в дереве конфигурации: «Добавить в расширение» при активном окне расширения. Заимствуйте только те объекты, которые реально нужны: каждый заимствованный объект — это точка контроля при обновлении. Если нужно изменить только один метод модуля объекта, заимствуйте объект, но не трогайте остальные его свойства.
При заимствовании формы расширение сохраняет её копию, и при обновлении типовой формы ваши изменения могут конфликтовать с новыми элементами. Минимизируйте правки форм: добавляйте элементы программно в обработчике «ПриСозданииНаСервере» расширенной формы, где это возможно, вместо прямого изменения дерева элементов.
Как перенести изменения кода через аннотации
Основной инструмент переноса правок типовых модулей — аннотации перехвата методов. Платформа предоставляет три варианта: &Вместо (полная замена типового метода), &После и &Перед (выполнение кода до или после типового метода), &ИзменениеИКонтроль (точечная правка с сохранением контроля соответствия типовому методу).
Предпочтительный вариант — &ИзменениеИКонтроль. Вы копируете текст типового метода в расширение, вносите свои правки, помечая изменённые строки комментариями с указанием вставки и удаления. При обновлении конфигурации платформа сравнит новый типовой метод с зафиксированной копией и покажет расхождения — вы увидите, что типовой код изменился, и сможете актуализировать перехват. Это резко упрощает сопровождение по сравнению с &Вместо.
Аннотацию &Вместо используйте, только когда нужно полностью заменить логику метода, и понимайте риск: при обновлении типовой конфигурации изменения в оригинальном методе вы не увидите автоматически, и ваша замена может устареть. &После и &Перед подходят для добавления логики без изменения типового кода — это самый безопасный вариант перехвата.
&ИзменениеИКонтроль("ЗаполнитьДокументПоДаннымОснования")
Процедура Расш1_ЗаполнитьДокументПоДаннымОснования(Основание)
#Вставка
// Наша доработка: заполнение проекта из основания
Проект = Основание.Проект;
#КонецВставки
// Далее типовой код метода без изменений
КонецПроцедурыКак заменить прямые правки типового кода
Не всякая правка модуля переносится перехватом метода. Если доработка встроена в середину большого типового метода и перехват даст громоздкую конструкцию, рассмотрите альтернативы. Подписки на события (ПриЗаписи, ОбработкаПроведения, ПередЗаписью) позволяют добавить логику без изменения типового модуля вообще — создайте подписку в расширении и вынесите туда свой код.
Изменения в интерфейсе часто заменяются программным созданием элементов формы. Изменения в печатных формах переносятся через механизм дополнительных печатных форм (в конфигурациях на БСП) — тогда правка макета в типовой конфигурации вообще не нужна. Изменения в отчётах решаются созданием своего варианта отчёта или внешнего отчёта вместо правки типового.
Регламентные и фоновые операции, которые должны работать независимо от подключённых расширений, оформляйте через внешние обработки, запускаемые планировщиком, или через дополнительные обработки БСП. Помните: код расширения не выполняется в сеансах, где расширения отключены или не применены.
Как выбрать способ переноса
Как вернуть конфигурацию на поддержку и проверить результат
После переноса всех доработок в расширение основную конфигурацию нужно вернуть в типовое состояние. Загрузите конфигурацию из файла поставщика той же версии («Конфигурация» → «Загрузить конфигурацию из файла») либо выполните обновление на текущий релиз с полным восстановлением поддержки. Убедитесь, что сравнение с конфигурацией поставщика больше не показывает ваших изменений.
Подключите расширение и включите его в списке расширений конфигурации. Проверьте, что расширение применяется без ошибок: конфигуратор покажет ошибки контроля применимости, если заимствованный объект конфликтует с основной конфигурацией. Затем проведите функциональное тестирование: пройдите каждый сценарий из реестра доработок и сравните поведение с тем, что было до переноса.
Особое внимание уделите данным, созданным доработанными объектами: если в типовой конфигурации были добавлены реквизиты с данными, при возврате на поддержку эти реквизиты и данные будут удалены. Заранее перенесите реквизиты в расширение с теми же именами и типами и убедитесь, что данные сохранились после переподключения.
Как проверить результат
Различий нет, конфигурация на полной поддержке
Остались изменённые объекты — доработки перенесены не полностью
Расширение активно, ошибок применения нет
Расширение отключено или показывает ошибки контроля
Все сценарии из реестра работают как раньше
Часть логики не срабатывает — проверьте аннотации и подписки
Значения на месте и доступны в формах и отчётах
Данные пусты — реквизиты не совпали по именам или типам
Типичные ошибки при переносе и их последствия
Самая частая ошибка — перенос доработок без реестра изменений, «по памяти». В результате часть правок теряется, и обнаруживается это только при работе пользователей. Вторая типичная ошибка — злоупотребление аннотацией &Вместо: при каждом обновлении такие перехваты требуют ручной сверки с типовым кодом, и пропущенное изменение приводит к потере новых исправлений вендора.
Третья группа ошибок связана с заимствованием лишних объектов: чем больше объектов заимствовано, тем больше точек контроля при обновлении и тем выше вероятность конфликтов. Заимствуйте минимально необходимое. Наконец, не забывайте про безопасный режим и профили безопасности: расширение, добавляющее общие модули с вызовами сервера, должно корректно работать в условиях безопасного режима кластера.
Часто задаваемые вопросы
Можно ли перенести в расширение изменения типового регистра накопления?
Частично. В расширении можно добавить свои реквизиты к регистру и перехватить методы его модуля, но нельзя изменять состав измерений, ресурсов и реквизитов типового регистра. Если доработка требует нового измерения, придётся создать в расширении собственный регистр и дублировать движения через подписку на проведение.
Что произойдёт с расширением при обновлении типовой конфигурации?
Расширение продолжит работать, если заимствованные объекты не изменились критично. Методы, перехваченные через &ИзменениеИКонтроль, при расхождении с новым типовым кодом потребуют актуализации — конфигуратор покажет ошибки контроля. После каждого обновления открывайте расширение и проверяйте отсутствие ошибок применимости.
Нужно ли снимать конфигурацию с поддержки для работы расширения?
Нет, в этом и смысл механизма. Расширение подключается к конфигурации, находящейся на полной поддержке, и не требует изменения основной конфигурации. Именно поэтому перенос доработок в расширение позволяет вернуть конфигурацию на поддержку и обновляться автоматически.
Можно ли подключить несколько расширений к одной базе?
Да, платформа поддерживает несколько расширений одновременно. При пересечении функциональности порядок их применения определяется порядком в списке расширений. Практическая рекомендация — группировать доработки по смыслу: отдельное расширение для печатных форм, отдельное для интеграций, чтобы упростить сопровождение.
Как перенести расширение из тестовой базы в рабочую?
Используйте выгрузку расширения в файл: в списке расширений конфигурации выберите расширение и сохраните его в файл с расширением cfe. В рабочей базе откройте список расширений и загрузите файл. Перед загрузкой убедитесь, что версия конфигурации рабочей базы совпадает с той, на которой расширение разрабатывалось.
Что делать, если доработка не переносится в расширение никаким способом?
Оставьте её в конфигурации, но изолируйте: вынесите вызов в отдельный метод с понятным именем, задокументируйте изменение и добавьте его в реестр доработок. Тогда при обновлении правка переносится за несколько минут. Параллельно отслеживайте развитие платформы — состав поддерживаемых расширениями возможностей регулярно расширяется.
Что важно запомнить
Перенос доработок в расширение начинается с полной инвентаризации изменений и заканчивается возвратом конфигурации на поддержку. Основные инструменты — заимствование объектов, аннотации &ИзменениеИКонтроль и подписки на события. Работайте на копии, переносите реквизиты с данными до возврата на поддержку и тестируйте каждый сценарий из реестра доработок.