К статье
Практический материал

Администрирование · 14 мин

Как программно отключить предупреждение безопасности в 1С

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

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

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

Важно понимать: защитный механизм существует не для раздражения пользователей, а чтобы вредоносный код из скачанной обработки не получил доступ к базе и файловой системе. Отключать его стоит точечно — для конкретных проверенных обработок и ролей, а не глобально для всех.

Что именно вызывает предупреждение безопасности

Платформа 1С показывает диалог «Предупреждение безопасности» в нескольких типовых ситуациях. Первая — интерактивное открытие файла внешней обработки или отчёта через меню «Файл — Открыть». Вторая — подключение расширения конфигурации, которое содержит небезопасные операции. Третья — попытка кода в безопасном режиме обратиться к файловой системе, COM-объектам, внешним компонентам или запустить приложение операционной системы.

Безопасный режим включён по умолчанию для кода, который платформа считает потенциально опасным: внешние обработки, расширения, код из строковых выражений через Выполнить() и Вычислить(). В этом режиме запрещены привилегированный режим, операции с файловой системой, COM, OLE, запуск внешних приложений, загрузка внешних компонент и доступ к интернету без явных разрешений.

Различают два уровня защиты: диалог подтверждения для пользователя и безопасный режим исполнения кода. Отключение диалога не снимает ограничений безопасного режима — обработка откроется без вопроса, но опасные операции внутри неё по-прежнему будут заблокированы. Для полного снятия ограничений нужны оба шага.

Отключение диалога при интерактивном открытии обработок

Если задача — убрать окно подтверждения при открытии внешних обработок пользователем, программный код не нужен: достаточно настройки. В типовых конфигурациях на БСП (Библиотека стандартных подсистем) перейдите в раздел «Администрирование — Пользователи и права — Персональные настройки» или откройте настройки конкретного пользователя и снимите флаг «Показывать предупреждение безопасности при открытии файлов».

В самой платформе за это отвечает параметр конфигурационного файла. Для тонкого клиента и веб-клиента поведение регулируется файлом conf.cfg или inetcfg.xml, но надёжнее — настройка в конфигурации. В базах без БСП диалог показывает сама платформа при вызове метода ОткрытьФорму для внешней обработки, и обойти его можно только подключением обработки программно.

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

// Подключение внешней обработки без интерактивного диалога

ПутьКФайлу = "C:\Обработки\ЗагрузкаДанных.epf";

ИмяОбработки = ВнешниеОбработки.Подключить(ПутьКФайлу, , Ложь);

// Третий параметр (БезопасныйРежим) = Ложь — обработка работает без ограничений

Форма = ПолучитьФорму("ВнешняяОбработка." + ИмяОбработки + ".Форма");

Форма.Открыть();

Третий параметр метода Подключить как раз управляет безопасным режимом: Ложь — полный доступ, Истина — ограничения сохраняются. Вызов ВнешниеОбработки.Подключить доступен только на сервере и требует права «Интерактивное открытие внешних обработок» у пользователя.

Управление безопасным режимом программно

Внутри серверного кода безопасный режим включается и выключается методом УстановитьБезопасныйРежим(). Это основной способ программно снять ограничения для доверенного кода — например, в регламентном задании, которое должно писать файлы в сетевую папку.

// В модуле регламентного задания или серверной процедуре

УстановитьБезопасныйРежим(Ложь); // ограничения сняты

// Теперь доступны файловые операции, COM, запуск приложений

ЗаписьТекста = Новый ЗаписьТекста("\\server\exchange\export.xml");

ЗаписьТекста.Записать(ДанныеXML);

ЗаписьТекста.Закрыть();

УстановитьБезопасныйРежим(Истина); // возвращаем защиту

Метод действует до конца текущего вызова сервера или до повторного вызова с другим значением. Хорошая практика — снимать режим на минимально необходимый участок кода и сразу возвращать обратно. Проверить текущее состояние можно функцией БезопасныйРежим(), которая возвращает Истина, если режим активен.

Важный нюанс: УстановитьБезопасныйРежим(Ложь) не сработает, если код исполняется в профиле безопасности кластера, где нужное разрешение не выдано. На сервере 1С с включёнными профилями безопасности приоритет у административных разрешений — программный вызов лишь запрашивает операцию, а профиль решает, разрешить её или нет.

Безопасный режим в расширениях конфигурации

