Как правильно перенести объекты из основной конфигурации 1С в расширение и сохранить данные

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

Перенос доработок из основной конфигурации в расширения — это актуальная задача для многих разработчиков, стремящихся вернуть информационную базу к максимально «типовому» виду. Особенно часто это требуется при обновлении старых модулей (например, модулей интеграции с Битрикс), которые раньше поставлялись как изменения в основной конфигурации, а теперь перешли на модель расширений. Рассмотрим подробно, как выполнить этот процесс, сохранив данные и минимизировав риски.

Методы переноса метаданных в расширение

На текущий момент в платформе 1С (включая последние версии ветки 8.3.24 и 8.3.25) отсутствует прямая кнопка «Перенести объект в расширение» с автоматической сменой принадлежности. Разберем основные способы реализации этой задачи.

1. Ручной перенос (Copy-Paste)

Это самый надежный, хотя и трудоемкий метод. Мы создаем объект в расширении вручную, копируя все его свойства, реквизиты, формы и модули. Проанализируем основные шаги:

  1. Создаем новое расширение или используем существующее.
  2. Добавляем новый объект (например, Справочник или Документ) с префиксом, чтобы избежать конфликта имен с объектом в основной конфигурации.
  3. Поэтапно переносим структуру: реквизиты, табличные части, предопределенные данные.
  4. Копируем программный код модулей. Важно учитывать, что контекст выполнения в расширении может отличаться, поэтому потребуется аудит кода.

2. Выгрузка и загрузка через XML-файлы

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

  1. Выполняем команду «Конфигурация — Выгрузить конфигурацию в файлы».
  2. Находим XML-файлы нужных нам объектов.
  3. В XML-файле объекта необходимо скорректировать пространство имен (namespace), чтобы система определила объект как часть расширения при последующей загрузке.
  4. Загружаем модифицированные файлы в проект расширения (лучше всего использовать для этого 1C:Enterprise Development Tools (EDT)).

3. Использование EDT (Enterprise Development Tools)

Проанализируем возможности современной среды разработки EDT. В отличие от стандартного конфигуратора, EDT позволяет работать с конфигурацией и расширением в рамках одного рабочего пространства. Мы можем буквально перетаскивать (Drag-and-drop) объекты между проектами. Система автоматически предложит варианты обработки зависимостей, что значительно ускоряет процесс.

Проблема миграции данных

Самый критичный момент — это сохранение данных. При простом создании объекта в расширении платформа создает новые таблицы в СУБД. Данные из старых таблиц (основной конфигурации) сами туда не попадут. Выясним, как организовать безопасный переезд данных.

Рассмотрим стратегию «мягкого переключения»:

  1. Оставляем старые объекты в основной конфигурации, но помечаем их как устаревшие (например, добавляем префикс Удалить_).
  2. Создаем новые объекты в расширении.
  3. Пишем обработку для переноса данных. Рассмотрим пример кода для переноса значений реквизита из старого справочника в новый объект расширения:

// Пример переноса данных из основного объекта в объект расширения
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   Номенклатура.Ссылка КАК Ссылка,
    |   Номенклатура.СтароеПолеБитрикс КАК Значение
    |ИЗ
    |   Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |   Номенклатура.СтароеПолеБитрикс <> """"";

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
    Объект = Выборка.Ссылка.ПолучитьОбъект();
    // ПР_ПолеБитрикс - реквизит, добавленный через расширение
    Объект.ПР_ПолеБитрикс = Выборка.Значение;
    Объект.ОбменДанными.Загрузка = Истина;
    Попытка
        Объект.Записать();
    Исключение
        ЗаписьЖурналаРегистрации("ПереносДанных", УровеньЖурналаРегистрации.Ошибка, , , ИнформацияОбОшибке().Описание);
    КонецПопытки;
КонецЦикла;

Важный нюанс: Если вы создаете новые объекты в расширении вместо использования заимствованных, помните о GUID (уникальных идентификаторах). Если данные из этих объектов участвуют в обменах с внешними системами (например, с сайтом на Битриксе), то при изменении GUID ссылки в другой системе «сломаются». В таких случаях необходимо программно устанавливать тот же GUID при создании объекта в расширении.

Архитектурный выбор: расширение или основная конфигурация?

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

Проанализируем риски хранения данных в расширениях. Основная опасность заключается в том, что при критической ошибке (например, при неудачном обновлении платформы или конфликте метаданных) расширение может «отключиться». Если расширение с данными будет удалено из списка, платформа 1С инициирует удаление соответствующих таблиц в SQL, что приведет к безвозвратной потере информации. В основной конфигурации такие риски значительно ниже.

Рекомендации по безопасности

Для минимизации последствий при работе с расширениями придерживайтесь следующих правил:

  1. Бэкапы: Всегда делайте выгрузку .dt и SQL-бэкап перед любыми манипуляциями с составом расширений.
  2. Тестирование обновлений: Перед обновлением платформы или основной конфигурации на рабочей базе обязательно проверяйте применимость расширения на копии.
  3. Использование регистров сведений: Вместо добавления реквизитов непосредственно в объекты (например, в ДокументОбъект) в расширении, часто безопаснее использовать РегистрСведений. Это изолирует данные и упрощает их восстановление в случае проблем с основным объектом.
  4. Prefixing: Всегда используйте уникальные префиксы для объектов расширений. Это исключит конфликты имен при выходе новых релизов типовых конфигураций.

Подводя итог, перенос объектов Битрикса или других модулей в расширение — задача выполнимая, но требующая вдумчивого подхода к миграции данных и аудита кода. Если данные не являются критически важными или легко восстановимы — смело используйте расширения. Для учетных данных высокого уровня ценности лучше оставить поля в основной конфигурации, даже если она станет «не совсем типовой».

← На главную