Как устранить ошибку «Действие недоступно в безопасном режиме» при обмене данными через 1С:КД 2.1?

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

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

Анализ причины возникновения ошибки

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

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


Если БезопасныйРежим = Ложь Тогда
    Возврат;
КонецЕсли;

УстановитьПривилегированныйРежим(Истина);

Если Не ПривилегированныйРежим Тогда
    ВызватьИсключение НСтр("ru = 'Действие недоступно в безопасном режиме.'");
КонецЕсли;

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

Решение 1: Настройка обработки «Универсальный обмен данными XML»

Первым делом проверим настройки самой обработки загрузки на стороне приемника (в нашем случае — 1С:УТ). В форме обработки УниверсальныйОбменДаннымиXML перейдем на вкладку настроек параметров загрузки — для этого подойдёт универсальный перенос данных между базами через XML. Там присутствует критически важный флажок «Загружать в безопасном режиме».

Разберем, на что он влияет:

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

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

Решение 2: Отключение защиты от опасных действий в Конфигураторе

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

  1. Откроем базу в режиме Конфигуратор.
  2. Перейдем в меню «Администрирование» — «Пользователи».
  3. Найдем пользователя, выполняющего загрузку, и откроем его карточку, предварительно изучив список профилей с отбором по роли.
  4. На вкладке «Основные» найдем флажок «Защита от опасных действий» и снимем его.

После этого перезапустим сеанс 1С:Предприятие и повторим попытку загрузки. В большинстве случаев это решает проблему блокировки привилегированного режима.

Решение 3: Настройка профилей безопасности на сервере

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

В этом случае у нас есть два пути, при которых может потребоваться точечный пересчет прав доступа:

  1. Временное отключение профиля: В консоли администрирования кластера серверов в свойствах информационной базы очистим поле «Профиль безопасности». Это позволит выполнить разовый перенос данных без ограничений.
  2. Настройка разрешений: Добавить конкретную обработку или скрипт в список разрешенных в настройках профиля, предоставив ей право на работу в небезопасном режиме.

Решение 4: Модификация правил конвертации (КД 2.1)

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

Рассмотрим вариант, при котором мы будем только искать пользователя, но не пытаться его создать или перезаписать. В обработчике «Перед загрузкой» для объекта можно прописать:


Если Объект.ЭтоНовый() Тогда
    // Если пользователь не найден в базе-приемнике, 
    // отменяем запись, чтобы не провоцировать ошибку безопасного режима
    Отказ = Истина;
КонецЕсли;

Также проверьте, чтобы в ПКО не стояла галочка «Продолжить поиск по полям поиска, если по внутреннему идентификатору объект не найден», если вы не уверены в уникальности наименований. Рекомендуется сопоставить пользователей вручную или через вспомогательную обработку перед основным обменом, а в правилах оставить только поиск по уникальному идентификатору (GUID).

Решение 5: Использование встроенной обработки вместо внешней

Проанализируем еще один нюанс работы БСП. В конфигурации 1С:УТ 11 обработка УниверсальныйОбменДаннымиXML часто уже встроена в состав метаданных (или доступна через функции для технического специалиста). Встроенные обработки обладают более высоким уровнем доверия со стороны системы, чем запущенные с диска файлы .epf.

Попробуйте выполнить следующие действия:

  1. Зайдите в раздел «НСИ и администрирование» — «Обслуживание».
  2. Найдите пункт «Регистрация изменений для обмена» (поможет инструмент управления регистрацией и устранения ошибок обмена) или воспользуйтесь поиском по функциям (Shift+Alt+P), введя «Универсальный обмен».
  3. Запустите загрузку через штатный интерфейс системы.

Резюме

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

← На главную