Как зарегистрировать COM-соединитель 1С в Windows

· 8 мин

Содержание

COM-соединитель 1С — это библиотека comcntr.dll из каталога bin установленной платформы. Регистрируют её одной командой: regsvr32 от имени администратора. После этого в системе появляется COM-класс V83.COMConnector, через который внешняя программа подключается к информационной базе.

Главная тонкость — разрядность. Соединитель должен совпадать по битности с тем процессом, который его вызывает: 32-разрядное приложение работает только с 32-разрядной comcntr.dll, 64-разрядное — с 64-разрядной. Перепутали разрядность — получите ошибку 0x80040154 «класс не зарегистрирован», даже если регистрация прошла успешно.

Ниже — где найти файл, как его зарегистрировать двумя способами, как настроить права и DCOM для запуска из службы и как разобрать типичные ошибки.

Что делает COM-соединитель и когда он нужен

V83.COMConnector создаёт внешнее соединение с базой 1С из стороннего кода — без запуска толстого или тонкого клиента . Это лёгкое подключение: оно отдаёт доступ к объектам базы (справочники, документы, регистры, вызов методов общих модулей), но не показывает формы и не открывает интерфейс.

Соединитель регистрируют, когда нужно:

  • 🔁 связать 1С с внешней программой на C#, Python, PHP, VBScript;
  • 🌐 поднять веб-сервис или обработчик, который обращается к базе из IIS;
  • ⏱ запускать регламентные операции по расписанию из планировщика Windows;
  • 🔗 организовать обмен данными между двумя базами 1С через промежуточный скрипт.

Для 8.3 класс называется V83.COMConnector, для платформы 8.2 — V82.COMConnector. Дальше всё про актуальную версию 8.3. Если вам нужно именно соединение 8.2, подставляйте V82 и файл из каталога версии 8.2 — порядок действий тот же.

Не путайте соединитель с автоматизацией через V83.Application (внешнее управление толстым клиентом) — это другой объект, он запускает полноценный сеанс и работает медленнее.

Со стороны внешней программы работа всегда строится по одной схеме: создать объект V83.COMConnector, вызвать у него метод Connect со строкой подключения, получить объект базы и дальше обращаться к её справочникам, документам и общим модулям. Поэтому регистрация соединителя — обязательный первый шаг: пока COM-класс не прописан в реестре, строка CreateObject("V83.COMConnector") падает с ошибкой «класс не зарегистрирован», и до подключения дело не доходит.

Где лежит comcntr.dll и какую разрядность выбрать

Файл находится в каталоге bin конкретной версии платформы:

C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll

Здесь 8.3.XX.XXXX — номер установленного релиза платформы. Если на машине несколько версий, берите ту, под которой реально работает ваша база, — версия соединителя должна быть совместима с версией сервера.

Разрядность определяет путь установки:

Разрядность платформыТипичный каталог
64-разряднаяC:\Program Files\1cv8\...\bin
32-разряднаяC:\Program Files (x86)\1cv8\...\bin

Разрядность соединителя обязана совпадать с разрядностью вызывающего процесса, а не операционной системы. Если скрипт или пул приложений IIS работает в 32 битах, регистрировать нужно 32-разрядную comcntr.dll, даже на 64-битной Windows. Это самая частая причина ошибки «класс не зарегистрирован».

Как узнать точный путь, если версий много: откройте Пуск → правый клик по ярлыку «1С:Предприятие» → Расположение файла. Вы попадёте в нужный каталог bin, там и лежит comcntr.dll.

Регистрация через командную строку (regsvr32)

Стандартный способ — утилита Windows regsvr32. Её обязательно запускать с правами администратора, иначе запись в реестр не пройдёт.

  1. Нажмите Пуск, наберите cmd, правый клик → Запуск от имени администратора.
  2. Выполните команду с полным путём к библиотеке в кавычках:
regsvr32 "C:\Program Files\1cv8\8.3.21.1644\bin\comcntr.dll"
  1. При успехе появится окно: DllRegisterServer в ... выполнено успешно. Нажмите ОК.

Подставьте свой номер релиза вместо 8.3.21.1644.

Теперь про разрядность на уровне самой команды. В 64-битной Windows есть две копии regsvr32:

  • C:\Windows\System32\regsvr32.exe — регистрирует 64-разрядные библиотеки;
  • C:\Windows\SysWOW64\regsvr32.exe — регистрирует 32-разрядные.

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

C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.21.1644\bin\comcntr.dll"

Если cmd запущен без прав администратора, регистрация завершится ошибкой доступа к реестру либо пройдёт только для текущего пользователя. Всегда запускайте консоль от администратора.

Чтобы снять регистрацию (например, перед переходом на другую версию), добавьте ключ /u:

regsvr32 /u "C:\Program Files\1cv8\8.3.21.1644\bin\comcntr.dll"

Если регистрацию нужно встроить в установочный скрипт и сделать без всплывающих окон, добавьте ключ /s (silent) — утилита отработает молча, а результат можно проверить по коду возврата:

regsvr32 /s "C:\Program Files\1cv8\8.3.21.1644\bin\comcntr.dll"

Автоматическая регистрация при установке платформы

Второй способ не требует командной строки вообще. Соединитель можно зарегистрировать прямо во время установки или изменения состава платформы.

Запустите установщик 1С (или Панель управления → Программы и компоненты → выберите «1С:Предприятие» → Изменить). На шаге выбора компонентов включите пункт, отвечающий за доступ к COM-соединению — в составе платформы он помечен как компонент для внешнего соединения. Установщик сам пропишет comcntr.dll в реестр нужной разрядности.

