V83.COMConnector не создаётся: регистрируем comcntr.dll и даём права на сервере

· 9 мин

Содержание

Чтобы зарегистрировать COM-соединение в 1С 8.3, запустите командную строку от имени администратора и выполните regsvr32 "C:\Program Files\1cv8\<версия>\bin\comcntr.dll". Версия библиотеки должна совпадать с версией платформы сервера, к которому вы подключаетесь, а разрядность — с разрядностью процесса, который создаёт объект V83.COMConnector.

Есть три пути. Ручная регистрация через regsvr32 — основной и самый надёжный. Регистрация из кода 1С удобна, когда библиотеку нужно перерегистрировать на многих компьютерах, но требует прав администратора. Настройка приложения COM+ в dcomcnfg нужна не всегда: только когда объект создаётся на сервере 1С и упирается в права или память рабочего процесса.

Как устроено COM-соединение и что именно регистрируется

COM-соединение — это внешнее подключение одной программы к информационной базе 1С без открытия окна клиента. Так работают обмены между базами, выгрузки из Excel, скрипты на VBScript и PowerShell, внешние сервисы на C#.

Всё держится на одной библиотеке:

  • 📁 Файл — comcntr.dll в каталоге bin конкретной версии платформы, например C:\Program Files\1cv8\8.3.24.1548\bin\.
  • 🏷️ Имя класса (ProgID) — V83.COMConnector. Именно его указывают в Новый COMОбъект("V83.COMConnector") или в CreateObject в других языках.
  • 🔗 Запись в реестре — ProgID ссылается на CLSID, а тот хранит путь к файлу comcntr.dll.

Отсюда главный подвох. Если на компьютере стоит несколько версий платформы, V83.COMConnector указывает только на одну из них — на ту, что регистрировали последней. Обновили платформу на сервере, а библиотека в реестре осталась от старой версии — и подключение перестаёт работать.

Разрядность: самая частая причина «класс не зарегистрирован»

32-битный и 64-битный COM-компонент регистрируются в Windows раздельно. Процесс видит только компонент своей разрядности.

Кто создаёт COM-объектКакая comcntr.dll нужнаГде лежит
64-битный сервер 1С (rphost)64-битнаяC:\Program Files\1cv8\<версия>\bin\
32-битный клиент 1С32-битнаяC:\Program Files (x86)\1cv8\<версия>\bin\
64-битный клиент 1С64-битнаяC:\Program Files\1cv8\<версия>\bin\
Excel, Word, скриптРазрядности самой программыСтавится 1С той же разрядности

Разрядность Office смотрят в Файл → Учетная запись → О программе Excel: в первой строке окна написано «32-разрядная» или «64-разрядная».

Ручная регистрация comcntr.dll через командную строку

Ручной способ подходит для любой ситуации: файловая база, клиент-серверная, рабочая станция, сервер.

Регистрация 64-битной библиотеки

  1. Узнайте точную версию платформы сервера. Её видно в консоли администрирования серверов или в окне О программе клиента, подключённого к базе.
  2. Откройте меню «Пуск», найдите «Командная строка», нажмите правой кнопкой и выберите Запуск от имени администратора.
  3. Выполните команду, подставив свою версию:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\comcntr.dll"
  1. Дождитесь окна «Успешное выполнение DllRegisterServer».

Кавычки вокруг пути обязательны: в Program Files есть пробел, без кавычек regsvr32 получит обрезанный путь.

Регистрация 32-битной библиотеки на 64-битной Windows

Для 32-битного компонента используйте 32-битный regsvr32 из папки SysWOW64:

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

Обе версии можно зарегистрировать на одном компьютере одновременно — они друг другу не мешают.

Как снять регистрацию старой версии

Перед регистрацией новой версии полезно снять старую, особенно если путь в реестре указывает на удалённую папку:

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

Ключ /s подавляет окна с сообщениями — удобно в пакетных файлах, но при первой регистрации лучше видеть результат.

Как проверить, какая версия зарегистрирована

Откройте regedit и пройдите по цепочке:

  1. HKEY_CLASSES_ROOT\V83.COMConnector\CLSID — запомните значение по умолчанию (GUID в фигурных скобках).
  2. Для 64-битной: HKEY_CLASSES_ROOT\CLSID\{GUID}\InprocServer32.
  3. Для 32-битной: HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{GUID}\InprocServer32.

Значение по умолчанию в InprocServer32 — полный путь к comcntr.dll. Номер версии в пути должен совпадать с версией сервера.

То же из командной строки:

