Возможно ли перенести доработки из конфигурации в расширение и как это сделать правильно?

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

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

Анализируем возможность переноса: что можно и что нельзя

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

  1. Программный код в модулях: Это самая простая часть для переноса. С помощью механизмов перехвата (аннотаций) мы можем вынести практически любую логику.
  2. Формы объектов: Формы переносятся достаточно легко. Мы можем заимствовать форму в расширение и изменять ее визуальный состав, добавлять обработчики событий или новые элементы.
  3. Роли и подсистемы: Эти объекты считаются наиболее «безопасными» для расширений. Их перенос не связан с риском потери данных и значительно упрощает управление правами доступа.
  4. Реквизиты и новые объекты метаданных: Это самая сложная зона. Если мы переносим существующий реквизит из основной конфигурации в расширение, мы сталкиваемся с риском безвозвратной потери данных в SQL-таблицах.

Методика работы с программным кодом и аннотациями

Проанализируем ситуацию с обновлением кода. Раньше разработчики часто жаловались на «адовые» обновления из-за необходимости вручную сравнивать модули. Однако с появлением современных версий платформы (8.3.15 и выше) ситуация изменилась. Разберем ключевой механизм — аннотацию &ИзменениеИКонтроль.

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


&ИзменениеИКонтроль("СформироватьПечатнуюФорму")
Процедура Расш1_СформироватьПечатнуюФорму(Параметры)
    // Типовой код остается здесь под контролем платформы
    #Вставка
    // Наша доработка
    Параметры.Вставить("ДополнительноеПоле", Истина);
    #КонецВставки
    
    #Удаление
    // Код, который мы хотим исключить
    СтараяЛогика();
    #КонецУдаления
КонецПроцедуры

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

Перенос реквизитов: как не потерять данные

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

  1. Создаем аналогичный реквизит в расширении. Обязательно используем уникальный префикс, например Расш1_СрокПоставки.
  2. Пишем разовую обработку для переноса данных. Нам нужно прочитать значения из старого реквизита конфигурации и записать их в новый реквизит расширения.
  3. Проверяем работу всех отчетов и форм, перенаправляя их на использование нового реквизита.
  4. Только после подтверждения целостности данных и успешного тестирования мы можем пометить реквизит в основной конфигурации на удаление.

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

Работа с формами и пользовательским интерфейсом

Разберем, как эффективно переносить изменения в формах. Современные версии платформы позволяют копировать элементы форм «пачками». Если вы ранее дорабатывали типовую форму, процедура переноса выглядит так:

  1. Заимствуем типовую форму в расширение.
  2. Переносим добавленные элементы интерфейса.
  3. События элементов (например, ПриИзменении) переносим в модуль расширения, используя аннотации &НаКлиенте или &НаСервере.

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

Автоматизация и новые возможности платформы 8.3.25+

Посмотрим на ситуацию шире. В последних версиях платформы (8.3.25 и выше) возможности расширений стали практически безграничными. Теперь мы можем переносить туда:

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

Золотые правила «чистого» расширения

Проанализируем лучшие практики, которые помогут вам избежать проблем в будущем:

Таким образом, отвечая на вопрос автора темы: перенести доработки можно и нужно. Современная платформа предоставляет для этого все необходимые инструменты. Главное — подходить к процессу системно, особенно в части работы с данными, и использовать возможности аннотации &ИзменениеИКонтроль для обеспечения стабильности системы при последующих обновлениях.

← На главную