При работе в 1С:Документооборот пользователи могут столкнуться с неприятной технической ошибкой при попытке сохранить присоединенный файл. Текст ошибки обычно выглядит так: 2147221164(0x80040154): Класс не зарегистрирован. Наиболее примечательным в этой ситуации является то, что у одних пользователей система работает стабильно, а у других, даже на том же самом компьютере, возникает сбой.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем взаимосвязь разрядности платформы 1С и системных компонентов Windows, а также изучим пошаговые методы устранения ошибки.
Для начала проанализируем строку кода, на которой происходит остановка программы, указанную в тексте ошибки:
Оболочка = Новый COMОбъект("MSScriptControl.ScriptControl");
Данная строка инициализирует COM-объект MSScriptControl.ScriptControl. Этот компонент является частью устаревшей технологии Microsoft, предназначенной для исполнения кода на языках VBScript и JScript внутри приложений. В 1С:Документооборот этот объект часто используется для динамического формирования имен файлов по шаблонам или для выполнения скриптов очистки данных.
Основная проблема заключается в том, что библиотека MSScriptControl существует только в 32-битной версии (x86). Современные 64-битные приложения не могут напрямую взаимодействовать с 32-битными COM-объектами без специальных программных "прослоек".
Первым делом проверим разрядность используемого клиентского приложения. Рассмотрим ситуацию, когда на одном компьютере у одного пользователя всё работает, а у другого — нет. Выясним причину, почему это происходит:
MSScriptControl не настроен как серверное COM+ приложение, 1С выдаст ошибку "Класс не зарегистрирован".Если для проблемного пользователя установлена 64-битная версия клиента, попробуем принудительно установить запуск 32-битного клиента (x86), если он установлен в системе. Это самый простой и быстрый способ решения проблемы.
Рассмотрим ситуацию, описанную на форуме: два пользователя запускают 1С на одном и том же компьютере, но ошибка возникает только у одного. Это указывает на то, что код, вызывающий создание COM-объекта, исполняется не для всех. Проанализируем персональные настройки программы:
Часто в 1С:Документооборот используется функционал скриптов для формирования имени сохраняемого файла. Если у одного пользователя этот функционал задействован, 1С пытается создать MSScriptControl.ScriptControl, что и приводит к ошибке при несовпадении разрядности или отсутствии компонента.
Если разрядность клиента 32-битная, но ошибка сохраняется, значит, компонент msscript.ocx просто не зарегистрирован в операционной системе Windows. Разберем, как это исправить. На 64-битных версиях Windows (10, 11, Server 2019/2022) библиотека должна находиться в папке SysWOW64.
Выполним регистрацию вручную:
cmd.
regsvr32 C:\Windows\SysWOW64\msscript.ocx
Если файл отсутствует по указанному пути, его необходимо скопировать с другого компьютера с аналогичной ОС или скачать официальный пакет Microsoft. После успешной регистрации должно появиться сообщение "DllRegisterServer в C:\Windows\SysWOW64\msscript.ocx успешно выполнен".
Бывают ситуации, когда использование 64-битного клиента 1С является обязательным требованием. В этом случае нам нужно заставить 64-битную 1С работать с 32-битным компонентом. Для этого воспользуемся механизмом COM+ (суррогатный процесс).
Рассмотрим пошагово процесс настройки:
MSScriptControl_x64_Fix. Выберем способ активации — "Серверное приложение".C:\Windows\SysWOW64\msscript.ocx.Теперь при обращении к MSScriptControl через Новый COMОбъект, Windows будет запускать его в отдельном 32-битном процессе, позволяя 64-битной 1С успешно получить результат работы скрипта.
Иногда регистрация компонента выполнена успешно, но конкретный пользователь Windows не имеет прав на чтение соответствующих веток реестра. Проанализируем состояние ключей реестра:
Объект ScriptControl имеет идентификатор (CLSID): {0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}.
regedit от имени администратора.HKEY_CLASSES_ROOT\CLSID\{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}.В некоторых корпоративных средах групповые политики (GPO) могут блокировать использование VBScript или доступ к определенным COM-объектам из соображений безопасности. Если все вышеперечисленные методы не помогли, необходимо обратиться к системному администратору для проверки действующих ограничений на выполнение скриптов в ОС.
Подведем итоги нашего исследования. Ошибка "Класс не зарегистрирован" для MSScriptControl в 1С:Документооборот — это классический конфликт разрядностей или отсутствие устаревшего компонента в современных системах. Для решения мы рекомендуем:
C:\Windows\SysWOW64\ присутствует файл msscript.ocx и он зарегистрирован командой regsvr32.Следуя этим шагам, вы сможете восстановить корректную работу функции сохранения файлов у всех пользователей системы.