Как исправить ошибку «Интерфейс не поддерживается» при подключении из 1С 8.2 к 1С 7.7 через COM?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При организации обмена данными между разными поколениями систем 1С, например, при загрузке данных из 1С:Предприятие 8.2 в 1С:Предприятие 7.7, программисты часто сталкиваются со специфической системной ошибкой. Ошибка с кодом -2147467262(0x80004002): Интерфейс не поддерживается возникает в момент инициализации нового COM-объекта. Характерной особенностью является то, что при запуске 1С от имени администратора проблема исчезает, но при обычной работе пользователя обмен не функционирует.

В данной статье мы подробно разберем причины возникновения этой ситуации на современных 64-битных операционных системах и рассмотрим пошаговые инструкции по её устранению.

Природа ошибки и влияние разрядности системы

Проанализируем ситуацию: мы работаем на 64-битной версии Windows (10 или Server 2008/2012+). 1С:Предприятие 7.7 является сугубо 32-битным приложением. Когда 64-битная система пытается создать COM-объект V77S.Application или V77.Application, она сталкивается с конфликтом окружения. Основная проблема заключается в том, что интерфейсы 32-битных библиотек должны быть правильно проброшены в систему, чтобы вызывающее приложение (в нашем случае 1С 8.2) могло получить к ним доступ без повышения привилегий до уровня администратора.

Рассмотрим основные способы решения этой задачи, начиная от простых настроек прав и заканчивая конфигурацией системных служб компонентов.

Способ 1: Настройка COM+ (Создание обертки для 1С 7.7)

Этот метод считается самым надежным и профессиональным. Мы создадим специальное приложение в службах компонентов Windows, которое будет запускать 32-битную «семерку» в отдельном процессе dllhost.exe под определенной учетной записью. Разберем этот процесс по шагам:

  1. Откроем Панель управления -> Администрирование -> Службы компонентов.
  2. Перейдем в ветку Компьютеры -> Мой компьютер -> Приложения COM+.
  3. Нажмем правой кнопкой мыши и выберем Создать -> Приложение.
  4. В мастере установки выберем Создать новое приложение. Введем имя, например, 1C77_COM. Установим переключатель в положение Серверное приложение.
  5. На этапе выбора учетной записи выберем Указанный пользователь. Здесь необходимо ввести данные пользователя (администратора), под которым 1С 7.7 гарантированно запускается. Это позволит нам запускать «восьмерку» под обычным пользователем, в то время как COM-объект будет работать в своем контексте.
  6. После создания приложения, зайдем в его свойства, на вкладку Безопасность, и снимем галочку Принудительная проверка доступа для приложений. Установим уровень аутентификации Вызов.
  7. Внутри приложения перейдем в папку Компоненты. Нажмем Создать -> Компонент.
  8. Выберем Установка новых компонентов и найдем в реестре или среди зарегистрированных библиотек интерфейсы, относящиеся к 1С 7.7 (обычно это связано с comcntr.dll или конкретными CLSID семерки).

После этой настройки система перестанет требовать запуск основной программы от имени администратора, так как права будут делегированы на уровне службы компонентов. Для решения подобных задач взаимодействия разрядностей можно использовать методику настройки COM-объекта 1С 7.7 через службу COM+.

Способ 2: Регистрация через реестр (Wow6432Node)

Иногда ошибка «Интерфейс не поддерживается» возникает из-за того, что записи в реестре о 32-битных интерфейсах отсутствуют в специальной ветке для совместимости. Проанализируем состояние реестра. На 64-битных ОС записи о COM-объектах должны дублироваться в ветке HKEY_CLASSES_ROOT\Wow6432Node\CLSID.

Выясним причину: если вы устанавливали 1С 7.7 простым копированием папки BIN, необходимые ключи реестра не создались. Выполните следующие действия:

  1. Запустите командную строку от имени администратора.
  2. Перейдите в папку с установленной 1С 7.7 (например, cd "C:\Program Files (x86)\1Cv77\BIN").
  3. Выполните команду регистрации сервера: 1cv7s.exe /regserver (или 1cv7.exe /regserver в зависимости от версии).

Если автоматическая регистрация не помогла, необходимо вручную проверить наличие параметра InprocHandler32 в ветке интерфейса в реестре. Он должен ссылаться на системную библиотеку ole32.dll. Ошибка часто кроется в том, что путь к ole32.dll прописан некорректно для контекста обычного пользователя.

Способ 3: Использование альтернативных ProgID

Посмотрим на пример кода инициализации COM-объекта. Автор темы использует V77S.Application. Однако в зависимости от версии установленной платформы (SQL, сетевая, локальная), идентификаторы могут отличаться. Попробуем перебрать возможные варианты, чтобы исключить проблему неверного обращения к интерфейсу.

Разберем пример кода на языке 1С:


Попытка
    // Вариант 1: Универсальный
    V7 = Новый COMОбъект("V77.Application");
Исключение
    Попытка
        // Вариант 2: Для SQL-версии
        V7 = Новый COMОбъект("V77S.Application");
    Исключение
        // Вариант 3: Для локальной версии
        V7 = Новый COMОбъект("V77L.Application");
    КонецПопытки;
КонецПопытки;

Иногда система «забывает» конкретный суффикс, но корректно отрабатывает при обращении к универсальному V77.Application. При возникновении сложностей можно использовать примеры кода для инициализации OLE-подключения к 1С 7.7 на современных версиях Windows.

Способ 4: Проверка прав на папки и UAC

Проанализируем ситуацию с правами файловой системы. При работе через COM-объект 1С 7.7 создает временные файлы и обращается к файлам лицензии в своей программной директории. Если у обычного пользователя нет прав на чтение и запись в папку C:\Program Files (x86)\1Cv77\BIN, объект может инициализироваться с ошибкой доступа к интерфейсу.

Выполним следующие шаги:

Способ 5: Настройка DEP (Предотвращение выполнения данных)

В серверных операционных системах, таких как Windows Server 2008, который упоминается в обсуждении, активная политика DEP может блокировать работу 32-битных COM-интерфейсов внутри 64-битных процессов.

Рассмотрим, как добавить исключение:

  1. Откройте Свойства системы -> Дополнительно -> Производительность (Параметры).
  2. Перейдите на вкладку Предотвращение выполнения данных.
  3. Добавьте исполняемые файлы 1cv8.exe и 1cv7s.exe в список исключений или переключите режим на «Включать DEP только для основных служб Windows».

Резюме

Подводя итог, можно сказать, что ошибка 0x80004002 в большинстве случаев лечится настройкой приложения COM+. Это позволяет обойти ограничения безопасности Windows 10 и серверных ОС, не предоставляя пользователю избыточных прав администратора и не отключая системные механизмы защиты. Если же проблема сохраняется, следует внимательно проверить ветку Wow6432Node в реестре и убедиться, что 32-битные компоненты 1С 7.7 зарегистрированы корректно.

← На главную