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