Администрирование · 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-разрядная версия библиотеки.
Проверить, что библиотека экспортирует DllRegisterServer; возможно, это обычная DLL, а не COM-компонент
Запустить командную строку от имени администратора
Сверить разрядность DLL и процесса 1С, повторить regsvr32 нужной версией утилиты
Регистрация через regsvr32: пошаговый порядок
Стандартная регистрация выполняется из командной строки, запущенной с повышенными привилегиями. Порядок одинаков для собственных библиотек, сторонних компонентов и COM-коннектора 1С.
- 1Скопируйте DLL в постоянный каталог, например C:\Components\MyComponent.dll
- 2Откройте командную строку от имени администратора (Пуск → cmd → «Запуск от имени администратора»)
- 3Для 64-разрядной DLL выполните: regsvr32 "C:\Components\MyComponent.dll"
- 4Для 32-разрядной DLL на 64-разрядной Windows выполните: C:\Windows\SysWOW64\regsvr32 "C:\Components\MyComponent.dll"
- 5Дождитесь диалога «DllRegisterServer ... выполнено успешно»
- 6Проверьте создание объекта в 1С: Объект = Новый COMОбъект("MyComponent.ProgID")
Если путь к файлу содержит пробелы, кавычки обязательны — без них regsvr32 воспримет часть пути как отдельный аргумент и выдаст ошибку. Для тихой регистрации без диалоговых окон (удобно в скриптах установки) добавьте ключ /s.
Для снятия регистрации используется ключ /u: regsvr32 /u "путь\к\библиотеке.dll". Это необходимо перед удалением файла или при переустановке компонента в другой каталог — иначе в реестре останутся «мертвые» записи.
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С каталог и подключить компоненту программно. Разрядность при этом выбирается автоматически по манифесту, если в архив включены обе версии.
Сравнение вариантов
Классический способ: регистрация в реестре Windows, создание через Новый COMОбъект. Требует прав администратора и совпадения разрядности; подходит для сторонних библиотек и comcntr.dll
Современная технология внешних компонентов 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.
Как проверить результат
Новый COMОбъект выполняется без исключения
Исключение «Класс не зарегистрирован» или «Ошибка при создании объекта»
ProgID присутствует в HKCR, InprocServer32 указывает на существующий файл
Ветка отсутствует или путь ведёт на удалённый файл
Объект создаётся в серверном контексте
На клиенте работает, на сервере — ошибка доступа или разрядности
Ограничения и альтернативы
COM-технология работает только под Windows. Если сервер 1С развёрнут на Linux, COM-объекты на нём недоступны в принципе — для интеграций используются Native API-компоненты, веб-сервисы или HTTP-интерфейсы. Это важно учитывать при проектировании обменов: код с Новый COMОбъект на Linux-сервере завершится ошибкой.
Второе ограничение — безопасность и сопровождение. Каждый зарегистрированный COM-объект — это зависимость от конкретного файла по конкретному пути и от разрядности процесса. В долгосрочной перспективе для обмена между базами 1С надёжнее HTTP-сервисы и EnterpriseData, а для оборудования — компоненты Native API из актуальных библиотек подключаемого оборудования.
Как выбрать действие
Что важно запомнить
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С, достаточно зарегистрировать его один раз на сервере.