К статье
Практический материал

Администрирование · 12 мин

Как зарегистрировать COM-объект для работы с 1С

Как зарегистрировать COM-объект (DLL, V83.COMConnector, внешние компоненты) для работы с 1С: regsvr32, разрядность, типовые ошибки и их решение.

COM-объекты в 1С используются для подключения внешних компонентов, обмена данными между базами через COM-соединитель (V83.COMConnector), интеграции с офисными приложениями и сторонними системами. Прежде чем объект станет доступен в коде через Новый COMОбъект(...), его библиотеку необходимо зарегистрировать в операционной системе Windows.

Регистрация сводится к записи сведений о библиотеке (DLL или OCX) в системный реестр: Windows сохраняет путь к файлу, его ProgID и CLSID, после чего любое приложение, включая платформу 1С, может создать экземпляр объекта по имени. Выполняется регистрация штатной утилитой regsvr32, но на практике большинство проблем связано не с самой командой, а с разрядностью, правами доступа и версией библиотеки.

Ниже разобран полный порядок действий: от подготовки файла до проверки работоспособности объекта из кода 1С, а также типовые ошибки и способы их устранения.

Что понадобится перед регистрацией

Для успешной регистрации нужны три условия: сам файл библиотеки (DLL или OCX), права администратора на компьютере и понимание разрядности компонентов. Без прав администратора regsvr32 не сможет внести записи в системные ветки реестра, и команда завершится ошибкой.

Файл библиотеки следует разместить в постоянном каталоге, из которого его не удалят и не переместят: после регистрации Windows хранит абсолютный путь, и при перемещении файла объект перестанет создаваться. Подходящие варианты — каталог установки 1С, Program Files или отдельная папка компонентов. Рабочий стол и временные папки для этого не подходят.

Отдельно проверьте источник библиотеки. Регистрация DLL, полученной из недоверенного источника, фактически означает запуск чужого кода с высокими привилегиями внутри процессов 1С. Используйте компоненты от известных поставщиков и проверяйте цифровую подпись файла, если она заявлена.

Определяем разрядность: ключевой шаг

Главная причина неудач при регистрации COM-объектов для 1С — несовпадение разрядности. Правило простое: разрядность DLL должна совпадать с разрядностью того процесса, который будет её загружать. Если COM-объект создаётся на клиенте — ориентируйтесь на разрядность клиентского приложения 1С; если на сервере 1С — на разрядность сервера (rphost), который в современных установках обычно 64-разрядный.

На 64-разрядной Windows существуют две версии regsvr32: 64-разрядная в C:\Windows\System32 и 32-разрядная в C:\Windows\SysWOW64. Для регистрации 32-разрядной библиотеки нужно явно вызывать regsvr32 из SysWOW64, иначе получите ошибку о несовместимости.

Узнать разрядность самой DLL можно через средства разработки (например, dumpbin /headers) или по документации поставщика. Если документации нет, а объект должен работать на сервере 1С, почти всегда требуется 64-разрядная версия библиотеки.

Ошибка «модуль загружен, но точка входа не найдена»Файл не является регистрируемым COM-сервером

Проверить, что библиотека экспортирует DllRegisterServer; возможно, это обычная DLL, а не COM-компонент

Ошибка 0x80070005Недостаточно прав

Запустить командную строку от имени администратора

«Класс не зарегистрирован» при создании объекта в 1СНеверная разрядность или регистрация не выполнена

Сверить разрядность DLL и процесса 1С, повторить regsvr32 нужной версией утилиты

Регистрация через regsvr32: пошаговый порядок

Стандартная регистрация выполняется из командной строки, запущенной с повышенными привилегиями. Порядок одинаков для собственных библиотек, сторонних компонентов и COM-коннектора 1С.

Порядок действий
  1. 1
    Скопируйте DLL в постоянный каталог, например C:\Components\MyComponent.dll
  2. 2
    Откройте командную строку от имени администратора (Пуск → cmd → «Запуск от имени администратора»)
  3. 3
    Для 64-разрядной DLL выполните: regsvr32 "C:\Components\MyComponent.dll"
  4. 4
    Для 32-разрядной DLL на 64-разрядной Windows выполните: C:\Windows\SysWOW64\regsvr32 "C:\Components\MyComponent.dll"
  5. 5
    Дождитесь диалога «DllRegisterServer ... выполнено успешно»
  6. 6
    Проверьте создание объекта в 1С: Объект = Новый COMОбъект("MyComponent.ProgID")

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

