При разработке расширений или работе в защищенных контурах конфигураций 1С программисты часто сталкиваются с ошибкой: «Ошибка при вызове конструктора (COMОбъект): Установлен безопасный режим. Выполнение операции запрещено». Эта ситуация типична для современных версий платформы 1С:Предприятие 8.3, где механизмы безопасности по умолчанию ограничивают доступ к потенциально опасным операциям, таким как работа с внешними объектами Windows.
В этой статье мы подробно разберем, почему возникает эта ошибка, чем «Безопасный режим» отличается от «Защиты от опасных действий» и какими способами можно разрешить создание COMОбъект, сохранив при этом разумный уровень безопасности системы.
Разберем ситуацию: если вы пишете код внутри расширения конфигурации, платформа автоматически запускает этот код в собственном безопасном режиме расширения. Даже если основная конфигурация работает с полными правами, расширение по умолчанию считается «потенциально небезопасным». В этом режиме 1С блокирует доступ к файловой системе, реестру и, что самое важное, к созданию любых объектов через COMОбъект.
Это самый быстрый и действенный способ, который часто применяется на практике. Нам необходимо изменить настройки подключения расширения к информационной базе.
После этого код в расширении получит те же права, что и код основной конфигурации, и создание COMОбъект станет доступным.
Если ваша база работает на сервере 1С, полное отключение безопасного режима может быть нежелательным с точки зрения безопасности. В этом случае мы рекомендуем использовать профили безопасности. Это позволяет создать «белый список» разрешенных COM-объектов.
Проанализируем шаги по настройке в консоли администрирования кластера серверов:
ProgID (например, Excel.Application или ADODB.Connection) или его CLSID.Этот метод считается наиболее грамотным, так как вы не открываете доступ ко всей системе, а разрешаете только работу с конкретным необходимым приложением.
Рассмотрим ситуацию, когда мы не хотим снимать безопасный режим с расширения. Мы можем обойти ограничение, создав «мост» между расширением и основной конфигурацией.
Функция СоздатьОбъектExcel() Экспорт
// В привилегированном модуле безопасный режим игнорируется
Попытка
ОбъектExcel = Новый COMОбъект("Excel.Application");
Возврат ОбъектExcel;
Исключение
ЗаписьЖурналаРегистрации("Ошибка COM", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции
Затем из кода расширения мы просто вызываем эту функцию. Однако помните, что расширение должно иметь возможность вызывать методы основной конфигурации (это также настраивается в свойствах расширения в конфигураторе — флаг «Вызывать методы основной конфигурации»).
Часто программисты путают эти два понятия. Выясним разницу:
Безопасный режим — это жесткое программное ограничение платформы. Если он включен, код Новый COMОбъект вызовет исключение, которое нельзя просто «проигнорировать» пользователю.
Защита от опасных действий — это интерактивное окно-предупреждение («Подтвердите выполнение операции...»). Эту защиту можно отключить в конфигураторе в свойствах конкретного пользователя (флажок «Защита от опасных действий») или программно через параметр ЗащитаОтОпасныхДействий в методах платформы.
Если вы сняли галочку у пользователя в конфигураторе, но ошибка «Выполнение операции запрещено» осталась — значит, срабатывает именно Безопасный режим расширения или профиля.
Посмотрим на специфику файлового варианта работы. В файловой базе механизм профилей безопасности не работает (он требует лицензии уровня КОРП и серверного кластера). Для файловой базы у нас остается только два пути:
УстановитьБезопасныйРежим(Ложь), если у текущего кода есть на это полномочия.Иногда даже после отключения безопасного режима COMОбъект не создается. Проанализируем причину разрядности. Если сервер 1С 64-битный, он не сможет напрямую создать 32-битный COM-объект. В этом случае ошибка может выглядеть как «Класс не зарегистрирован», но иногда она маскируется под общие ошибки прав доступа. Для решения такой проблемы рекомендуется использовать технологию COM+ (Component Services в Windows) для создания обертки над 32-битным объектом.
В завершение разберем рекомендацию фирмы «1С». Поскольку технология COM является устаревшей и работает только в среде Windows, рекомендуется заменять ее на Внешние компоненты, созданные по технологии Native API. Такие компоненты могут быть кроссплатформенными и гораздо стабильнее работают в безопасном режиме, если они загружены в макеты конфигурации. Если ваша задача позволяет уйти от использования Excel.Application или подобных объектов в пользу библиотек для прямой работы с файлами, это будет более надежным решением в долгосрочной перспективе.