При настройке прямого обмена данными между конфигурациями 1С (например, 1С:Управление торговлей и 1С:Бухгалтерия) разработчики и администраторы часто сталкиваются со следующей системной ошибкой:
Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса
Проанализируем причины возникновения этой проблемы и подробно рассмотрим проверенные способы ее решения.
Код ошибки -2147221005 (0x800401F3) в операционной системе Windows означает «Invalid class string» (Недопустимая строка с указанием класса). Это указывает на то, что исполняемый процесс 1С пытался обратиться к COM-классу по его программному идентификатору (ProgID), но данный класс не был найден в системном реестре Windows.
Основные причины возникновения ситуации:
V82.COMConnector, однако на сервере или локальном ПК установлена только платформа версии 8.3, которая регистрирует класс V83.COMConnector.rphost.exe) не может напрямую загрузить 32-разрядную библиотеку comcntr.dll, если она зарегистрирована только в 32-битной подсистеме.regsvr32 после установки или обновления платформы.Рассмотрим ситуацию, когда старая конфигурация (например, УТ 10.3) при подключении к другой базе формирует строку ProgID на основе устаревшего значения. Проверив переменную под отладчиком, можно обнаружить следующий код:
Если ПустаяСтрока(ОбъектПодключения) Тогда
ОбъектПодключения = СтруктураПодключения.ВерсияПлатформы + ".COMConnector";
КонецЕсли;
Если переменная СтруктураПодключения.ВерсияПлатформы содержит значение "V82", то в итоге создается объект Новый COMОбъект("V82.COMConnector"), вызывающий ошибку.
Для исправления разберем по шагам порядок действий в Конфигураторе:
"V82.COMConnector" на "V83.COMConnector":
// Принудительное указание верной версии коннектора для платформы 8.3
ОбъектПодключения = "V83.COMConnector";
Попытка
COMСоединение = Новый COMОбъект(ОбъектПодключения);
Исключение
ЗаписьЖурналаРегистрации("Ошибка подключения", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
Если код программы использует корректный ProgID, но ошибка сохраняется, проанализируем правильность регистрации DLL-библиотеки в реестре Windows.
Выполним регистрацию с учетом разрядности используемого приложения:
cmd.exe) от имени администратора.regsvr32:
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.X.XXXX\bin\comcntr.dll"
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.X.XXXX\bin\comcntr.dll"
Примечание: Вместо 8.3.X.XXXX нужно указать точный номер установленного релиза платформы 1С.
Если служба сервера 1С является 64-разрядной и должна обращаться к 32-битным COM-компонентам, разберем настройку приложения COM+:
Win + R и введем dcomcnfg).1C_COMConnector) и тип — Серверное приложение.comcntr.dll.Если прямая COM-связь недоступна или её настройка ограничена правами доступа, настроим альтернативный обмен через файлы (XML/FTP).
При создании обмена через файл может возникнуть ошибка:
Неправильно заданы коды узлов в базе-источнике и в базе-приемнике. Для устранения проблемы в базе-источнике в плане обмена измените код созданного узла...
Важное предупреждение: Категорически не рекомендуется менять код уузла Этот узел (предопределенного узла вашей текущей базы), так как это приведет к изменению префиксов и сбою нумерации создаваемых документов!
Рассмотрим правильный алгоритм устранения конфликта узлов:
Этот узел) в базе-приемнике.Этот узел в базе-источнике совпадает с кодом созданного узла в базе-приемнике.После синхронизации кодов узлов создание правил и передача файлов обмена пройдут успешно без нарушения нумерации документов.