При организации обмена данными между разными поколениями систем 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) могло получить к ним доступ без повышения привилегий до уровня администратора.
Рассмотрим основные способы решения этой задачи, начиная от простых настроек прав и заканчивая конфигурацией системных служб компонентов.
Этот метод считается самым надежным и профессиональным. Мы создадим специальное приложение в службах компонентов Windows, которое будет запускать 32-битную «семерку» в отдельном процессе dllhost.exe под определенной учетной записью. Разберем этот процесс по шагам:
1C77_COM. Установим переключатель в положение Серверное приложение.comcntr.dll или конкретными CLSID семерки).После этой настройки система перестанет требовать запуск основной программы от имени администратора, так как права будут делегированы на уровне службы компонентов. Для решения подобных задач взаимодействия разрядностей можно использовать методику настройки COM-объекта 1С 7.7 через службу COM+.
Иногда ошибка «Интерфейс не поддерживается» возникает из-за того, что записи в реестре о 32-битных интерфейсах отсутствуют в специальной ветке для совместимости. Проанализируем состояние реестра. На 64-битных ОС записи о COM-объектах должны дублироваться в ветке HKEY_CLASSES_ROOT\Wow6432Node\CLSID.
Выясним причину: если вы устанавливали 1С 7.7 простым копированием папки BIN, необходимые ключи реестра не создались. Выполните следующие действия:
cd "C:\Program Files (x86)\1Cv77\BIN").1cv7s.exe /regserver (или 1cv7.exe /regserver в зависимости от версии).Если автоматическая регистрация не помогла, необходимо вручную проверить наличие параметра InprocHandler32 в ветке интерфейса в реестре. Он должен ссылаться на системную библиотеку ole32.dll. Ошибка часто кроется в том, что путь к ole32.dll прописан некорректно для контекста обычного пользователя.
Посмотрим на пример кода инициализации 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.
Проанализируем ситуацию с правами файловой системы. При работе через COM-объект 1С 7.7 создает временные файлы и обращается к файлам лицензии в своей программной директории. Если у обычного пользователя нет прав на чтение и запись в папку C:\Program Files (x86)\1Cv77\BIN, объект может инициализироваться с ошибкой доступа к интерфейсу.
Выполним следующие шаги:
В серверных операционных системах, таких как Windows Server 2008, который упоминается в обсуждении, активная политика DEP может блокировать работу 32-битных COM-интерфейсов внутри 64-битных процессов.
Рассмотрим, как добавить исключение:
1cv8.exe и 1cv7s.exe в список исключений или переключите режим на «Включать DEP только для основных служб Windows».Подводя итог, можно сказать, что ошибка 0x80004002 в большинстве случаев лечится настройкой приложения COM+. Это позволяет обойти ограничения безопасности Windows 10 и серверных ОС, не предоставляя пользователю избыточных прав администратора и не отключая системные механизмы защиты. Если же проблема сохраняется, следует внимательно проверить ветку Wow6432Node в реестре и убедиться, что 32-битные компоненты 1С 7.7 зарегистрированы корректно.