Как исправить ошибку «Недопустимая строка с указанием класса» при создании COM-объекта 1С_ScriptControl

Программист IT и автоматизация бизнеса
← На главную

При попытке вызвать внешний скрипт или инициализировать элемент управления через механизм COM-соединения разработчики 1С иногда сталкиваются с ошибкой: «Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса». Разберем по шагам, почему возникает эта проблема и как ее устранить.

Рассмотрим строку кода, которая вызывает сбой:

ScrptCtrl = Новый COMОбъект("1С_ScriptControl");

Данная ошибка означает, что операционная система Windows не может найти в системном реестре зарегистрированный сервер COM с указанным идентификатором программного обеспечения (ProgID) 1С_ScriptControl.

Причины возникновения ошибки

Проанализируем основные причины, из-за которых система выдает код ошибки 0x800401F3:

  1. Некорректный ProgID компонента: Стандартный системный идентификатор Microsoft Script Control в Windows — это MSScriptControl.ScriptControl. Имя 1С_ScriptControl не является стандартным системным ProgID и доступно только в том случае, если оно вручную создано через приложение COM+ или специфическую внешнюю библиотеку.
  2. Компонент не зарегистрирован в реестре: Файл внешней библиотеки (.dll или .ocx) отсутствует на компьютере или не был зарегистрирован утилитой regsvr32.
  3. Конфликт разрядности (32-bit и 64-bit): Компонент Script Control является 32-разрядным (x86). Если код исполняется в 64-битной платформе 1С (клиент или сервер), прямое обращение к 32-битному COM-объекту завершается ошибкой.

Вариант 1. Проверка реестра Windows и стандартного ProgID

Выясним причину отсутствия записи в реестре. Для этого выполним следующие действия:

  1. Нажмем сочетание клавиш Win + R, введем regedit и откроем редактор реестра.
  2. Перейдем в ветку HKEY_CLASSES_ROOT и проверим наличие раздела с именем 1С_ScriptControl или MSScriptControl.ScriptControl.
  3. Если используется стандартный Microsoft Script Control, заменим имя компонента в коде 1С:

// Использование стандартного системного ProgID
ScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");

Вариант 2. Регистрация библиотеки в операционной системе

Если для работы требуется конкретная внешняя библиотека (например, 1С_ScriptControl.dll или msscript.ocx), ее необходимо зарегистрировать в операционной системе. Разберем порядок действий:

  1. Убедимся, что файлы библиотеки присутствуют в системе (для 32-разрядных компонентов в 64-битной ОС Windows файл обычно размещается в папке C:\Windows\SysWOW64\).
  2. Запустим командную строку (cmd.exe) от имени администратора.
  3. Выполним регистрацию с помощью 32-битной утилиты regsvr32:

C:\Windows\SysWOW64\regsvr32.exe C:\Windows\SysWOW64\msscript.ocx

Вариант 3. Настройка приложения COM+ для 64-разрядной 1С

Если сервер 1С:Предприятие или клиентское приложение работают в 64-разрядном режиме, прямой вызов 32-разрядного COM-объекта вызовет ошибку. Настроим обертку COM+ для обращения к 32-битному компоненту под именем 1С_ScriptControl:

  1. Откроем консоль управления «Службы компонентов» (команда comexp.msc в окне «Выполнить»).
  2. Перейдем в раздел Службы компонентов -> Компьютеры -> Мой компьютер -> Приложения COM+.
  3. Нажмем правой кнопкой мыши и выберем Создать -> Приложение. Появится мастер установки приложений COM+.
  4. Укажем имя приложения 1С_ScriptControl и выберем тип Серверное приложение.
  5. В свойствах созданного приложения перейдем на вкладку «Учетная запись» и укажем системную учетную запись или пользователя, под которым запущен сервер 1С.
  6. В ветке созданного приложения раскроем папку Компоненты, нажмем правой кнопкой мыши и выберем Создать -> Компонент, после чего импортируем уже зарегистрированный 32-разрядный компонент Script Control.

После этой настройки вызов Новый COMОбъект("1С_ScriptControl") станет доступен из 64-битного контекста 1С.

Современные альтернативы Script Control

Поскольку технология VBScript и Script Control признана устаревшей и постепенно удаляется из современных выпусков Windows, проанализируем альтернативные способы решения задач в 1С без использования сторонних COM-объектов:

  1. Встроенные функции 1С для работы с JSON: Если Script Control использовался для парсинга JSON, следует применять штатные методы ПрочитатьJSON и ЗаписатьJSON.
  2. Элемент «Поле HTML-документа»: Для выполнения JavaScript-кода можно использовать встроенный HTML-документ на форме и его DOM-модель.
  3. Внешние интерпретаторы: Вызов скриптов на Python, Node.js или OneScript через команду ЗапуститьПриложение с передачей параметров.
← На главную