При разработке и внедрении внешних печатных форм или обработок в современные конфигурации 1С (на базе БСП, такие как БП 3.0, УТ 11, ЗУП 3.1) программисты часто сталкиваются с системным сообщением: «Установлен безопасный режим. Выполнение операции запрещено». Эта ошибка возникает из-за механизмов защиты платформы 1С:Предприятие 8.3, которые ограничивают выполнение потенциально опасных действий в коде, запускаемом из внешних файлов. Проанализируем причины возникновения этой ситуации и разберем подробные инструкции по её решению.
Безопасный режим — это специальное состояние сеанса или программного кода, при котором платформа блокирует доступ к определенным функциям. Разберем подробнее, что именно запрещено:
Выполнить() и Вычислить().В современных конфигурациях 1С внешние обработки по умолчанию подключаются в безопасном режиме. Это сделано для того, чтобы исключить выполнение вредоносного кода, который может быть получен из непроверенных источников.
Рассмотрим самый правильный и «цивилизованный» способ решения проблемы, который позволяет сохранить безопасность системы, но разрешить конкретные операции. В конфигурациях, использующих Библиотеку Стандартных Подсистем (БСП), механизм разрешений реализуется в модуле объекта внешней обработки, в функции СведенияОВнешнейОбработке.
Проанализируем ситуацию на примере вывода штрихкода в печатную форму. Если ваша обработка использует компоненту 1CBarCode, платформа заблокирует её запуск. Чтобы этого не произошло, нам нужно явно запросить разрешение у системы.
Добавим в функцию СведенияОВнешнейОбработке следующий код:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
// ... стандартные параметры заполнения (Наименование, Вид и т.д.) ...
// 1. Создаем массив для хранения разрешений
ПараметрыРегистрации.Вставить("Разрешения", Новый Массив);
// 2. Добавляем разрешение на использование внешней компоненты печати штрихкодов
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты(
"ОбщийМакет.КомпонентаПечатиШтрихкодов",
"Вывод в печатную форму штрихкода"
);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Возврат ПараметрыРегистрации;
КонецФункции
После изменения кода обработку необходимо переподключить в справочнике «Дополнительные отчеты и обработки». При сохранении 1С выдаст запрос администратору: «Для работы данной обработки требуются дополнительные разрешения. Разрешить?». После подтверждения ошибка исчезнет.
Выясним причину ошибки при работе с объектами XBase. Если ваша обработка выгружает данные в файл DBF, она обращается к файловой системе, что запрещено в безопасном режиме. Чтобы это исправить, нужно запросить разрешение на доступ к временным файлам или конкретному каталогу.
Пример кода для добавления в СведенияОВнешнейОбработке:
// Разрешение на использование каталога временных файлов
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Это позволит платформе временно снять ограничение на запись файлов в системную папку Temp, что достаточно для формирования файлов выгрузки.
Рассмотрим вариант, когда вы полностью доверяете коду обработки и не хотите прописывать каждое разрешение по отдельности. Это менее безопасно, но допустимо для внутренних разработок организации.
В функции СведенияОВнешнейОбработке можно просто установить флаг безопасности в Ложь:
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
Важно: Если база работает в сервисе «1С:Фреш», такая обработка не пройдет аудит. Для «Фреша» использование БезопасныйРежим = Ложь категорически запрещено, и вам придется использовать только Решение 1.
Посмотрим на ситуацию, когда вам нужно временно отключить безопасный режим внутри уже исполняемого кода (если это позволяют права пользователя и настройки системы). Для этого используются специальные методы платформы.
Проанализируем пример использования метода УстановитьОтключениеБезопасногоРежима:
Если БезопасныйРежим() Тогда
// Пытаемся отключить ограничения, если есть права
УстановитьОтключениеБезопасногоРежима(Истина);
КонецЕсли;
// Выполнение "опасной" операции
// ...
УстановитьОтключениеБезопасногоРежима(Ложь); // Возвращаем защиту обратно
Однако стоит помнить: если код изначально запущен в безопасном режиме через профиль безопасности кластера или программно при подключении обработки, вызов УстановитьОтключениеБезопасногоРежима(Истина) может вызвать исключение, если у текущего сеанса нет соответствующих прав.
Если база работает в клиент-серверном варианте, ограничения могут накладываться на уровне кластера серверов 1С. Даже если в обработке прописаны все разрешения, администратор мог ограничить возможности всей базы целиком.
Разберем шаги для администратора:
Иногда ошибка возникает в стандартных инструментах, таких как «Универсальный обмен данными XML». В некоторых версиях конфигураций (например, «Розница 2.2») разработчики 1С принудительно включают безопасный режим для этих обработок при открытии формы.
Выясним причину: в модуле формы обработки в процедуре ПриСозданииНаСервере может стоять строка Объект.БезопасныйРежим = Истина;. Если вы используете эту обработку как внешнюю, вы можете:
ПриСозданииНаСервере.БезопасныйРежим на Ложь или добавить флажок на форму для управления этим параметром вручную.Подведем итог: наиболее стабильным и правильным методом является программное описание разрешений через механизмы БСП. Это гарантирует работу обработки в облачных сервисах и при обновлении платформы, сохраняя при этом общую защищенность информационной системы.