Этот путь удобен, когда:

  • ✅ платформу разворачивают заново и хочется сразу получить рабочий соединитель;
  • ✅ на машине обычный пользователь без опыта работы с regsvr32;
  • ✅ нужно, чтобы регистрация обновлялась автоматически при смене релиза через то же средство установки.

При обновлении платформы на новый релиз старая запись в реестре остаётся, но ссылается на удалённый каталог. Если внешнее подключение перестало работать после обновления — перерегистрируйте comcntr.dll из каталога нового релиза командой regsvr32.

Настройка прав доступа и DCOM

Если соединитель вызывается из обычного приложения под вашей учётной записью, дополнительные настройки обычно не нужны — хватает регистрации. Права выходят на первый план, когда подключение идёт из службы: пула приложений IIS, задания планировщика или компонента COM+.

Проверьте два уровня доступа.

Права на каталоги. Учётная запись, под которой работает служба (например, пользователь пула IIS или системная учётка планировщика), должна иметь право на чтение каталога bin платформы и доступ к каталогу информационной базы (для файловой базы — полный доступ к папке базы).

Права COM через dcomcnfg. Откройте Пуск → dcomcnfg → Службы компонентов → Компьютеры → Мой компьютер. В свойствах Мой компьютер на вкладке Безопасность COM задаются права по умолчанию на запуск, активацию и доступ. Добавьте сюда учётную запись службы, если при вызове соединителя из-под неё возникает «Отказано в доступе».

V83.COMConnector — внутренний (in-process) сервер: он загружается в процесс вызывающей программы, а не в отдельный. Отдельного приложения в списке Настройка DCOM для него, как правило, нет. Поэтому права настраивают на уровне COM-безопасности компьютера и учётной записи службы, а не через карточку конкретного DCOM-приложения.

Для сценария «1С из IIS» чаще всего достаточно: задать для пула приложений учётную запись с правами на каталоги 1С и базу, затем выдать этой учётке права запуска и доступа COM. Менять настройки DCOM всего компьютера без необходимости не стоит — это влияет на другие приложения.

Ещё один типичный источник «Отказано в доступе» — несовпадение разрядности пула IIS и соединителя. Для 32-разрядного пула (параметр «Разрешены 32-разрядные приложения» включён) регистрируйте 32-разрядную comcntr.dll через SysWOW64\regsvr32.exe. Если пул 64-разрядный — соединитель тоже должен быть 64-разрядным.

Диагностика ошибок регистрации

Разберём ошибки, которые встречаются при регистрации и первом подключении. Для каждой — короткая причина и что проверить.

Диагностика: выберите симптом

Отдельно про антивирус и контроль учётных записей: иногда защитное ПО блокирует запись COM-класса в реестр. Если regsvr32 рапортует об успехе, а подключение всё равно падает на «класс не зарегистрирован», временно отключите защиту и повторите регистрацию от администратора.

Проверка работоспособности соединения

После регистрации убедитесь, что класс создаётся и подключается к базе. Самый быстрый тест — короткий скрипт VBScript, он есть в любой Windows и не требует среды разработки.

Создайте файл test.vbs с таким содержимым (подставьте свой путь к базе):

Set Connector = CreateObject("V83.COMConnector")
Set Base = Connector.Connect("File=""C:\bases\buh"";Usr=""Администратор"";Pwd=""""")
WScript.Echo "Подключение успешно: " & Base.Метаданные.Имя

Запустите двойным кликом. Если появилось имя конфигурации — соединитель зарегистрирован и работает. Строка CreateObject("V83.COMConnector") сработала без ошибки «класс не зарегистрирован» — значит, разрядность и реестр в порядке.

Для серверной базы строка подключения выглядит иначе — через адрес сервера и имя базы:

Set Base = Connector.Connect("Srvr=""srv-1c"";Ref=""buh"";Usr=""Администратор"";Pwd=""""")

Если CreateObject падает, а regsvr32 отчитался об успехе, почти всегда дело в разрядности: cscript.exe по умолчанию 64-разрядный. Запустите тест 32-разрядным интерпретатором (C:\Windows\SysWOW64\cscript.exe test.vbs), чтобы проверить 32-разрядный соединитель.

Контрольный список перед тем, как считать задачу закрытой:

Проверка регистрации COM-соединителя
Выполнено: 0 / 5

Частые вопросы

Нужны ли права администратора для регистрации?
Да. regsvr32 пишет COM-класс в системную ветку реестра, для этого командную строку запускают от имени администратора. Без этого регистрация либо не пройдёт, либо коснётся только текущего пользователя.
Можно ли держать на машине соединители от нескольких версий платформы?
Физически файлы разных версий лежат в своих каталогах, но в реестре активен тот, что зарегистрирован последним под данной разрядностью. Если переключаетесь между версиями, перерегистрируйте comcntr.dll из нужного каталога перед работой.
Чем отличается V83.COMConnector от V83.Application?
COMConnector создаёт лёгкое внешнее соединение без интерфейса — быстрее и экономнее по памяти. V83.Application запускает полноценный сеанс толстого клиента с формами. Для обмена данными и фоновых задач используют именно соединитель.
Почему после обновления платформы соединение перестало работать?
Старая запись в реестре ссылается на каталог удалённого релиза. Зарегистрируйте comcntr.dll из каталога нового релиза командой regsvr32 от администратора.
Как снять регистрацию соединителя?
Выполните ту же команду с ключом /u: regsvr32 /u "путь\comcntr.dll" из консоли администратора. Это удалит COM-класс из реестра.