Как устранить ошибку: Установка расширений, модифицирующих структуры данных, в фоновом задании запрещена

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

В современных конфигурациях «1С:Предприятие», таких как Управление торговлей 11.5, ERP 2.5 или Комплексная автоматизация, специалисты часто сталкиваются с системным сообщением: «Установка расширений, модифицирующих структуры данных, в фоновом задании запрещена». Эта ситуация особенно характерна для распределенных информационных баз (РИБ), когда изменения из главного узла приходят в подчиненный.

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

Выясним причину возникновения ошибки

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

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

Способ 1. Интерактивное получение данных через План обмена

Рассмотрим наиболее простое и эффективное решение, предложенное участниками профессионального сообщества. Если автоматический обмен через Библиотеку стандартных подсистем (БСП) выдает ошибку, нам необходимо перевести процесс в интерактивное русло.

Выполним следующие шаги:

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

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

Способ 2. Использование механизмов БСП для отложенного обновления

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

При входе пользователя с правами Администратор система проанализирует наличие обновлений и предложит завершить установку расширений. Важно убедиться, что в настройках синхронизации не стоит принудительное завершение при ошибках метаданных. Мы рекомендуем проверять состояние расширений в справочнике «Управление расширениями», где можно вручную активировать пришедшие изменения.

Способ 3. Программная проверка возможности установки

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

Рассмотрим пример кода для анализа свойств расширения:


// Получаем расширение из файла или потока
РасширениеОбъект = РасширенияКонфигурации.Создать();
// ... загрузка данных в объект ...

// Проверяем, не нарушаем ли мы правила платформы
Если РасширениеОбъект.ИзменяетСтруктуруДанных И ЭтоФоновоеЗадание() Тогда
    ЗаписатьВЖурналРегистрации("Обновление.Ошибка", 
        УровеньЖурналаРегистрации.Ошибка, , ,
        "Невозможно установить расширение '" + РасширениеОбъект.Имя + "' в фоновом задании, так как оно меняет структуру данных.");
    Возврат;
КонецЕсли;

РасширениеОбъект.Записать();

Метод ЭтоФоновоеЗадание() позволяет определить контекст исполнения, а свойство ИзменяетСтруктуруДанных подскажет, содержит ли расширение новые реквизиты или объекты.

Способ 4. Автоматизация через параметры командной строки

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

Для обновления конфигурации и применения расширений можно использовать параметры запуска:

Рекомендации по проектированию расширений

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

  1. Логические расширения: содержат только программный код (модули), формы и макеты. Такие расширения обычно обновляются в фоновом режиме без особых проблем.
  2. Структурные расширения: содержат новые объекты метаданных или дополнительные реквизиты.

Проанализируем ситуацию: если мы вынесем данные в отдельный пакет, то будем точно знать, что его обновление требует монопольного доступа или интерактивного запуска. Это позволит основной части системы (логике) обновляться максимально быстро и незаметно для пользователей, в то время как «тяжелые» изменения структуры будут применяться строго по регламенту в часы обслуживания базы.

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

← На главную