Расширения по умолчанию работают в безопасном режиме, и при подключении расширения с небезопасными операциями пользователь видит предупреждение. Снять ограничение можно в диалоге управления расширениями: «Все функции — Стандартные — Управление расширениями конфигурации», в свойствах расширения снять флаг «Безопасный режим». Программно это делает метод менеджера расширений.

Расширения = РасширенияКонфигурации.Получить();

Для Каждого Расширение Из Расширения Цикл

Если Расширение.Имя = "МоеРасширение" Тогда

Расширение.БезопасныйРежим = Ложь;

Расширение.Записать();

КонецЕсли;

КонецЦикла;

Программная запись расширения требует административных прав и недоступна в безопасном режиме самого вызывающего кода. В клиент-серверном варианте с профилями безопасности изменение свойств расширения дополнительно контролируется правами кластера.

Профили безопасности кластера серверов

В клиент-серверном варианте работы самый правильный способ управления разрешениями — профили безопасности в консоли кластера. Они позволяют выдать конкретной информационной базе разрешения на конкретные операции: доступ к определённому каталогу файлов, запуск конкретного приложения, подключение COM-объекта. При этом безопасный режим остаётся включённым, но разрешённые операции выполняются без предупреждений.

Настройка выполняется в консоли администрирования серверов 1С: ветка «Профили безопасности». Создайте профиль, внутри него добавьте разрешения — например, «Доступ к каталогу файловой системы» с указанием пути и флагов чтения/записи, «Запуск внешнего приложения» с маской командной строки, «Использование COM-объекта» с ProgID. Затем привяжите профиль к информационной базе в её свойствах.

Сравнение способов отключения

УстановитьБезопасныйРежим(Ложь)

Подходит для доверенного серверного кода и регламентных заданий. Ограничение: не работает поверх запретов профиля безопасности кластера.

Флаг «Безопасный режим» у расширения

Подходит для собственных расширений. Требует административных прав и перезапуска сеансов для применения.

Профили безопасности кластера

Самый безопасный вариант для сервера: точечные разрешения без полного снятия защиты. Требует доступа к консоли кластера.

Снятие флага в настройках пользователя

Убирает только интерактивный диалог при открытии файлов. Ограничения безопасного режима сохраняются.

Преимущество профилей в том, что защита не отключается полностью: обработка сможет писать только в разрешённый каталог и запускать только разрешённое приложение. Любая другая операция по-прежнему блокируется. Это соответствует принципу минимальных привилегий и снижает ущерб при компрометации обработки.

Типовой механизм БСП: настройка разрешений в конфигурации

В конфигурациях на базе Библиотеки стандартных подсистем есть штатный механизм «Настройка разрешений на использование внешних ресурсов». Когда обработка или расширение запрашивает опасную операцию, администратору приходит запрос разрешения, который можно подтвердить один раз — дальше операция выполняется автоматически без диалогов.

Запросы отображаются в разделе «Администрирование — Обслуживание» или в форме настройки регламентных операций, в зависимости от версии БСП. Подтверждённые разрешения хранятся в константах и применяются ко всем сеансам. Это удобный компромисс: пользователи не видят лишних окон, а администратор контролирует, какие внешние ресурсы используются.

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

Порядок действий для серверной базы
  1. 1
    Определите, какая операция блокируется: файловый доступ, COM, запуск приложения — по тексту ошибки
  2. 2
    Откройте консоль кластера и создайте профиль безопасности с нужным разрешением
  3. 3
    Привяжите профиль к информационной базе в её свойствах
  4. 4
    В коде регламентного задания вызовите УстановитьБезопасныйРежим(Ложь) на участке с операцией
  5. 5
    Перезапустите сеансы и проверьте выполнение операции
  6. 6
    Проверьте журнал регистрации на отсутствие ошибок доступа

Частые ошибки и ограничения

Самая распространённая ошибка — попытка вызвать УстановитьБезопасныйРежим(Ложь) в клиентском коде. Метод доступен только на сервере и в толстом клиенте; в тонком и веб-клиенте его вызов на клиенте приведёт к ошибке компиляции или будет проигнорирован. Вся опасная логика должна выполняться в серверных процедурах с директивой &НаСервере.

Вторая ошибка — ожидание, что снятие диалога при открытии файла автоматически снимет ограничения безопасного режима. Это независимые механизмы: пользователь перестанет видеть окно подтверждения, но обработка всё равно упадёт с ошибкой при попытке записать файл, если безопасный режим не отключён явно.

