Доброго времени суток. Имеется самописная конфигурация на обычном приложении. В общем модуле есть процедура которая формирует дерево значения, а затем сохраняет его в файл с помощью процедуры ЗначениеВФайл. При этом возникает ошибка:
{ОбщийМодуль.Такойто.Модуль(115)}: Ошибка при вызове метода контекста (ЗначениеВФайл): Установлен безопасный режим. Выполнение операции запрещено Как обойти этот долбанный безопасный режим? В настройках пользователя отключил защиту от опасных действий, но ничего не изменилось. Вроде на форумах много подобных вопросов, но что то все про типовые конфигурации, внешние обработки и не в тему. Может кто нибудь сказать по простому как обойти или отключить этот безопасный режим и почему не достаточно отключить защиту от опасных действий в настройках пользователя информационной базы?
(31) все дело в профиле безопасности кластера, нужно зайти в консоль и создать профиль, в нем указать что можно, а что нельзя, причем это не танцы с бубном, а реальные действия которые нужно настроить (кстати разрешить все, тоже можно) . Я столкнулся с проблемой с подключением внешней компоненты и Установлен безопасный режим. Выполнение операции запрещено словил. Короче надо настраивать локальный кластер,после создания профилей прописать их в базе данных, там же в консоле и все будет норм. Для вашего случая есть тоже галочка) а для моего случая отметил на скрине красным.
Пишу это что бы люди находили так как много не отвеченных вопросов по инету на эти темы.
Кстати по этой функции
ПодключитьВнешнююКомпоненту();
Если ее вызывать в модуле формы или модуле объекта все будет норм, т.к 1с сама выключает в них БезопасныйРежим, а если в общем модуле то увы, настраивать кластер нужно и никакие
Спасибо.
Единственное решение, которое помогло - создать профиль безопасности и там разрешить все.
Простой код в тестовой внешней обработке выполнялся и на клиенте и на сервере,
а если пихаешь его в ПКО_ПриВыгрузке, то универсальный обмен данными начинает критовать на права на эти строчки:
АДОКоннектор = Новый COMОбъект("ADODB.Connection");
АДОКоннектор.ConnectionString = "Provider=""ADsDSOObject""";
Теперь происходит исключение с текстом: В данной процедуре/ функции не был установлен безопасный режим У пользователя под которым выполняется код, полные права
Что опять не так то?
Я тут еще одну процедуру нарыл. А в чем различие между ними?
УстановитьОтключениеБезопасногоРежима() - Выключает текущий режим безопасности.
УстановитьБезопасныйРежим() - В файловом варианте информационной базы или на сервере в клиент-серверном варианте информационной базы включает или выключает безопасный режим исполнения кода.
Я читаю справку и не понимаю, что там написано. Режим безопасности и безопасный режим исполнения кода это разные вещи что ли?
У меня истерика!!! Если я пытаюсь вызвать функцию ПолучитьОтключениеБезопасногоРежима или УстановитьОтключениеБезопасногоРежима в общем модуле, то выходит исключение даже на этапе проверки:
Процедура или функция с указанным именем не определена (ПолучитьОтключениеБезопасногоРежима)
Результат = <<?>>ПолучитьОтключениеБезопасногоРежима(); (Проверка: Сервер) У общего модуля стоит галочка единственная галочка "Сервер", как при этом может выходит ошибка при проверке на сервере?
(9) Вызвал предварительно УстановитьПривилегированныйРежим(Истина); перед вызовам ЗначениеВФайл - не помогло, при вызове ЗначениеВФайл ошибка таже (Установлен безопасный режим. Выполнение операции запрещено). Через отладку, после установки привилегированного режима, посмотрел значение функции ПривилегированныйРежим(), значение Ложь, т.е. привилегированный режим не включается, но ошибки никакой при вызове УстановитьПривилегированныйРежим нет. Тогда я установил галочку "Привилегированный" у самого общего модуля из которого вызываю процедуру содержащую ЗначениеВФайл - не помогло, ошибка таже. Ставлю точку останова в общем привилегированном модуле, смотрю через отладку ПривилегированныйРежим() - значение Ложь... Глаз начинает дергаться, скажите в каком месте я дурак?
Да
Даже специально ща запустил правой клавишей от имени администратора
Кстати сейчас в другой конфигурации попробовал общий модуль сделать Привилегированным и через отладку в нем ПривилегированныйРежим() возращает Истина, а почему в этой конфигурации возвращает Ложь я не пойму, что на это может влиять?
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Это из БСП на сколько я понял, в обычном приложении такого нет, тем более в самописной конфигурации
(21) Это я уже читал и как я понял процедура УстановитьБезопасныйРежим нужна что бы запретить ряд действий внутри привилегированного режима, а УстановитьОтключениеБезопасногоРежима я вообще ни понял начерта нужна
Добрый день.
Пишу для истории, возможно кому- то пригодится. Была аналогичная проблема в Конвертации 2.0. После выгрузки объекта в ПКО формировала Табличный документ и пыталась его записать. В момент записи выдавал ошибку, что "Установлен безопасный режим. Выполнение операции запрещено".
Было так:
Стало вот так:
ТабДок = Документы.МойДокумент.ПечатьЛистаСогласования(Источник,Источник);
ВрФайл = ПолучитьИмяВременногоФайла("pdf");
Значение = БезопасныйРежим();
Если ТипЗнч(Значение)=тип("Булево") и Значение=Истина тогда
УстановитьОтключениеБезопасногоРежима(Истина); табДок.записать(ВрФайл,ТипФайлаТабличногоДокумента.pdf);
КОнецЕсли;
(23) Тоже ковыряюсь с КД2 в ПВД.
Прописываю УстановитьОтключениеБезопасногоРежима(Истина);
Не работает нифга. Попробовал еще варианты с УстановитьБезопасныйРежим(Ложь);
Я еще потом понатыкал вывод на экран со статусом безопасного режима. Не меняется вообще Безопасный режим. Запускал под админом с полными правами. Хз куда дальше копать.
,
(25) Та же проблема. Надо было в КД2 записать файл на диск. Была ошибка "Установлен безопасный режим выполнение операции запрещено". Оказалось все просто.
Надо сохранить УниверсальныйОбменДаннымиXML как внешнюю обработку. Там в форме при создании на сервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Проверка прав доступа должна располагаться самой первой.
Если Не ПравоДоступа("Администрирование", Метаданные) Тогда
ВызватьИсключение НСтр("ru = 'Использование обработки в интерактивном режиме доступно только администратору.'");
КонецЕсли;
ПроверитьВерсиюИРежимСовместимостиПлатформы();
Объект.ЭтоИнтерактивныйРежим = Истина;
Объект.БезопасныйРежим = Ложь;
Объект.КодировкаФайлаПротоколаОбмена = "КодировкаТекста.UTF8";
ЗаголовокФормы = НСтр("ru = 'Универсальный обмен данными в формате XML (%ВерсияОбработки%)'");
ЗаголовокФормы = СтрЗаменить(ЗаголовокФормы, "%ВерсияОбработки%", ВерсияОбъектаСтрокойНаСервере());
Заголовок = ЗаголовокФормы;
ЗаполнитьСписокТиповДоступныхДляУдаления();
КонецПроцедуры
(26) Благодарю - помогло - та же проблема была при загрузке данных с помощью обработки "Универсальный обмен данными XML".
У меня при загрузке конфа обращалась к интернет ресурсу, чтобы правильно заполнить адрес в контактной информации в УНФ.
В обработке в процедуре ПриСозданииНаСервере() указал:
Так происходит потому, что в 1С Предприятии 8.2 существует безопасный режим исполнения программного кода. В этом режиме по-умолчанию запускаются все внешние обработки и отчеты для обеспечения безопасного исполнения кода. Если есть уверенность, что в обработке не содержит вредоносного кода, можно этот режим отключить. И тогда все будет работать.
Во встроенном языке, у менеджера внешних обработок и у менеджера внешних отчетов существует метод Подключить(), при помощи которого выполняется подключение внешней обработки/отчета.
В третьем параметре этого метода БезопасныйРежим задается признак подключения внешней обработки/отчета в безопасном режиме. Если значение параметра Истина или параметр не указан, подключение будет осуществлено в безопасном режиме. Чтобы его отключить нужно установить значение параметра БезопасныйРежим в Ложь.
Пример программного подключения внешней обработки рассмотрен в вопросе "Как программно открыть внешнюю обработку?".
Подробнее об использовании метода Подключить() можно прочитать в синтакс-помощнике: Прикладные объекты - Внешние обработки и отчеты - ВнешниеОбработкиМенеджер/ ВнешниеОтчетыМенеджер - Методы.
Подробнее о режиме безопасного исполнения программного кода можно прочитать в документации: 1С:Предприятие 8.2. Руководство разработчика, Раздел 5.5.4.3: Объекты конфигурации - Ветвь конфигурации «Общие» - Роли и права доступа - Безопасный режим работы.
Внешнюю обработку надо подключать с третьим параметром Ложь:
Такая же проблема, ничего из рекомендованного выше не помогло. Причём у одних пользователей с одинаковым набором прав работало, у других выходила ошибка.
Помогло снятие галочки "Защита от опасных действий" у пользователя в конфигураторе.
Если у вас связанно с работой файлов, или внешними подключениями, то должна быть доступна роль "Администратор системы" (не путать с полными правами)
Итого:
1.Конфигуратор: Администринование --> Пользователи - Убрать галку (в самом низу) "Защита от опасных действий" Там же, у пользователя - кликнуть вкладку "Прочие" 2. Поставить галку "Администратор системы" 3. Поставить галку "Добавление и изменение папок и файлов"
В ERP работала обработка "Универсальный обмен в формате XML" штатно годами, вдруг начала выдавать ошибку про невозможность работы с временными файлами по причине безопасного режима.
По форумам, нашел флаг "Безопасный режим" у пользователя, но не в пользовательской карточке пользователя, а из конфигуратора. Не помогло.
В еще одном форуме упоминули про реквизит формы в обработке Универсального обмена XML - вывел на форму и хопа - она стоит включенной!.
Выключил на форме - все прошло на ура.