Как правильно настроить внешнюю обработку БСП с COM-соединением и избежать предупреждений безопасности без встраивания в конфигурацию?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

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

Выясняем причину: почему предупреждение безопасности раздражает заказчика?

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

Платформа идентифицирует внешний файл не по его имени, а на основе расчета хэш-суммы содержимого файла (SHA-256). Как только программист вносит изменения в код обработки, исправляет ошибку или добавляет новую кнопку и присылает обновленный файл .epf заказчику — платформа вычисляет новую хэш-сумму. Для системы это абсолютно новое, неизвестное ранее действие, поэтому предупреждение безопасности появляется снова.

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

Решение №1: Использование безопасного режима БСП с запросом разрешений для COM-объектов

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

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

Проанализируем пример функции регистрации в модуле внешней обработки. Мы используем функцию БСП РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса для регистрации COM-соединения.


Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
    ПараметрыРегистрации.Вставить("Наименование", "Загрузка данных из внешней ИБ");
    ПараметрыРегистрации.Вставить("Версия", "1.2");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина); // Включаем безопасный режим!
    ПараметрыРегистрации.Вставить("Информация", "Обработка загружает данные через V83.COMConnector");
    ПараметрыРегистрации.Вставить("ВерсияБСП", СтандартныеПодсистемыСервер.ВерсияБиблиотеки());

    // Создаем массив для хранения необходимых разрешений
    Разрешения = Новый Массив;

    // Запрашиваем разрешение на создание COM-класса V83.COMConnector.
    // CLSID для V83.COMConnector является стандартным: {181E893D-73A4-4722-B61D-D604B3D67D47}
    РазрешениеCOM = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса(
        "V83.COMConnector", 
        "{181E893D-73A4-4722-B61D-D604B3D67D47}"
    );
    Разрешения.Добавить(РазрешениеCOM);

    // Добавляем сформированные разрешения в параметры регистрации
    ПараметрыРегистрации.Вставить("Разрешения", Разрешения);

    // Заполняем команды обработки
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, 
                    "Запустить интеграцию", 
                    "ВыполнитьИнтеграцию", 
                    "ВызовСерверногоМетода", 
                    Истина); // Показывать оповещение

    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    Возврат ПараметрыРегистрации;

КонецФункции

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

Решение №2: Настройка регламентного задания для внешней обработки в БСП

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

Разберем по шагам, как настроить расписание для дополнительной обработки на сервере:

  1. Убедимся, что в функции СведенияОВнешнейОбработке() для команды запуска указан режим ВызовСерверногоМетода. Регламентные задания могут выполняться только на сервере, поэтому клиентские методы запуска не подойдут.
  2. Перейдем в интерфейс программы под правами администратора. Откроем раздел Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки.
  3. Загрузим или обновим нашу внешнюю обработку из файла .epf.
  4. В карточке зарегистрированной обработки перейдем к списку команд в табличной части. В колонке Расписание для нашей команды нажмем гиперссылку «Не установлено» или текущую настройку расписания.
  5. В открывшемся стандартном окне настройки расписания зададим требуемую периодичность запуска (например, каждый день в 01:00).
  6. Сохраним изменения. БСП автоматически создаст и привяжет фоновое задание к этой обработке.

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

Решение №3: Глобальное или программное отключение защиты от опасных действий

Если безопасность конкретной информационной базы (например, тестовой или локальной базы разработчика) не является критическим фактором, постоянные предупреждения защиты можно отключить административными методами.

Способ А. Программное отключение предупреждений для пользователей

Мы можем написать простой скрипт в обработке, который разово отключит проверку опасных действий для всех или конкретных пользователей информационной базы. Свойство ПредупреждатьОбОпасныхДействиях объекта ЗащитаОтОпасныхДействий управляет этим поведением.


Процедура ОтключитьЗащитуОтОпасныхДействийДляВсех() Экспорт

    ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей();
    Для Каждого ТекущийПользователь Из ПользователиИБ Цикл
        // Снимаем флаг предупреждений
        ТекущийПользователь.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь;
        ТекущийПользователь.Записать();
    КонецЦикла;
    
    Сообщить("Защита от опасных действий успешно отключена для всех пользователей базы.");

КонецПроцедуры

Способ Б. Использование файла конфигурации conf.cfg

Для администраторов серверов «1С:Предприятия» существует возможность отключить этот механизм на уровне всей платформы для определенных баз данных. Для этого используется файл конфигурации conf.cfg, расположенный в каталоге установки платформы (например, C:\Program Files\1cv8\conf\).

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

DisableUnsafeActionProtection=work_base_name;test_base_.*;demo_base

После внесения изменений в файл conf.cfg перезапуск сервера 1С не требуется — платформа применит настройки при следующем обращении к базам, подходящим под указанные маски.

Решение №4: Перенос логики во встроенные Расширения конфигурации

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

Мы можем перенести код нашей внешней обработки в расширение, добавив туда обработку или создав команду. Однако важно помнить: расширения по умолчанию также запускаются в безопасном режиме платформы. Чтобы внутри расширения успешно создавались COM-объекты или выполнялся доступ к файловой системе сервера, необходимо сделать следующее:

  1. В окне конфигуратора в списке расширений выберем наше расширение.
  2. В палитре свойств расширения снимем флажок Безопасный режим (или установим свойство Безопасный режим = Ложь).
  3. В режиме «1С:Предприятие» зайдем в меню Администрирование — Параметры работы программы — Расширения и для нашего расширения снимем галочку «Безопасный режим» в интерфейсе (это действие требует прав администратора).

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

← На главную