Начиная с версии платформы 8.3.9, в 1С:Предприятии появился встроенный механизм защиты от опасных действий. Его главная цель — обезопасить информационную базу от вредоносного кода, например, вирусов-шифровальщиков, распространяемых во внешних обработках. Однако на практике эта защита часто блокирует работу вполне легитимного софта: внешних печатных форм, отчетов, COM-объектов или сервисных обработок вроде «Инструментов разработчика» (ИР).
Разберем подробнее, почему срабатывает этот механизм и какими способами можно отключить предупреждения и блокировки для локальных и клиент-серверных информационных баз.
Механизм платформы контролирует потенциально опасные операции и выдает предупреждение пользователю при выполнении следующих действий из стороннего или внешнего кода:
.epf, отчетов .erf и расширений конфигурации .cfe.ЗапуститьПриложение или КомандаСистемы.Новый COMОбъект(...).ПодключитьВнешнююКомпоненту.Выясним, какие варианты отключения защиты существуют в платформе 1С для восстановления штатной работы конфигурации.
Это самый быстрый и простой способ для отдельно взятого пользователя. Выполним настройку по шагам:
После снятия этого флага платформа перестанет запрашивать подтверждения на выполнение потенциально опасных действий при работе под данной учетной записью.
Если требуется отключить защиту глобально для всей базы или конкретного сервера без редактирования карточек пользователей, воспользуемся параметром DisableUnsafeActionProtection в файле conf.cfg.
Этот параметр принимают регулярные выражения (маски), разделенные символом точки с запятой ;. Если строка соединения базы совпадает с указанной маской, защита от опасных действий выключается автоматически.
Для глобального отключения защиты для абсолютно всех информационных баз укажем следующий синтаксис:
DisableUnsafeActionProtection=.*
Если требуется отключить защиту только для баз, имена которых начинаются с определенного префикса (например, тестовых или технологических баз), пропишем правила следующим образом:
DisableUnsafeActionProtection=test_.*;stage_.*;
Важная особенность клиент-серверного режима: при выполнении кода в фоновых или регламентных заданиях, а также при серверных вызовах настройки текущего пользователя могут не действовать. В этом случае параметр DisableUnsafeActionProtection должен быть обязательно прописан в файле conf.cfg, расположенном в каталоге conf рабочей версии платформы непосредственно на сервере 1С:Предприятия.
Проанализируем ситуации, когда внешняя обработка подключается программно и необходимо избежать появления диалоговых окон с предупреждениями. Для этого в платформе предусмотрен специальный объект ОписаниеЗащитыОтОпасныхДействий.
Рассмотрим пример программного отключения защиты при вызове метода ВнешниеОбработки.Создать():
ОписаниеЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь;
Попытка
ОбработкаОбъект = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь, ОписаниеЗащиты);
Исключение
Сообщить("Не удалось загрузить внешнюю обработку: " + ОписаниеОшибки());
КонецПопытки;
Если в конфигурации используется Библиотека Стандартных Подсистем (БСП), можно применить типовую функцию общего назначения:
ИмяВременногоФайла = КаталогВременныхФайлов() + "ВнешняяОбработка.epf";
ДвоичныеДанные = СсылкаНаВПФ.ХранилищеОбработки.Получить();
ДвоичныеДанные.Записать(ИмяВременногоФайла);
Попытка
ОбработкаОбъект = ВнешниеОбработки.Создать(
ИмяВременногоФайла,
Ложь,
ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()
);
Исключение
Сообщить("Ошибка создания объекта из временного файла обработки " + ИмяВременногоФайла);
Возврат Неопределено;
КонецПопытки;
Для динамического подключения внешних обработок в управляемом приложении аналогично используется четвертый параметр метода Подключить у менеджера обработок:
ОписаниеЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь;
ИмяОбработки = ВнешниеОбработки.Подключить(ПутьКФайлу, , Ложь, ОписаниеЗащиты);
Если базы содержат сотни пользователей, снимать флаг вручную в конфигураторе долго. Проанализируем способ массового отключения защиты с помощью встроенного языка 1С:
ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ПользовательИБ Из ПользователиИБ Цикл
ПользовательИБ.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь;
ПользовательИБ.Записать();
КонецЦикла;
В типовых решениях (1С:Бухгалтерия, 1С:ERP, 1С:УТ и др.) внешние печатные формы и обработки рекомендуется подключать через стандартный справочник Дополнительные отчеты и обработки. При правильной регистрации внешнего файла администратором система автоматически снимает ограничения платформы и не запрашивает подтверждений у рядовых пользователей при их последующем запуске.