Что происходит с данными реквизитов расширения при его отключении в 1С и насколько это безопасно?

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

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

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

Физическая структура хранения данных расширений в СУБД (под капотом)

Для того чтобы оценить безопасность добавления реквизитов, проанализируем, как платформа «1С» взаимодействует с СУБД (будь то Microsoft SQL Server, PostgreSQL, IBM DB2 или Oracle). Когда мы добавляем новый реквизит к существующему объекту (например, справочнику Контрагенты) через расширение, платформа не просто добавляет новую колонку в существующую таблицу СУБД. Происходит сложный процесс реструктуризации:

  1. Создание расширенной таблицы: Платформа создает в базе данных абсолютно новую, дублирующую таблицу с суффиксом «X». Например, если основная таблица справочника имела имя _Reference45, то для расширения создается таблица _Reference45X.
  2. Перенос данных: В эту новую расширенную таблицу переносятся все данные из исходной таблицы, а также добавляется новая колонка под ваш добавленный реквизит.
  3. Перенаправление запросов: Все последующие обращения платформы «1С» к этому справочнику (как через объектную технику, так и через язык запросов) переадресовываются к новой расширенной таблице _Reference45X. Основная (старая) таблица при этом остается незадействованной и замораживается.

Выясним, что происходит, когда расширение временно отключается (например, снят флаг «Активно» в списке расширений). В этот момент платформа «1С» просто перенаправляет запросы обратно к исходной таблице без суффикса «X». Сама расширенная таблица с суффиксом «X» при этом не удаляется из базы данных. Данные вашего реквизита продолжают физически находиться в СУБД, просто платформа их временно «не видит» и не использует.

Отключение vs Удаление расширения: в чем разница для данных?

Рассмотрим подробнее два сценария поведения системы, которые принципиально отличаются с точки зрения сохранности информации.

Сценарий 1: Расширение временно отключено (снят флаг «Активно»)

В этом случае потери данных не происходит. Все накопленные в реквизитах расширения данные остаются в таблице СУБД с суффиксом «X». Однако здесь кроется серьезная логическая ловушка для бизнес-пользователей. Пока работа расширения не возобновлена, никто не сможет записывать данные в расширенный объект метаданных.

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

Сценарий 2: Расширение полностью удалено из системы

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

Встроенные механизмы защиты платформы «1С:Предприятие»

Разработчики платформы предусмотрели защиту от случайного удаления данных. Посмотрим на основные защитные механизмы:

Проанализируем пример кода, который позволяет безопасно обойти список расширений и определить, какие из них содержат собственные данные в СУБД:


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

Скрытые риски и проблемы применения (о чем нужно знать заранее)

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

1. Прямые SQL-запросы и внешняя интеграция

Если в вашей компании настроена интеграция со сторонними сервисами (например, BI-системы, склады WMS, внешние сайты) через прямые запросы к СУБД, добавление реквизита через расширение гарантированно нарушит их работу. Внешние системы продолжат обращаться к стандартной таблице (например, _Reference45), которая перестанет обновляться, так как 1С начнет писать все новые данные в _Reference45X. Данные в интеграционных отчетах станут неактуальными.

2. Баги при «Тестировании и исправлении» (ТиИ)

На некоторых релизах платформы 1С:Предприятие (особенно ранних версиях ветки 8.3) наблюдались критические ошибки при выполнении стандартной процедуры «Тестирования и исправления». Если у справочника-владельца был добавлен реквизит через расширение, система при проверке логической целостности могла ошибочно посчитать ссылки на владельца у подчиненных справочников неверными и массово их очистить. Перед запуском ТиИ на базах с расширениями данных всегда делайте резервную копию и внимательно изучайте баг-трекер текущего релиза платформы.

3. Проблемы с распределенными информационными базами (РИБ)

Использование расширений с собственными реквизитами в распределенных базах накладывает жесткие требования к синхронизации. Версии расширений на главном и подчиненных узлах должны быть строго идентичны. Любое расхождение в структурах данных заблокирует обмен или приведет к непредсказуемым коллизиям в таблицах СУБД на узлах.

4. Ограничения типов данных

Реквизиты, добавляемые через расширение, имеют ряд ограничений. В них нельзя использовать типы данных, которые не могут входить в состав составных типов (например, ХранилищеЗначения или УникальныйИдентификатор).

Резюме: насколько это безопасный маневр?

Добавление реквизитов через расширения — это достаточно безопасный маневр при соблюдении базовой технической гигиены:

  1. Ни в коем случае не удаляйте расширения без предварительного анализа структуры данных и создания резервной копии СУБД.
  2. Помните, что простое отключение активности расширения сохраняет данные в БД, но блокирует запись в расширенные объекты метаданных до момента его повторной активации.
  3. При наличии прямых SQL-интеграций откажитесь от расширения данных в пользу доработки основной конфигурации.
← На главную