Как исправить ошибку 2147221164(0x80040154): Класс не зарегистрирован при сохранении файлов в 1С:Документооборот

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

При работе в 1С:Документооборот пользователи могут столкнуться с неприятной технической ошибкой при попытке сохранить присоединенный файл. Текст ошибки обычно выглядит так: 2147221164(0x80040154): Класс не зарегистрирован. Наиболее примечательным в этой ситуации является то, что у одних пользователей система работает стабильно, а у других, даже на том же самом компьютере, возникает сбой.

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

Разбор причины ошибки: MSScriptControl и разрядность

Для начала проанализируем строку кода, на которой происходит остановка программы, указанную в тексте ошибки:

Оболочка = Новый COMОбъект("MSScriptControl.ScriptControl");

Данная строка инициализирует COM-объект MSScriptControl.ScriptControl. Этот компонент является частью устаревшей технологии Microsoft, предназначенной для исполнения кода на языках VBScript и JScript внутри приложений. В 1С:Документооборот этот объект часто используется для динамического формирования имен файлов по шаблонам или для выполнения скриптов очистки данных.

Основная проблема заключается в том, что библиотека MSScriptControl существует только в 32-битной версии (x86). Современные 64-битные приложения не могут напрямую взаимодействовать с 32-битными COM-объектами без специальных программных "прослоек".

Шаг 1: Проверка разрядности клиента 1С

Первым делом проверим разрядность используемого клиентского приложения. Рассмотрим ситуацию, когда на одном компьютере у одного пользователя всё работает, а у другого — нет. Выясним причину, почему это происходит:

  1. Откроем список информационных баз 1С.
  2. Выберем нужную базу и нажмем кнопку "Изменить".
  3. Перейдем на вкладку "Дополнительно".
  4. Посмотрим на поле "Разрядность". Если там выбрано "64 (x64)", а компонент MSScriptControl не настроен как серверное COM+ приложение, 1С выдаст ошибку "Класс не зарегистрирован".

Если для проблемного пользователя установлена 64-битная версия клиента, попробуем принудительно установить запуск 32-битного клиента (x86), если он установлен в системе. Это самый простой и быстрый способ решения проблемы.

Шаг 2: Анализ персональных настроек пользователя в 1С:Документооборот

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

  1. Зайдем в базу под пользователем, у которого возникает ошибка.
  2. Перейдем в раздел "Настройки" — "Персональные настройки".
  3. Выберем пункт "Файлы".
  4. Сравним настройки с тем пользователем, у которого ошибка не воспроизводится. Особое внимание уделим опциям, связанным с шаблонами имен файлов или автоматическим переименованием.

Часто в 1С:Документооборот используется функционал скриптов для формирования имени сохраняемого файла. Если у одного пользователя этот функционал задействован, 1С пытается создать MSScriptControl.ScriptControl, что и приводит к ошибке при несовпадении разрядности или отсутствии компонента.

Шаг 3: Регистрация библиотеки msscript.ocx в системе

Если разрядность клиента 32-битная, но ошибка сохраняется, значит, компонент msscript.ocx просто не зарегистрирован в операционной системе Windows. Разберем, как это исправить. На 64-битных версиях Windows (10, 11, Server 2019/2022) библиотека должна находиться в папке SysWOW64.

Выполним регистрацию вручную:

  1. Нажмем кнопку "Пуск" и введем cmd.
  2. Нажмем правой кнопкой мыши на "Командная строка" и выберем "Запуск от имени администратора".
  3. Введем следующую команду:

regsvr32 C:\Windows\SysWOW64\msscript.ocx

Если файл отсутствует по указанному пути, его необходимо скопировать с другого компьютера с аналогичной ОС или скачать официальный пакет Microsoft. После успешной регистрации должно появиться сообщение "DllRegisterServer в C:\Windows\SysWOW64\msscript.ocx успешно выполнен".

Шаг 4: Настройка COM+ для 64-битного клиента

Бывают ситуации, когда использование 64-битного клиента 1С является обязательным требованием. В этом случае нам нужно заставить 64-битную 1С работать с 32-битным компонентом. Для этого воспользуемся механизмом COM+ (суррогатный процесс).

Рассмотрим пошагово процесс настройки:

  1. Откроем "Панель управления" — "Администрирование" — "Службы компонентов".
  2. Развернем ветку "Компьютеры" — "Мой компьютер" — "Приложения COM+".
  3. Нажмем правой кнопкой мыши на "Приложения COM+" и выберем "Создать" — "Приложение".
  4. В мастере создания нажмем "Далее", выберем "Создать новое приложение".
  5. Дадим имя, например, MSScriptControl_x64_Fix. Выберем способ активации — "Серверное приложение".
  6. В качестве учетной записи укажем "Локальная служба" (Local Service) или конкретного пользователя с правами на запуск компонентов.
  7. После создания приложения зайдем в его ветку, выберем папку "Компоненты".
  8. Нажмем "Создать" — "Компонент", выберем "Установка новых компонентов" и укажем путь к C:\Windows\SysWOW64\msscript.ocx.

Теперь при обращении к MSScriptControl через Новый COMОбъект, Windows будет запускать его в отдельном 32-битном процессе, позволяя 64-битной 1С успешно получить результат работы скрипта.

Шаг 5: Проверка прав доступа в реестре

Иногда регистрация компонента выполнена успешно, но конкретный пользователь Windows не имеет прав на чтение соответствующих веток реестра. Проанализируем состояние ключей реестра:

Объект ScriptControl имеет идентификатор (CLSID): {0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}.

  1. Запустим regedit от имени администратора.
  2. Перейдем в раздел HKEY_CLASSES_ROOT\CLSID\{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}.
  3. Нажмем правой кнопкой мыши, выберем "Разрешения".
  4. Убедимся, что группа "Пользователи" имеет права на "Чтение".

В некоторых корпоративных средах групповые политики (GPO) могут блокировать использование VBScript или доступ к определенным COM-объектам из соображений безопасности. Если все вышеперечисленные методы не помогли, необходимо обратиться к системному администратору для проверки действующих ограничений на выполнение скриптов в ОС.

Резюме

Подведем итоги нашего исследования. Ошибка "Класс не зарегистрирован" для MSScriptControl в 1С:Документооборот — это классический конфликт разрядностей или отсутствие устаревшего компонента в современных системах. Для решения мы рекомендуем:

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

← На главную