При попытке установить соединение между двумя базами 1С с использованием технологии COM часто возникает критическая ошибка: «Недопустимая строка с указанием класса» (код ошибки 0x80040154). Эта ситуация особенно характерна для систем, где установлено несколько версий платформы или используется терминальный доступ. Ошибка означает, что операционная система Windows не может найти в реестре запись о программном идентификаторе (ProgID), который вы запрашиваете в коде. Разберем пошагово, как диагностировать и устранить эту проблему.
Прежде чем приступать к исправлению, проанализируем основные факторы, вызывающие сбой:
comcntr.dll, отвечающая за COM-соединение, не зарегистрирована в реестре Windows.V83.COMConnector, а в системе зарегистрирована только версия для V82.Рассмотрим стандартный способ регистрации comcntr.dll. Важно понимать, что регистрацию нужно проводить именно на том компьютере (или сервере), где исполняется программный код. Если код выполняется «НаСервере», то регистрация нужна на сервере 1С.
Запустите командную строку (cmd) от имени администратора. В зависимости от разрядности вашей операционной системы и версии платформы, введите соответствующую команду. Разберем пример для платформы 8.3.12:
Для 64-разрядной Windows (регистрация 32-битной компоненты):
C:\Windows\SysWOW64\regsvr32 "C:\Program Files\1cv8\8.3.12.1714\bin\comcntr.dll"
Для 32-разрядной Windows или при использовании 64-битной версии платформы:
C:\Windows\system32\regsvr32 "C:\Program Files\1cv8\8.3.12.1714\bin\comcntr.dll"
Важный нюанс: Обратите внимание на кавычки в пути к файлу. Если в пути есть пробелы (например, в Program Files), кавычки обязательны. Если регистрация прошла успешно, вы увидите сообщение «Успешное выполнение DllRegisterServer».
Если простая регистрация не помогает (часто случается на 64-битных серверах 1С), необходимо создать приложение COM+. Это позволит Windows запустить библиотеку в отдельном процессе-суррогате dllhost.exe, что снимет проблему конфликта разрядностей.
Проанализируем шаги настройки:
1C_COM_Connector.USR1CV8).comcntr.dll в папке bin вашей платформы.CreatorOwner).Этот метод считается наиболее надежным для серверных решений, так как он изолирует работу COM-объекта от основного процесса платформы.
Иногда ошибка вызвана тем, что в коде используется неверный идентификатор класса. Посмотрим на различия между типами соединений:
Если мы подключаемся через Application (тяжелое соединение с запуском окна):
// Для версии 8.2
Соединение = Новый COMОбъект("V82.Application");
// Для версии 8.3
Соединение = Новый COMОбъект("V83.Application");
Если мы используем более быстрый COMConnector (рекомендуется для обмена данными):
// Для версии 8.3
Соединитель = Новый COMОбъект("V83.COMConnector");
ПараметрыСвязи = "Srvr=""ServerName"";Ref=""BaseName"";Usr=""Admin"";Pwd=""123"";";
Попытка
Соединение = Соединитель.Connect(ПараметрыСвязи);
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;
Выясним причину, почему Application может работать, а COMConnector — нет. Это происходит потому, что это разные записи в реестре Windows. Если вы зарегистрировали только одну версию или компоненту, вторая работать не будет. Всегда проверяйте, какой именно объект вы создаете в коде Новый COMОбъект.
Как отмечают опытные специалисты, технология COM является устаревшей и «капризной» в настройке, особенно в современных защищенных средах и при использовании Linux-серверов. Рассмотрим преимущества альтернативы:
Если ваша задача позволяет, мы рекомендуем отказаться от COMConnector в пользу HTTP-сервисов. Это избавит вас от необходимости администрирования серверов при каждом обновлении платформы 1С.
Подведем итог: Если вам все же необходимо использовать COM, начните с проверки разрядности операционной системы и корректности путей в команде regsvr32. Если ошибка сохраняется — переходите к настройке в «Службах компонентов» Windows.