Рассмотрим распространенную ситуацию при разработке в 1С: имеются две дополнительные внешние обработки, которые подключены к информационной базе. В карточках обеих обработок (в пользовательском режиме) флаг «Безопасный режим» снят (установлено значение «Ложь»). При запуске первой обработки мы нажимаем кнопку, которая программно ищет и запускает вторую обработку. Вторая обработка должна подключиться к базе данных MySQL. Однако при попытке вызова функции подключения платформа 1С выдает ошибку, сообщая, что установлен безопасный режим, и блокирует выполнение.
Проанализируем причину такого поведения платформы. Почему настройки, заданные пользователем в справочнике дополнительных отчетов и обработок, игнорируются при программном вызове? Разберем по шагам механизмы платформы и Библиотеки стандартных подсистем (БСП), которые влияют на запуск внешнего кода.
Даже если мы открываем обработку через меню «Файл - Открыть» и все работает корректно, программный вызов подчиняется другим правилам. Выясним основные причины блокировок:
ВнешниеОбработки.Подключить) параметр безопасного режима по умолчанию всегда имеет значение Истина. Настройки из справочника могут быть проигнорированы, если вызов идет в обход стандартных механизмов БСП.Посмотрим на пример кода из конфигурации, который отвечает за проверку и установку безопасного режима на стороне БСП:
Менеджер = СоздатьМенеджерЗаписи();
Менеджер.ТипПрограммногоМодуля = СвойстваПрограммногоМодуля.Тип;
Менеджер.ИдентификаторПрограммногоМодуля = СвойстваПрограммногоМодуля.Идентификатор;
Менеджер.Прочитать();
Если Менеджер.Выбран() Тогда
Результат = Менеджер.БезопасныйРежим;
Иначе
Результат = Неопределено;
КонецЕсли;
Если запись в регистре сведений РежимыПодключенияВнешнихМодулей не найдена или не читается (значение Неопределено), система может принудительно включить безопасный режим.
Рассмотрим подробнее несколько вариантов, как можно обойти данное ограничение и заставить вторую обработку корректно работать с сервером MySQL.
1. Явное указание параметра в коде подключения
Если вы подключаете вторую обработку программно через методы менеджера внешних обработок, необходимо обязательно передавать третьим параметром значение Ложь. Это переопределит стандартное поведение платформы. Код должен выглядеть примерно так:
// Третий параметр отвечает за безопасный режим
ИмяОбработки = ВнешниеОбработки.Подключить(ПутьКФайлу, Имя, Ложь);
ВтораяОбработка = ВнешниеОбработки.Создать(ИмяОбработки);
2. Запрос точечных разрешений через манифест БСП
Современный стандарт разработки под БСП предполагает, что обработка должна работать в безопасном режиме, но при этом запрашивать исключения для необходимых действий. В функции СведенияОВнешнейОбработке второй обработки необходимо программно добавить разрешения на использование нужных ресурсов с помощью общего модуля БСП. Например, следует явно запросить разрешение на использование интернет-ресурса (TCP/IP) или разрешение на создание COM-класса (если к MySQL вы подключаетесь через ADODB).
3. Отключение защиты от опасных действий
В карточке пользователя в режиме «Предприятие» необходимо снять флажок «Защита от опасных действий». Если обработка запускается в фоновом задании, оно должно выполняться под пользователем с полными правами и снятой защитой.
Проанализируем ситуацию: стоит ли вообще запускать одну внешнюю обработку из другой? Безопасный режим полностью блокирует попытки создания COM-объектов и внешние сетевые запросы. При работе информационной базы в облачном сервисе (модель SaaS) выполнение кода с отключенным безопасным режимом строго запрещено. Рассмотрим более надежные подходы:
Применяя описанные методы, вы сможете настроить корректное взаимодействие между программными модулями и обеспечить стабильную работу интеграции с внешними базами данных без постоянных ошибок безопасности платформы 1С.