reg query "HKCR\V83.COMConnector\CLSID"

Регистрация COM-соединения из кода 1С и через 1cv8.exe

Когда библиотеку нужно перерегистрировать на десятке рабочих мест после обновления платформы, проще запустить команду из самой 1С. Функция КаталогПрограммы() возвращает каталог bin текущей версии, поэтому путь не нужно набирать руками.

&НаКлиенте
Процедура ЗарегистрироватьCOMСоединение(Команда)

	ПутьКБиблиотеке = КаталогПрограммы() + "comcntr.dll";
	СтрокаКоманды = СтрШаблон("regsvr32 /s ""%1""", ПутьКБиблиотеке);

	КодВозврата = Неопределено;
	ЗапуститьПриложение(СтрокаКоманды, , Истина, КодВозврата);

	Если КодВозврата = 0 Тогда
		Сообщить("Библиотека зарегистрирована: " + ПутьКБиблиотеке);
	Иначе
		Сообщить("Не удалось зарегистрировать, код возврата: "
			+ Формат(КодВозврата, "ЧГ=0") + ". Запустите 1С от имени администратора.");
	КонецЕсли;

КонецПроцедуры

Что важно знать про этот способ:

  • 🔐 regsvr32 пишет в системную ветку реестра. Если 1С запущена без повышенных прав, регистрация завершится с ошибкой доступа — код возврата будет ненулевым.
  • 🧩 Код на клиенте регистрирует библиотеку той разрядности, какой запущен клиент. Для 64-битного сервера это не поможет.
  • 🖥️ Тот же вызов в процедуре &НаСервере выполнится от имени пользователя службы сервера 1С. Обычно у него нет прав администратора, так что на сервере надёжнее зарегистрировать вручную.

Ключ /RegServer — это другое

У 1cv8.exe есть ключ /RegServer. Он регистрирует саму программу как COM-сервер автоматизации V83.Application, а не comcntr.dll:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" /RegServer

V83.Application запускает полноценный толстый клиент в отдельном процессе. Это тяжелее, чем V83.COMConnector, и нужно редко — например, когда внешней программе требуется интерфейс клиента. Снять регистрацию — ключ /UnregServer.

Настройка прав COM-соединения на сервере через DCOMCNFG

Если COM-объект создаётся в серверной процедуре (обмен между двумя серверными базами, регламентное задание), comcntr.dll загружается внутрь рабочего процесса rphost. При частых подключениях это иногда даёт утечки памяти и ошибки доступа. Распространённый приём администраторов — вынести компонент в отдельное приложение COM+. Тогда он работает в собственном процессе dllhost.exe от имени заданного пользователя.

Настройку делайте вне рабочего времени: при перерегистрации компонента прервутся текущие обмены, использующие COM-соединение.

Создание приложения COM+

  1. Нажмите Win + R, введите dcomcnfg и нажмите Enter. Откроется «Службы компонентов».
  2. Раскройте Службы компонентов → Компьютеры → Мой компьютер → Приложения COM+.
  3. Правой кнопкой по Приложения COM+ → Создать → Приложение.
  4. Выберите «Создать пустое приложение», задайте имя, например V83COMConnector, тип — «Серверное приложение».
  5. На шаге удостоверения выберите «Указанный пользователь» и укажите учётную запись, от которой работает служба сервера 1С (или отдельную служебную).
  6. Завершите мастер.

Добавление компонента и снятие проверки доступа

  1. Раскройте созданное приложение, правой кнопкой по папке Компоненты → Создать → Компонент.
  2. Выберите «Установка новых компонентов» и укажите comcntr.dll из каталога bin нужной версии платформы.
  3. Откройте свойства приложения, вкладку Безопасность, и снимите флажок «Принудительная проверка доступа для этого приложения».
  4. Нажмите «ОК» и перезапустите приложение: правой кнопкой → Завершить работу. При следующем вызове оно стартует заново.

После обновления платформы компонент в приложении COM+ остаётся от старой версии. Удалите его из папки Компоненты и добавьте comcntr.dll новой версии — иначе подключение упадёт на несовпадении версий.

Проверка COM-подключения к информационной базе

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

&НаСервереБезКонтекста
Функция ПроверитьПодключение()

	Коннектор = Новый COMОбъект("V83.COMConnector");
	СтрокаСоединения = "Srvr=""srv1c"";Ref=""buh_test"";Usr=""Обмен"";Pwd=""пароль"";";
	Соединение = Коннектор.Connect(СтрокаСоединения);

	Возврат "Подключено, сервер ответил: " + Соединение.ИмяКомпьютера();

