Как исправить ошибки при создании COM-объекта V77.Application в 1С 8.3?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При организации интеграции между современными версиями 1С:Предприятия 8.3 и устаревшими базами 1С:Предприятия 7.7 разработчики часто сталкиваются с ошибками при инициализации OLE/COM-соединения. Попробуем разобрать типовую ситуацию, когда при выполнении кода создания COM-объекта возникают системные сбои:

V7 = Новый COMОбъект("V77.Application");

В процессе работы могут появляться две распространенные ошибки:

  1. Ошибка -2147221005 (0x800401F3): Недопустимая строка с указанием класса.
  2. Ошибка -2147467262 (0x80004002): Интерфейс не поддерживается.

Проанализируем причины возникновения данных сбоев и разберем по шагам все способы их устранения.

Причины возникновения ошибок

Выясним причину первой ошибки: код 0x800401F3 означает, что операционная система Windows не находит в системном реестре зарегистрированного COM-сервера с указанным ProgID (например, V77.Application). Зачастую это происходит, когда каталог с установленной платформой 1С 7.7 был просто скопирован с другого компьютера без прохождения процедуры установки и регистрации в реестре, либо если регистрировались посторонние библиотеки (такие как comcntr.dll, относящаяся к 1С 8, или внешняя компонента v7plus.dll, не являющаяся OLE-сервером платформы 7.7).

Рассмотрим причину второй ошибки: код 0x80004002 указывает на то, что вызывающий процесс не может получить доступ к COM-интерфейсу. Платформа 1С 7.7 существует исключительно в 32-разрядном исполнении (x86). Если код выполняется в контексте 64-битного клиента или 64-битной службы сервера 1С:Предприятия 8.3 (rphost.exe), 64-битный процесс не может напрямую загрузить 32-битную DLL или связаться с 32-битным COM-сервером без специального механизма маршалинга. Кроме того, служба сервера 1С работает в изолированной неинтерактивной нулевой сессии Windows (Session 0), где по умолчанию заблокирован запуск приложений с графическим интерфейсом.

Шаг 1. Корректная регистрация OLE-сервера 1С 7.7 в операционной системе

Для устранения ошибки 0x800401F3 необходимо зарегистрировать исполняемый файл 1С 7.7 в реестре Windows. Разберем, как это сделать правильно:

  1. Запустим командную строку (cmd) от имени администратора.
  2. Перейдем в каталог с установленной платформой 1С 7.7 (обычно C:\Program Files (x86)\1Cv77\BIN).
  3. Выполним команду регистрации в зависимости от используемой версии платформы: 1cv7.exe /regserver Если используется SQL-версия платформы, выполним: 1cv7s.exe /regserver
  4. В программном коде 1С 8.3 укажем точный идентификатор ProgID, соответствующий редакции 1С 7.7:
    
    // Для сетевой версии:
    V7 = Новый COMОбъект("V77M.Application");
    
    // Для SQL-версии:
    V7 = Новый COMОбъект("V77S.Application");
    
    // Для локальной версии:
    V7 = Новый COMОбъект("V77L.Application");
    
    // Универсальный идентификатор:
    V7 = Новый COMОбъект("V1CEnterprise.Application");
    

Шаг 2. Настройка взаимодействия 64-битной 1С 8.3 и 32-битной 1С 7.7 через COM+

Чтобы подружить 64-битный процесс 1С 8.3 с 32-битным сервером 1С 7.7 и избежать ошибки 0x80004002, настроим системный суррогатный процесс dllhost.exe в службах компонентов Windows:

  1. Откроем 32-разрядную консоль управления службами компонентов. Для этого нажмем Win + R и выполним команду: mmc comexp.msc /32
  2. В дереве консоли перейдем по пути: Службы компонентов -> Компьютеры -> Мой компьютер -> Приложения COM+.
  3. Нажмем правой кнопкой мыши на папку Приложения COM+, выберем Создать -> Приложение.
  4. В открывшемся мастере выберем Установка нового приложения, укажем понятное имя (например, 1C77_Surrogate) и выберем режим Серверное приложение (Server Application).
  5. На шаге выбора удостоверения укажем конкретную учетную запись пользователя с правами локального администратора, под которой будет стартовать процесс.
  6. В созданном приложении откроем ветку Компоненты, нажмем правой кнопкой мыши, выберем Создать -> Компонент -> Установка новых компонентов и выберем исполняемый файл 1С 7.7 (1cv7.exe или 1cv7s.exe).
  7. В свойствах созданного компонента на вкладке Безопасность предоставим права локального запуска и активации для учетной записи, под которой запущена служба сервера 1С (например, USR1CV8).

Шаг 3. Создание системных каталогов Desktop для службы сервера 1С

Поскольку V77.Application инициализирует элементы пользовательского интерфейса, служба сервера 1С (Session 0) может аварийно завершать вызов, если отсутствуют специальные каталоги системного профиля. Создадим их вручную:

  1. Проверим наличие и при необходимости создадим папки:
    
    C:\Windows\System32\config\systemprofile\Desktop
    C:\Windows\SysWOW64\config\systemprofile\Desktop
    
  2. В свойствах безопасности обеих папок Desktop предоставим полные права доступа (Full Control) сервисному пользователю сервера 1С (например, USR1CV8) и группе SYSTEM (Система).

Альтернативные архитектурные решения

Если настройка COM-соединения на стороне 64-битного сервера вызывает сложности со стабильностью, рассмотрим альтернативные варианты интеграции:

  1. Перенос кода на сторону клиента: вынесем код обращения к COM-объекту в контекст &НаКлиенте и запустим 32-битный тонкий или толстый клиент 1С:Предприятия 8.3. В 32-битном клиенте обращение к V77.Application работает без настройки суррогатных процессов.
  2. Прямое чтение таблиц через SQL: если база 1С 7.7 работает под управлением Microsoft SQL Server, обратимся к ее таблицам напрямую с помощью объекта COMОбъект("ADODB.Connection") или механизма платформы ВнешниеИсточникиДанных.
  3. Файловый обмен данными: настроим запуск 1С 7.7 в пакетном режиме через командную строку с параметром /M для выгрузки данных в файлы формата XML, JSON или DBF с последующей загрузкой на стороне 1С 8.3.
← На главную