Как исправить ошибку COM-соединения при работе с несколькими версиями платформы 1С

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

Работая в среде, где на одном сервере установлено несколько версий платформы 1С, системные администраторы часто сталкиваются с ошибками при попытке установить COM-соединение между базами. Одной из наиболее распространенных проблем является ошибка -2147221005(0x800401F3): Недопустимая строка с указанием класса. Давайте разберем по шагам, как выявить причину и настроить работу системы корректно.

Анализ причин ошибки

Когда вы видите сообщение о недопустимой строке класса, это означает, что операционная система не может найти или загрузить COM-объект, к которому обращается 1С. Основные причины такого поведения:

  1. Отсутствие регистрации библиотеки comcntr.dll в реестре для конкретной версии платформы.
  2. Несоответствие разрядности вызывающего приложения и самой библиотеки.
  3. Некорректная настройка приложения в «Службе компонентов» (COM+), либо расхождение имен в настройках и в коде 1С.
  4. Несовпадение версий 1С (клиента и сервера), что вызывает ошибку несовпадения версий при попытке соединения.

Регистрация библиотеки comcntr.dll

Первым делом необходимо убедиться, что нужная версия comcntr.dll зарегистрирована в реестре Windows. Для этого воспользуемся консолью командной строки, запущенной от имени администратора:

Для 64-битной версии сервера используйте следующую команду, подставив актуальный путь к вашему каталогу платформы:

regsvr32 \"C:\\Program Files\\1cv8\\8.3.19.1522\\bin\\comcntr.dll\"

Если система выдает ошибку, убедитесь, что вы находитесь в консоли с правами администратора и указанный путь к файлу существует.

Настройка COM+ в «Службе компонентов»

Для работы с несколькими версиями платформы рекомендуется создавать отдельные приложения в «Службе компонентов» для каждой версии 1С. Рассмотрим процедуру настройки:

  1. Откройте оснастку Службы компонентов.
  2. Перейдите в узел Приложения COM+, нажмите правой кнопкой мыши и выберите Создать -> Приложение.
  3. Выберите Создать пустое приложение, задайте имя (например, V83_COM_19).
  4. Внутри созданного приложения перейдите в Компоненты и добавьте новый компонент, выбрав файл comcntr.dll из нужной версии платформы.
  5. Обязательно проверьте вкладку Безопасность. Установите права доступа, чтобы роль 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 и позволяют избежать проблем с версиями библиотек.

← На главную