Третья ошибка — забыть, что привилегированный режим и безопасный режим независимы. УстановитьПривилегированныйРежим(Истина) снимает ограничения прав доступа к данным, но не разрешения на внешние ресурсы. Для файловых операций в регламентном задании часто нужны оба вызова.

Типичные ошибки
01
Вызов УстановитьБезопасныйРежим в клиентском контексте — метод работает только на сервере, код падает или молча не срабатывает
02
Отключение безопасного режима только в диалоге открытия — ограничения на файловые операции внутри обработки сохраняются
03
Снятие режима на весь модуль целиком вместо точечного участка — расширяет окно уязвимости
04
Игнорирование профилей безопасности кластера — на сервере с профилями программный вызов не поможет без административного разрешения
05
Публикация обработки с отключённой защитой всем пользователям вместо ограниченного круга

Проверка результата

После изменения настроек проверьте результат в том же сценарии, где возникала проблема. Для интерактивного открытия — откройте обработку от имени целевого пользователя: диалог не должен появиться. Для регламентного задания — запустите его принудительно из консоли заданий или дождитесь расписания и проверьте журнал регистрации: ошибок вида «Операция не разрешена в безопасном режиме» быть не должно.

Программно состояние проверяется функцией БезопасныйРежим() в нужной точке кода. Для диагностики полезно временно добавить запись в журнал регистрации с текущим значением функции перед проблемной операцией — это покажет, действительно ли режим снят в момент выполнения.

Контрольные точки

Как проверить результат

Открытие внешней обработки пользователем
Норма

Обработка открывается сразу, без диалога подтверждения

Тревожный признак

Диалог «Предупреждение безопасности» по-прежнему появляется

Выполнение файловой операции в регламентном задании
Норма

Файл создан/прочитан, в журнале регистрации нет ошибок

Тревожный признак

Ошибка «Операция не разрешена в безопасном режиме»

Вызов БезопасныйРежим() перед операцией
Норма

Возвращает Ложь

Тревожный признак

Возвращает Истина — режим не снят или сброшен вызовом сервера

Если после всех настроек операция по-прежнему блокируется на сервере, проверьте, не привязан ли к базе профиль безопасности без нужных разрешений — он имеет приоритет над программными вызовами. Также убедитесь, что код реально исполняется на сервере: директива &НаСервереБезКонтекста в форме и вызов серверной процедуры общего модуля — разные контексты с точки зрения передачи состояния безопасного режима.

FAQ

Как отключить предупреждение для всех пользователей сразу?

В конфигурациях на БСП — через групповую обработку персональных настроек пользователей или установку значения по умолчанию в настройках программы. Платформенного глобального флага нет; альтернатива — подключать обработки программно через справочник дополнительных обработок, тогда диалог не показывается в принципе.

Почему УстановитьБезопасныйРежим(Ложь) не помогает на сервере?

Наиболее вероятная причина — к информационной базе привязан профиль безопасности кластера, в котором нет разрешения на нужную операцию. Разрешение нужно добавить в профиль через консоль администрирования серверов. Также проверьте, что вызов выполняется в том же серверном вызове, где происходит операция.

Можно ли отключить предупреждение только для одной конкретной обработки?

Да. Добавьте её в справочник «Дополнительные отчеты и обработки» (в конфигурациях на БСП) и настройте разрешения в её карточке, либо подключайте программно через ВнешниеОбработки.Подключить с параметром БезопасныйРежим = Ложь из собственного кода.

Опасно ли отключать безопасный режим для регламентных заданий?

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

Чем безопасный режим отличается от привилегированного?

Привилегированный режим отключает проверку прав доступа к данным информационной базы. Безопасный режим ограничивает операции с внешними ресурсами: файлами, COM, приложениями, интернетом. Это независимые механизмы, и для файловой выгрузки из регламентного задания обычно нужны оба.

Итог

Что важно запомнить

Предупреждение безопасности в 1С отключается на двух уровнях: интерактивный диалог убирается настройкой пользователя или программным подключением обработки, а ограничения кода снимаются методом УстановитьБезопасныйРежим(Ложь) на сервере. На сервере с профилями безопасности разрешения выдаются в консоли кластера. Снимайте защиту точечно и только для проверенного кода.