При автоматизации обмена данными между 1С и Microsoft Excel часто используется механизм COM-соединения. Однако программисты нередко сталкиваются с ситуацией, когда корректно написанный макрос на VBA выдает ошибку: «Не установлены компоненты доступа к серверу 1С:Предприятия» (или «Класс не зарегистрирован»). В рамках этой статьи мы подробно разберем причины возникновения этой проблемы и рассмотрим пошаговые методы ее решения, основываясь на практическом опыте участников форума и технических особенностях взаимодействия Windows-приложений.
Для начала проанализируем типовой код на VBA, который инициирует подключение к базе данных 1С. Как правило, он выглядит следующим образом:
Set conn = CreateObject("V83.COMConnector")
Set bd = conn.Connect("Srvr=""Zeus:1687"";Ref=""moto_sup"";Usr=""Логин"";Pwd=""12345""")
Set Запрос = bd.NewObject("Запрос")
Запрос.Текст = "Здесь текст вашего запроса к БД"
В этой конструкции объект V83.COMConnector отвечает за создание «легкого» соединения с сервером 1С. Ошибка на первой же строке CreateObject сигнализирует о том, что операционная система не может найти в реестре сведения о программном идентификаторе (ProgID) или связанной с ним динамической библиотеке comcntr.dll.
Это наиболее распространенная причина. Выясним, почему это происходит. Современные версии Microsoft Office (и Excel в частности) могут быть как 32-битными (x86), так и 64-битными (x64). То же самое касается и платформы 1С:Предприятие.
Важное правило: 32-битное приложение (Excel) может вызывать только 32-битные COM-компоненты. 64-битное приложение — только 64-битные компоненты. Если у вас установлен 32-битный Excel, а платформа 1С установлена только в 64-битном варианте (или наоборот), макрос выдаст ошибку, даже если компонента физически присутствует на диске.
Проанализируем ситуацию пользователя из темы: установка 32-битной версии платформы 1С мгновенно решила проблему. Это подтверждает, что Excel на компьютере был 32-битным, и ему требовалась соответствующая библиотека comcntr.dll, которая поставляется вместе с 32-битным клиентом 1С.
Даже если разрядность совпадает, компонента может быть не зарегистрирована в системе. Рассмотрим, как выполнить регистрацию вручную. Для этого необходимо использовать системную утилиту regsvr32. Разберем шаги:
comcntr.dll. Обычно она находится в папке bin установленной платформы. Например: C:\Program Files\1cv8\8.3.XX.XXXX\bin\.Обратите внимание на разрядность системы при регистрации:
C:\Windows\System32\regsvr32.exe.C:\Windows\SysWOW64\regsvr32.exe.Пример команды для регистрации:
regsvr32 "C:\Program Files (x86)\1cv8\8.3.18.1300\bin\comcntr.dll"
Если ранее была выполнена некорректная регистрация, рекомендуем сначала отменить ее, добавив ключ /u, а затем зарегистрировать заново.
Бывают ситуации, когда невозможно привести Excel и 1С к одной разрядности. В этом случае мы можем настроить «прослойку» через Службы компонентов (DCOM). Это позволит 32-битному Excel обращаться к 64-битной компоненте 1С через системный процесс dllhost.exe.
Рассмотрим кратко этот процесс:
1C_COM_Connector).comcntr.dll.После этой настройки Windows будет сама управлять вызовами компоненты, независимо от разрядности вызывающего приложения.
Посмотрим на строку подключения из примера: Srvr="Zeus:1687". Это означает работу в клиент-серверном варианте. Проанализируем важные нюансы:
comcntr.dll) на локальном компьютере должна максимально соответствовать версии сервера 1С. Большие расхождения в релизах могут приводить к ошибкам соединения.1C:Enterprise 8.3 Remote Connector в настройках DCOM (dcomcnfg).Для стабильной работы макроса важно правильно завершать сеанс 1С, чтобы не занимать лицензии и не оставлять «висячие» процессы в памяти. Выясним, как это сделать правильно. После выполнения всех операций в VBA обязательно освобождайте объекты в обратном порядке:
' Основной блок кода
' ...
' Завершение работы
Set Запрос = Nothing
Set bd = Nothing
Set conn = Nothing
Также помните, что V83.COMConnector не имеет визуального интерфейса и работает быстрее, чем V83.Application. Если вам нужно просто получить данные через запрос, всегда отдавайте предпочтение COMConnector.
Подводя итог: если вы столкнулись с ошибкой доступа к компонентам 1С, первым делом проверьте соответствие разрядности Excel и установленной платформы 1С, а затем убедитесь в корректности регистрации comcntr.dll через regsvr32 от имени администратора. Эти два шага решают проблему в 95% случаев.