Перенос ранее сделанных изменений из основной конфигурации в расширение — это одна из самых актуальных задач для разработчиков 1С, стремящихся вернуть типовую конфигурацию «на замок». Это позволяет существенно упростить процесс обновления системы, минимизировать ошибки при слиянии кода и сделать поддержку базы более прозрачной. В этой статье мы подробно разберем, какие объекты можно переносить, как избежать потери данных в реквизитах и какие современные инструменты платформы 1С:Предприятие 8.3 помогут нам в этом процессе.
Прежде чем приступать к работе, мы должны четко понимать: доработка доработке рознь. Не все объекты одинаково легко переносятся в расширение. Рассмотрим основные категории объектов:
Проанализируем ситуацию с обновлением кода. Раньше разработчики часто жаловались на «адовые» обновления из-за необходимости вручную сравнивать модули. Однако с появлением современных версий платформы (8.3.15 и выше) ситуация изменилась. Разберем ключевой механизм — аннотацию &ИзменениеИКонтроль.
Вместо того чтобы полностью заменять процедуру через &Вместо, что чревато потерей типовых исправлений при обновлении, мы используем точечные вставки. Рассмотрим пример структуры кода в расширении:
&ИзменениеИКонтроль("СформироватьПечатнуюФорму")
Процедура Расш1_СформироватьПечатнуюФорму(Параметры)
// Типовой код остается здесь под контролем платформы
#Вставка
// Наша доработка
Параметры.Вставить("ДополнительноеПоле", Истина);
#КонецВставки
#Удаление
// Код, который мы хотим исключить
СтараяЛогика();
#КонецУдаления
КонецПроцедуры
Этот механизм позволяет платформе автоматически проверять, изменился ли текст типовой процедуры внутри конфигурации. Если 1С выпустит обновление, где код внутри процедуры СформироватьПечатнуюФорму значительно изменится, расширение выдаст ошибку при применении, предотвращая некорректную работу системы. Это гораздо безопаснее, чем слепое использование &Вместо.
Выясним причину опасений многих разработчиков при работе с реквизитами. Главная проблема заключается в том, что при удалении расширения из базы данных все таблицы, созданные этим расширением в SQL, физически удаляются вместе с данными. Чтобы безопасно перенести реквизит из основной конфигурации в расширение, мы рекомендуем придерживаться следующего алгоритма:
Расш1_СрокПоставки.Важный момент: Если вы создаете новые объекты (справочники, документы) целиком в расширении, всегда помните о регламентах резервного копирования. Данные расширений хранятся в тех же таблицах, что и основные данные, но их жизненный цикл напрямую зависит от наличия расширения в списке установленных.
Разберем, как эффективно переносить изменения в формах. Современные версии платформы позволяют копировать элементы форм «пачками». Если вы ранее дорабатывали типовую форму, процедура переноса выглядит так:
ПриИзменении) переносим в модуль расширения, используя аннотации &НаКлиенте или &НаСервере.При работе с формами старайтесь не изменять стандартные элементы напрямую, а добавлять свои или программно управлять свойствами типовых через код в процедуре ПриСозданииНаСервере. Это сделает ваше расширение более устойчивым к изменениям структуры типовой формы в будущих релизах.
Посмотрим на ситуацию шире. В последних версиях платформы (8.3.25 и выше) возможности расширений стали практически безграничными. Теперь мы можем переносить туда:
Существуют также внешние инструменты и скрипты, которые помогают проанализировать разницу между «чистой» типовой конфигурацией и вашей доработанной базой. Эти инструменты позволяют частично автоматизировать создание структуры расширения, подготавливая «скелет» для переноса кода.
Проанализируем лучшие практики, которые помогут вам избежать проблем в будущем:
Айти_ или Dev_). Это гарантирует, что при выходе нового релиза 1С не возникнет конфликта имен, если вендор решит добавить реквизит с таким же названием.&Вместо: Используйте эту аннотацию только тогда, когда вам действительно нужно полностью подавить типовую логику. Во всех остальных случаях отдавайте предпочтение &Перед, &После или &ИзменениеИКонтроль.Таким образом, отвечая на вопрос автора темы: перенести доработки можно и нужно. Современная платформа предоставляет для этого все необходимые инструменты. Главное — подходить к процессу системно, особенно в части работы с данными, и использовать возможности аннотации &ИзменениеИКонтроль для обеспечения стабильности системы при последующих обновлениях.