Для снятия регистрации используется ключ /u: regsvr32 /u "путь\к\библиотеке.dll". Это необходимо перед удалением файла или при переустановке компонента в другой каталог — иначе в реестре останутся «мертвые» записи.

cmd
C:\Windows\SysWOW64\regsvr32 "C:\Program Files\1cv8\8.3.22.1750\bin\comcntr.dll"

Регистрация COM-коннектора 1С (V83.COMConnector)

Отдельный частый сценарий — регистрация COM-соединителя, через который внешние приложения и другие базы 1С подключаются к информационной базе. За него отвечает библиотека comcntr.dll, расположенная в каталоге bin конкретной версии платформы.

Команда регистрации: regsvr32 "C:\Program Files\1cv8\<версия>\bin\comcntr.dll". Важный нюанс: при обновлении платформы путь меняется, так как номер версии входит в имя каталога. Если после обновления 1С внешнее подключение перестало работать с ошибкой «Класс не зарегистрирован», почти всегда нужно заново зарегистрировать comcntr.dll из каталога новой версии.

После регистрации подключение из кода выглядит так: создаётся объект Новый COMОбъект("V83.COMConnector"), затем вызывается метод Connect со строкой соединения. Если база серверная, в строке указываются Srvr и Ref; если файловая — File с путём к каталогу базы.

Регистрация внешних компонентов по технологии Native API

Внешние компоненты 1С (сканеры штрихкодов, торговое оборудование, криптография) бывают двух типов: классические COM и компоненты по технологии Native API. Первые регистрируются через regsvr32, как описано выше. Вторые регистрации в Windows не требуют вовсе — они подключаются в 1С методом ПодключитьВнешнююКомпоненту из макета конфигурации или напрямую из файла.

Если компонент поставляется в виде ZIP-архива с манифестом (manifest.xml) и набором DLL под разные платформы — это Native API, и попытка зарегистрировать его через regsvr32 бессмысленна: библиотека не экспортирует DllRegisterServer. Признак такой ситуации — ошибка «точка входа DllRegisterServer не найдена».

Для Native API-компонентов на сервере достаточно поместить файлы в доступный серверу 1С каталог и подключить компоненту программно. Разрядность при этом выбирается автоматически по манифесту, если в архив включены обе версии.

Сравнение вариантов

COM через regsvr32

Классический способ: регистрация в реестре Windows, создание через Новый COMОбъект. Требует прав администратора и совпадения разрядности; подходит для сторонних библиотек и comcntr.dll

Native API

Современная технология внешних компонентов 1С: без регистрации в системе, подключение методом ПодключитьВнешнююКомпоненту. Поддерживает Windows и Linux, предпочтительна для новых разработок

Регистрация через реестр вручную

Внесение записей в HKCR/HKLM вручную или через .reg-файл. Применяется редко, когда regsvr32 недоступен; рискованно при ошибках в CLSID и путях

Проверка результата и диагностика ошибок

Минимальная проверка — создание объекта из кода 1С в тонком или толстом клиенте: Объект = Новый COMОбъект("ProgID.Компоненты"). Если объект создан без исключения, регистрация выполнена корректно для данного процесса. Для проверки без 1С подойдёт PowerShell: New-Object -ComObject "ProgID".

Ошибка «Класс не зарегистрирован» (0x80040154) означает, что в реестре нет записи для указанного ProgID в нужной разрядности. Проверьте: зарегистрирована ли библиотека той версией regsvr32, которая соответствует разрядности процесса 1С; не изменился ли путь к файлу; тот ли ProgID указан в коде.

Ошибка «Отказано в доступе» при создании объекта на сервере обычно связана с правами учётной записи, под которой работает агент сервера 1С (по умолчанию USR1CV8). Этой учётной записи нужны права на чтение и выполнение файла DLL, а в отдельных случаях — настройка DCOM-разрешений через компонент dcomcnfg.

Контрольные точки

Как проверить результат

Создание объекта в 1С
Норма

Новый COMОбъект выполняется без исключения

Тревожный признак

Исключение «Класс не зарегистрирован» или «Ошибка при создании объекта»

Запись в реестре
Норма

ProgID присутствует в HKCR, InprocServer32 указывает на существующий файл

Тревожный признак

Ветка отсутствует или путь ведёт на удалённый файл

