При переносе данных между конфигурациями, построенными на базе Библиотеки стандартных подсистем (БСП), такими как 1С:Комплексная автоматизация 2 или 1С:Управление торговлей 11, программисты часто сталкиваются с блокировкой записи объектов. Особенно остро эта проблема проявляется при попытке конвертации справочника Пользователи. Система выбрасывает исключение: «Действие недоступно в безопасном режиме». Давайте подробно разберем, почему это происходит и как правильно настроить систему для успешной загрузки данных.
Прежде всего, проанализируем ситуацию. Ошибка возникает в момент вызова метода Записать(). В современных конфигурациях объект Пользователь не является простым набором реквизитов в базе данных. При его записи срабатывают многочисленные подписки на события, определенные в БСП. Эти подписки выполняют проверку прав, синхронизацию с системным списком пользователей информационной базы (создание логина, пароля) и назначение ролей.
Механизм БСП включает в себя встроенную защиту. Если код выполняется в так называемом безопасном режиме, платформа накладывает жесткие ограничения на операции, которые могут повлиять на безопасность системы. К таким операциям относится и изменение параметров пользователей. Посмотрим на типовой фрагмент кода в общем модуле СтандартныеПодсистемыСервер, который вызывает прерывание процесса:
Если БезопасныйРежим = Ложь Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Если Не ПривилегированныйРежим Тогда
ВызватьИсключение НСтр("ru = 'Действие недоступно в безопасном режиме.'");
КонецЕсли;
Здесь мы видим, что система проверяет, удалось ли установить привилегированный режим. Если код запущен в безопасном режиме, установка привилегированного режима игнорируется, и срабатывает исключение. Рассмотрим основные способы решения этой проблемы.
Первым делом проверим настройки самой обработки загрузки на стороне приемника (в нашем случае — 1С:УТ). В форме обработки УниверсальныйОбменДаннымиXML перейдем на вкладку настроек параметров загрузки — для этого подойдёт универсальный перенос данных между базами через XML. Там присутствует критически важный флажок «Загружать в безопасном режиме».
Разберем, на что он влияет:
Важное замечание: Простого снятия флажка может быть недостаточно, если сама внешняя обработка запущена в контексте, который сервер считает «недоверенным».
Начиная с версии платформы 8.3.9, появился механизм «Защита от опасных действий». Даже если вы являетесь администратором, при запуске внешних обработок платформа может ограничивать их функционал. Выясним, как это отключить для пользователя, под которым выполняется обмен:
После этого перезапустим сеанс 1С:Предприятие и повторим попытку загрузки. В большинстве случаев это решает проблему блокировки привилегированного режима.
Если вышеописанные действия не помогли, проанализируем настройки кластера серверов 1С. Если информационная база работает с использованием профилей безопасности, то любые внешние ресурсы и код будут ограничены настройками этого профиля в консоли администрирования.
В этом случае у нас есть два пути, при которых может потребоваться точечный пересчет прав доступа:
Если перенос справочника Пользователи не является вашей основной целью, а он переносится «прицепом» к документам CRM, проанализируем целесообразность его записи. В 1С:КД 2.1 (удобнее через настройка обмена и синхронизации данных по КД) для ПКО (Правило Конвертации Объектов) Пользователи можно изменить логику работы.
Рассмотрим вариант, при котором мы будем только искать пользователя, но не пытаться его создать или перезаписать. В обработчике «Перед загрузкой» для объекта можно прописать:
Если Объект.ЭтоНовый() Тогда
// Если пользователь не найден в базе-приемнике,
// отменяем запись, чтобы не провоцировать ошибку безопасного режима
Отказ = Истина;
КонецЕсли;
Также проверьте, чтобы в ПКО не стояла галочка «Продолжить поиск по полям поиска, если по внутреннему идентификатору объект не найден», если вы не уверены в уникальности наименований. Рекомендуется сопоставить пользователей вручную или через вспомогательную обработку перед основным обменом, а в правилах оставить только поиск по уникальному идентификатору (GUID).
Проанализируем еще один нюанс работы БСП. В конфигурации 1С:УТ 11 обработка УниверсальныйОбменДаннымиXML часто уже встроена в состав метаданных (или доступна через функции для технического специалиста). Встроенные обработки обладают более высоким уровнем доверия со стороны системы, чем запущенные с диска файлы .epf.
Попробуйте выполнить следующие действия:
Ошибка «Действие недоступно в безопасном режиме» — это защитная реакция платформы 1С на попытку внешнего кода изменить системные настройки. Чтобы победить её при использовании Конвертации данных 2.1, нужно действовать комплексно: отключить флаг безопасного режима в обработке, снять защиту от опасных действий в конфигураторе и, при необходимости, временно ослабить политики безопасности на сервере 1С. Помните, что справочник Пользователи требует особого внимания из-за тесной интеграции с механизмом авторизации платформы.