Перевод доработанной конфигурации 1С на расширения — это отличный способ вернуть базу на «замки» (типовую поддержку), сохранив при этом весь необходимый функционал. Однако самая большая сложность здесь заключается в переносе данных. Если мы просто удалим реквизит из основной конфигурации и добавим его в расширение, платформа воспримет это как уничтожение старого объекта и создание нового, что приведет к безвозвратной потере накопленной информации. В этой статье мы подробно разберем, как выполнить этот процесс безопасно и профессионально.
Представим ситуацию: в типовой конфигурации «Управление торговлей 11.4» были добавлены собственные реквизиты в справочник Номенклатура и документ РеализацияТоваровУслуг. Наша задача — перенести эти данные в расширение, чтобы основная конфигурация полностью соответствовала релизу поставщика. Основной риск заключается в механизме реструктуризации базы данных. В СУБД (MS SQL Server или PostgreSQL) данные основной конфигурации и данные расширения хранятся в разных физических колонках, а иногда и в разных таблицах. Простое «перемещение» объекта в дереве метаданных невозможно.
Этот метод считается наиболее надежным и рекомендуемым в сообществе 1С-разработчиков. Разберем его по шагам:
СрокГарантии, в расширении создадим его как СрокГарантии_Временный.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.СрокГарантии КАК СтароеЗначение
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.СрокГарантии <> 0"; // Условие зависит от типа данных
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.Ссылка.ПолучитьОбъект();
// Записываем данные в реквизит расширения
Объект.СрокГарантии_Временный = Выборка.СтароеЗначение;
Объект.ОбменДанными.Загрузка = Истина; // Чтобы не срабатывали проверки
Объект.Записать();
КонецЦикла;
СрокГарантии_Временный, мы можем смело удалять реквизиты из основной конфигурации и приводить её к типовому виду.СрокГарантии_Временный в оригинальное название СрокГарантии. Платформа при переименовании внутри расширения данные сохранит.Если вы хотите максимально «облегчить» конфигурацию и избежать проблем с будущими обновлениями, проанализируем ситуацию: действительно ли нам нужны реквизиты в самом объекте? Современные конфигурации на базе БСП (Библиотеки стандартных подсистем) предлагают механизм Дополнительных реквизитов и сведений.
Рассмотрим преимущества этого подхода:
ДополнительныеРеквизиты.Процесс переноса в этом случае потребует создания программного кода, который создаст записи в табличных частях объектов, основываясь на значениях ваших удаляемых реквизитов. Это более сложный путь с точки зрения написания запросов и отчетов (потребуются соединения с таблицами характеристик), но он самый «чистый» с точки зрения поддержки.
Важно помнить, что работа с данными в расширениях полноценно появилась только в последних версиях платформы. Для корректной работы расширение должно иметь свойство ИзменяетСтруктуруДанных установленным в значение Истина.
Проанализируем критические моменты, упомянутые опытными разработчиками:
Этот метод подходит для очень больших баз, где прямая перезапись объектов может занять слишком много времени и вызвать раздувание лога транзакций. Разберем алгоритм:
УникальныйИдентификатор ссылки и Значение реквизита.Пример структуры выгрузки:
// Пример структуры в JSON
[
{"Ref": "550e8400-e29b-41d4-a716-446655440000", "Value": "24 месяца"},
{"Ref": "670e8400-e29b-11d4-a716-446655440001", "Value": "12 месяцев"}
]
Выясним, как минимизировать риски перед началом работ. Обязательно сделайте полную резервную копию базы данных. Лучше всего проводить подобные операции на копии базы, замеряя время выполнения обработок.
Также стоит рассмотреть вопрос перехвата функций. Если ваши добавленные реквизиты участвовали в сложной логике (например, в общих модулях), используйте аннотацию &Вместо или &После в расширении для корректировки типового поведения. Помните, что если вы исправляете баг платформы или типового решения (как упоминалось в обсуждении), использование расширения позволит вам легко «откатить» правку, когда 1С выпустит официальный патч.
Подводя итог, можно сказать, что наиболее сбалансированным решением является Метод №1 с временными именами. Он позволяет контролировать перенос данных внутри самой платформы 1С, сохраняя целостность ссылок и типов данных без привлечения внешних инструментов.