Как устранить ошибку создания COMОбъекта в безопасном режиме 1С

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

При разработке расширений или работе в защищенных контурах конфигураций 1С программисты часто сталкиваются с ошибкой: «Ошибка при вызове конструктора (COMОбъект): Установлен безопасный режим. Выполнение операции запрещено». Эта ситуация типична для современных версий платформы 1С:Предприятие 8.3, где механизмы безопасности по умолчанию ограничивают доступ к потенциально опасным операциям, таким как работа с внешними объектами Windows.

В этой статье мы подробно разберем, почему возникает эта ошибка, чем «Безопасный режим» отличается от «Защиты от опасных действий» и какими способами можно разрешить создание COMОбъект, сохранив при этом разумный уровень безопасности системы.

Причина возникновения ошибки в расширениях

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

Решение 1: Отключение безопасного режима в настройках расширения

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

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

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

Решение 2: Использование профилей безопасности (для клиент-серверного варианта)

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

Проанализируем шаги по настройке в консоли администрирования кластера серверов:

  1. В консоли администрирования создадим новый Профиль безопасности.
  2. В свойствах профиля перейдем в раздел COM-объекты.
  3. Добавим конкретный объект, указав его ProgID (например, Excel.Application или ADODB.Connection) или его CLSID.
  4. В настройках конкретной информационной базы (в консоли) или в параметрах расширения укажем использование этого профиля.

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

Решение 3: Перенос логики в привилегированный модуль

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

  1. В основной конфигурации создадим общий модуль (или используем существующий).
  2. Установим у модуля свойства Сервер и Привилегированный.
  3. Напишем в нем экспортную функцию для работы с COM:

Функция СоздатьОбъектExcel() Экспорт
    // В привилегированном модуле безопасный режим игнорируется
    Попытка
        ОбъектExcel = Новый COMОбъект("Excel.Application");
        Возврат ОбъектExcel;
    Исключение
        ЗаписьЖурналаРегистрации("Ошибка COM", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
КонецФункции

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

Важное различие: Безопасный режим vs Защита от опасных действий

Часто программисты путают эти два понятия. Выясним разницу:

Безопасный режим — это жесткое программное ограничение платформы. Если он включен, код Новый COMОбъект вызовет исключение, которое нельзя просто «проигнорировать» пользователю.

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

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

Особенности файловой базы

Посмотрим на специфику файлового варианта работы. В файловой базе механизм профилей безопасности не работает (он требует лицензии уровня КОРП и серверного кластера). Для файловой базы у нас остается только два пути:

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

Проблема разрядности (32 и 64 бита)

Иногда даже после отключения безопасного режима COMОбъект не создается. Проанализируем причину разрядности. Если сервер 1С 64-битный, он не сможет напрямую создать 32-битный COM-объект. В этом случае ошибка может выглядеть как «Класс не зарегистрирован», но иногда она маскируется под общие ошибки прав доступа. Для решения такой проблемы рекомендуется использовать технологию COM+ (Component Services в Windows) для создания обертки над 32-битным объектом.

Современная альтернатива: Native API

В завершение разберем рекомендацию фирмы «1С». Поскольку технология COM является устаревшей и работает только в среде Windows, рекомендуется заменять ее на Внешние компоненты, созданные по технологии Native API. Такие компоненты могут быть кроссплатформенными и гораздо стабильнее работают в безопасном режиме, если они загружены в макеты конфигурации. Если ваша задача позволяет уйти от использования Excel.Application или подобных объектов в пользу библиотек для прямой работы с файлами, это будет более надежным решением в долгосрочной перспективе.

← На главную