Работая в среде, где на одном сервере установлено несколько версий платформы 1С, системные администраторы часто сталкиваются с ошибками при попытке установить COM-соединение между базами. Одной из наиболее распространенных проблем является ошибка -2147221005(0x800401F3): Недопустимая строка с указанием класса. Давайте разберем по шагам, как выявить причину и настроить работу системы корректно.
Когда вы видите сообщение о недопустимой строке класса, это означает, что операционная система не может найти или загрузить COM-объект, к которому обращается 1С. Основные причины такого поведения:
comcntr.dll в реестре для конкретной версии платформы.Первым делом необходимо убедиться, что нужная версия comcntr.dll зарегистрирована в реестре Windows. Для этого воспользуемся консолью командной строки, запущенной от имени администратора:
Для 64-битной версии сервера используйте следующую команду, подставив актуальный путь к вашему каталогу платформы:
regsvr32 \"C:\\Program Files\\1cv8\\8.3.19.1522\\bin\\comcntr.dll\"
Если система выдает ошибку, убедитесь, что вы находитесь в консоли с правами администратора и указанный путь к файлу существует.
Для работы с несколькими версиями платформы рекомендуется создавать отдельные приложения в «Службе компонентов» для каждой версии 1С. Рассмотрим процедуру настройки:
Службы компонентов.Приложения COM+, нажмите правой кнопкой мыши и выберите Создать -> Приложение.Создать пустое приложение, задайте имя (например, V83_COM_19).Компоненты и добавьте новый компонент, выбрав файл comcntr.dll из нужной версии платформы.Безопасность. Установите права доступа, чтобы роль CreatorOwner имела необходимые полномочия.Частой ошибкой является передача неверного ProgID в конструктор COMОбъект. Важно, чтобы строка соответствовала имени компонента, заданному в «Службе компонентов». Рассмотрим пример безопасного вызова:
// Предположим, что версия задается динамически
Версия = \"8_3_19_1522\";
ИмяКласса = \"V83.COMConnector_\" + Версия;
Попытка
БазаКА = Новый COMОбъект(ИмяКласса);
Соединение = БазаКА.Connect(СтрокаСоединения);
Исключение
Сообщить(\"Ошибка при соединении: \" + ОписаниеОшибки());
КонецПопытки;
Обратите внимание: если вы при создании компонента в COM+ использовали подчеркивания вместо точек, то и в коде 1С вы должны обращаться к объекту через подчеркивания. Если при проверке кода возникают ошибки Класс не зарегистрирован, перепроверьте имя компонента в оснастке COM+.
Чтобы не гадать, почему соединение не работает в основной базе, рекомендуем создать отдельную внешнюю обработку для теста. Это позволит проверить работоспособность COM-обертки в изолированной среде.
Рассмотрим структуру проверки:
// Тестовая процедура для проверки COM-соединения
Процедура ПроверитьПодключение()
СтрокаСоединения = \"Srvr=ИмяСервера;Ref=ИмяБазы;Usr=Пользователь;Pwd=Пароль;\";
Попытка
ОбъектCOM = Новый COMОбъект(\"V83.COMConnector\");
Соединение = ОбъектCOM.Connect(СтрокаСоединения);
Сообщить(\"Успешное соединение!\");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
При обновлении платформы до новых релизов всегда обновляйте конфигурацию служб. Если вы меняете версию платформы 1С, не забывайте удалять старые записи в Службе компонентов и регистрировать новые, соответствующие обновленным путям к comcntr.dll. В случае использования SQL-баз, убедитесь, что разрядность COM-коннектора совпадает с разрядностью сервера, где находится кластер 1С.
Если настройка COM вызывает постоянные трудности, рассмотрите возможность перехода на современные механизмы взаимодействия, такие как HTTP-сервисы или Веб-сервисы. Они не зависят от регистрации компонентов в Windows и позволяют избежать проблем с версиями библиотек.