КонецФункции

Для файловой базы вместо Srvr и Ref указывают каталог: File=""D:\Bases\Buh"";Usr=""Обмен"";Pwd=""пароль"";.

Через объект Соединение доступны глобальные функции и общие модули целевой базы, у которых в свойствах включён флажок «Внешнее соединение». Для проверки подойдёт любой простой вызов: важен сам факт ответа, а не результат.

Когда работа закончена, присвойте переменной Соединение значение Неопределено. Сеанс в целевой базе закроется, и лицензия освободится сразу, а не по таймауту.

Что ещё нужно для успешного подключения, кроме регистрации:

  • 👤 Пользователь в целевой базе с ролью, где включено право «Внешнее соединение». Без него подключение отклоняется даже с верным паролем.
  • 🔢 Совпадение версии comcntr.dll с версией сервера целевой базы.
  • 🌐 Доступ по сети к агенту сервера (порт 1540), менеджеру кластера (1541) и диапазону портов рабочих процессов, заданному в свойствах рабочего сервера.
  • 🔑 Свободная клиентская лицензия: внешнее соединение занимает её так же, как обычный сеанс.

Для обменов заведите отдельного пользователя вроде «Обмен» с минимальными правами. В журнале регистрации сразу видно, какие действия выполнил обмен, а не человек.

COM-соединение в толстом, тонком и веб-клиенте

Конструктор Новый COMОбъект работает только в Windows и только там, где установлена и зарегистрирована библиотека.

Где выполняется кодРаботает ли COMОбъектГде регистрировать comcntr.dll
Сервер 1С (&НаСервере) на WindowsДаНа сервере, 64 бит для 64-битного сервера
Тонкий клиент на Windows (&НаКлиенте)ДаНа каждом рабочем месте
Толстый клиент на WindowsДаНа каждом рабочем месте
Веб-клиент в браузереНет—
Сервер 1С на LinuxНет, COM — технология Windows—

Практический вывод: выполняйте COM-подключение на сервере. Тогда библиотеку достаточно зарегистрировать один раз, а код работает одинаково из тонкого клиента , веб-клиента и регламентных заданий.

Ещё одно ограничение — COM-объект нельзя передать с сервера на клиент и обратно. Он не сериализуется, поэтому создавайте его и работайте с ним в одном контексте, а наружу возвращайте обычные значения: строки, числа, структуры.

Если сервер 1С работает на Linux, COM-соединение недоступно. Для связи между базами там используют HTTP-сервисы, веб-сервисы или стандартный механизм обмена через файлы.

Ошибки при регистрации и вызове COM-соединения

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

Порядок диагностики, который экономит время:

  1. Выполните reg query "HKCR\V83.COMConnector\CLSID". Пусто — библиотека не зарегистрирована вообще.
  2. По GUID найдите путь в InprocServer32 нужной ветки (64 или 32 бит). Сравните номер версии с версией сервера.
  3. Проверьте подключение тем же кодом из клиента на этом компьютере. Работает с клиента, но не с сервера — дело в правах пользователя службы или в разрядности на сервере.
  4. Ошибка возникает только после нескольких часов работы обмена — это признак того, что компонент стоит вынести в приложение COM+.

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

Нужно ли регистрировать comcntr.dll после каждого обновления платформы?
Да, если вы подключаетесь к серверу новой версии. Установщик регистрирует библиотеку, но при нескольких установленных версиях в реестре может остаться не та. После обновления сверьте путь в реестре с версией сервера.
Можно ли подключиться через COM к базе в облаке 1С:Фреш?
Нет. COM-соединение требует прямого сетевого доступа к серверу 1С или к каталогу файловой базы. Для облачных баз используют HTTP-сервисы и OData.
Чем V83.COMConnector отличается от V83.Application?
COMConnector загружает библиотеку в процесс вызывающей программы и не показывает интерфейс. Application запускает отдельный процесс клиента 1С. Первый быстрее и расходует меньше памяти, второй нужен редко.
Как подключиться к базе 1С из Excel через COM?
Поставьте платформу 1С той же разрядности, что и Office, зарегистрируйте её comcntr.dll и в VBA создайте объект через CreateObject(“V83.COMConnector”), затем вызовите Connect со строкой соединения.
Сколько лицензий занимает COM-соединение?
Одну клиентскую лицензию на каждое активное соединение. Закрывайте соединение после обмена, присвоив переменной значение Неопределено, иначе лицензия будет занята до завершения сеанса.