Как настроить работу с COM-объектом АСУ ВРК и исправить ошибку «Класс не зарегистрирован» в 1С?

Программист 1С v8.3 (Управляемые формы) Промышленность, строительство и АПК
← На главную

При интеграции 1С с внешними системами, такими как АСУ ВРК (Автоматизированная система управления вагоноремонтным комплексом), разработчики часто сталкиваются с использованием технологии COM. Одной из самых распространенных проблем является ошибка при вызове конструктора: Ошибка при вызове конструктора (COMОбъект): -2147221164(0x80040154): Класс не зарегистрирован. Рассмотрим подробно, почему это происходит и как правильно настроить окружение для стабильной работы.

Выясняем причину ошибки: конфликт разрядности

Первым делом проанализируем ситуацию. Ошибка 0x80040154 почти всегда означает, что операционная система не может найти запись о COM-классе в системном реестре, соответствующую архитектуре запущенного приложения. В нашем случае ситуация выглядит так:

  1. Вы используете 64-битный клиент 1С:Предприятие.
  2. Библиотека asu_vrk_com.dll является 32-битной (x86).

Важно понимать: 64-битный процесс (1С) не может напрямую загрузить в свое адресное пространство 32-битную динамическую библиотеку (DLL). Даже если вы успешно зарегистрировали ее через regsvr32, для 64-битной 1С она останется «невидимой» в стандартном контексте. Разберем по шагам, как решить эту проблему.

Решение 1: Правильная регистрация библиотеки в 64-битной ОС

Если вы работаете в 64-разрядной Windows, обычный запуск команды регистрации может подтянуть 64-битную версию регистратора, которая пропишет данные не в ту ветку реестра. Для 32-битных компонент нужно использовать регистратор из папки SysWOW64.

Рассмотрим порядок действий:

  1. Запустите командную строку (CMD) строго от имени Администратора.
  2. Выполните команду, указав полный путь к нужному регистратору:

C:\Windows\SysWOW64\regsvr32.exe "C:\ПутьКФайлу\asu_vrk_com.dll"

Если регистрация прошла успешно, вы увидите сообщение «DllRegisterServer в ... успешно». Однако, если 1С все еще выдает ошибку, значит, проблема в прямой несовместимости разрядности процессов.

Решение 2: Настройка COM+ (Библиотека-посредник)

Это самый надежный способ, позволяющий 64-битной 1С работать с 32-битной компонентой asu_vrk_com.dll. Мы создадим специальный контейнер в Windows, который будет выступать посредником (bridge).

Разберем этот процесс по шагам:

  1. Откройте «Панель управления» — «Администрирование» — «Службы компонентов» (или введите dcomcnfg в строке поиска).
  2. В дереве консоли перейдите: «Службы компонентов» — «Компьютеры» — «Мой компьютер» — «Приложения COM+».
  3. Нажмите правой кнопкой мыши на «Приложения COM+» и выберите «Создать» — «Приложение».
  4. В мастере выберите «Создать новое приложение». Введите имя, например, ASU_VRK_Bridge. Установите тип «Серверное приложение» (это важно, так как именно это создаст отдельный процесс dllhost.exe).
  5. В качестве учетной записи для запуска укажите «Локальная служба» или конкретного пользователя с правами администратора.
  6. После создания приложения, раскройте его ветку, найдите папку «Компоненты».
  7. Нажмите правой кнопкой на «Компоненты» — «Создать» — «Компонент». Выберите «Установка новых компонентов» и укажите вашу asu_vrk_com.dll.

Теперь, когда 1С вызовет Новый COMОбъект("asu_vrk_com.ASUVRK"), Windows поймет, что объект живет в контейнере COM+, запустит его в 32-битном окружении и пробросит данные в 64-битную 1С. Это стандартный механизм решения конфликтов разрядности.

Решение 3: Использование 32-битного клиента 1С

Если архитектура вашей системы позволяет, самым простым решением будет установка и запуск 32-битного тонкого или толстого клиента 1С. В 32-битном приложении вызов 32-битной библиотеки произойдет мгновенно и без дополнительных настроек COM+. Посмотрите в свойствах «О программе» в 1С: если там указано «8.3.XX.XXXX (x86_64)», значит у вас 64-битная версия. Для работы напрямую вам нужна версия без приписки «64».

Проверка программного кода в 1С

После того как мы разобрались с регистрацией и разрядностью, проанализируем ситуацию на стороне кода. Для файловой базы код выполняется на клиенте, поэтому библиотека должна быть настроена на каждом рабочем месте. Проверьте правильность создания объекта с обработкой исключений:


// Пример инициализации объекта АСУ ВРК
Попытка
    АСУВРК = Новый COMОбъект("asu_vrk_com.ASUVRK");
    Сообщить("Объект АСУ ВРК успешно создан!");
Исключение
    ТекстОшибки = ОписаниеОшибки();
    Сообщить("Не удалось создать объект АСУ ВРК. Возможно, компонента не зарегистрирована.");
    Сообщить("Подробности: " + ТекстОшибки);
    Возврат;
КонецПопытки;

// Типовой пример обращения к методам (уточните в документации АСУ ВРК)
// Результат = АСУВРК.Connect(Сервер, База, Логин, Пароль);

Дополнительные факторы: зависимости и права доступа

Рассмотрим еще несколько важных моментов, которые могут блокировать работу компоненты:

Работа в клиент-серверном режиме

Проанализируем ситуацию, если вы в будущем решите перейти на клиент-серверный вариант (SQL). В этом случае код, выполняемый НаСервере, потребует регистрации asu_vrk_com.dll именно на сервере 1С. Поскольку сервер 1С практически всегда 64-битный, настройка через COM+ (Решение 2) станет обязательной. При файловом режиме (как в вашем случае) все манипуляции производятся на локальном компьютере пользователя.

Резюме: Основная причина вашей ошибки — запуск 32-битной компоненты из 64-битной 1С. Используйте настройку через Службы компонентов (COM+) или перейдите на 32-битный клиент 1С, и проблема будет решена.

← На главную