Работа на сервере 1С
Норма

Объект создаётся в серверном контексте

Тревожный признак

На клиенте работает, на сервере — ошибка доступа или разрядности

Типичные ошибки
01
Регистрация 32-разрядной DLL системным regsvr32 вместо версии из SysWOW64 — объект недоступен 32-разрядному клиенту
02
Регистрация comcntr.dll один раз и забывание повторить её после обновления платформы — интеграции ломаются после каждого обновления
03
Попытка зарегистрировать Native API-компонент через regsvr32 — ошибка «точка входа не найдена», компонент нужно подключать из 1С
04
Перемещение или удаление DLL после регистрации — в реестре остаётся путь к несуществующему файлу
05
Регистрация под обычным пользователем — ошибка 0x80070005, записи в реестр не попадают

Ограничения и альтернативы

COM-технология работает только под Windows. Если сервер 1С развёрнут на Linux, COM-объекты на нём недоступны в принципе — для интеграций используются Native API-компоненты, веб-сервисы или HTTP-интерфейсы. Это важно учитывать при проектировании обменов: код с Новый COMОбъект на Linux-сервере завершится ошибкой.

Второе ограничение — безопасность и сопровождение. Каждый зарегистрированный COM-объект — это зависимость от конкретного файла по конкретному пути и от разрядности процесса. В долгосрочной перспективе для обмена между базами 1С надёжнее HTTP-сервисы и EnterpriseData, а для оборудования — компоненты Native API из актуальных библиотек подключаемого оборудования.

Маршрут решения

Как выбрать действие

Нужно подключиться к базе 1С из внешнего приложенияЗарегистрируйте comcntr.dll актуальной версии платформы и используйте V83.COMConnector
Компонент поставляется с manifest.xml в ZIP-архивеНе используйте regsvr32 — подключите компоненту методом ПодключитьВнешнююКомпоненту
Объект нужен на сервере 1С под LinuxCOM недоступен — перенесите логику на HTTP-сервисы или Native API
Объект работает на клиенте, но не на сервереПроверьте разрядность DLL и права учётной записи агента сервера 1С
Итог

Что важно запомнить

COM-объект регистрируется командой regsvr32 из командной строки с правами администратора, при этом разрядность библиотеки должна совпадать с разрядностью процесса 1С. Comcntr.dll перерегистрируется после каждого обновления платформы, а Native API-компоненты регистрации в Windows не требуют вовсе.

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

Можно ли зарегистрировать COM-объект без прав администратора?

Штатная регистрация через regsvr32 требует прав администратора, так как записи вносятся в HKEY_LOCAL_MACHINE и HKEY_CLASSES_ROOT. Обходной путь — регистрация на уровне пользователя через ветку HKCU\Software\Classes, но regsvr32 этого не делает сам: потребуется ручное внесение записей или специальные средства. Для серверных сценариев 1С такой вариант обычно неприменим.

Как узнать ProgID зарегистрированного компонента?

ProgID указан в документации поставщика компонента. Если её нет, откройте реестр (regedit) и найдите CLSID библиотеки в HKEY_CLASSES_ROOT\CLSID, а затем посмотрите связанную ветку с читаемым именем вида «Имя.Компонента». Для коннектора 1С ProgID известен: V83.COMConnector.

Почему после обновления платформы 1С перестал работать V83.COMConnector?

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

Работает ли COM-объект в веб-клиенте 1С?

Нет. Веб-клиент выполняется в браузере и не имеет доступа к локальным COM-объектам. Если функциональность нужна в браузере, используйте расширения работы с файлами, внешние компоненты для веб-клиента или переносите вызов на сервер.

Что делать, если regsvr32 сообщает об успехе, но объект не создаётся в 1С?

Чаще всего причина в разрядности: библиотека зарегистрирована как 32-разрядная, а объект создаётся в 64-разрядном серверном процессе (или наоборот). Проверьте разрядность клиента/сервера 1С и повторите регистрацию соответствующей версией regsvr32. Также убедитесь, что в коде указан точный ProgID без опечаток.

Нужно ли регистрировать COM-объект на каждом компьютере пользователей?

Да, если объект создаётся в клиентском контексте: регистрация локальна для каждой машины. Для массового развёртывания используют групповые политики, скрипты установки или пакеты MSI. Если объект вызывается только на сервере 1С, достаточно зарегистрировать его один раз на сервере.