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

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

Что такое COM-объект 1С и как его использовать

Разбираем, что такое COM-объект в 1С: как работает COM-соединение между базами, регистрация V83.COMConnector, типичные ошибки и способы их устранения.

COM-объект в контексте 1С — это программный компонент, построенный на технологии Microsoft COM (Component Object Model), который позволяет одной программе обращаться к функциям другой. В экосистеме 1С чаще всего под COM-объектом понимают либо COM-соединитель (V83.COMConnector), через который одна база 1С подключается к другой, либо внешние COM-компоненты, которые 1С вызывает для работы со сторонними приложениями — например, с Excel, Word или системами электронного документооборота.

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

Ниже разобрано, какие виды COM-объектов встречаются в 1С, как происходит подключение, какие права и настройки нужны, а также какие ошибки возникают чаще всего и что делать в каждом случае.

Какие COM-объекты встречаются в 1С

В практике администрирования и разработки 1С выделяют три основных сценария использования COM. Первый и самый распространённый — COM-соединение между двумя информационными базами через объект V83.COMConnector. Эта библиотека поставляется вместе с платформой и позволяет из кода одной базы открыть сеанс с другой, читать и записывать данные, вызывать экспортные процедуры общих модулей.

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

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

Как работает COM-соединение между базами

Механика подключения выглядит так: в коде первой базы создаётся объект COMConnector, у него вызывается метод Connect со строкой подключения, и в ответ возвращается объект-соединение, через который доступны прикладные объекты второй базы — справочники, документы, запросы. Строка подключения различается для файлового и серверного режима.

bsl
Соединитель = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "Srvr=\"Server1C\";Ref=\"TradeBase\";Usr=\"Obmen\";Pwd=\"pass\";";
Соединение = Соединитель.Connect(СтрокаПодключения);
НовыйДок = Соединение.Документы.РеализацияТоваровУслуг.СоздатьДокумент();

Для файловой базы строка подключения содержит параметр File с путём к каталогу базы вместо Srvr и Ref. После завершения работы переменную соединения принято явно очищать, присваивая ей Неопределено, — это ускоряет освобождение сеанса на стороне второй базы.

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

Регистрация компоненты и требования к окружению

Чтобы COM-соединитель был доступен системе, библиотека comcntr.dll должна быть зарегистрирована в реестре Windows. При стандартной установке платформы это происходит автоматически, но при ручном копировании дистрибутива или обновлении регистрация может слететь. Тогда при создании объекта возникает ошибка о невозможности создания COM-объекта.

Регистрация COM-соединителя вручную
  1. 1
    Откройте командную строку от имени администратора
  2. 2
    Перейдите в каталог bin установленной платформы нужной версии
  3. 3
    Выполните команду regsvr32 comcntr.dll
  4. 4
    Убедитесь, что появилось сообщение об успешной регистрации
  5. 5
    Перезапустите приложение, которое создаёт COM-объект, и проверьте подключение

Критичный момент — разрядность. 32-битное приложение может загрузить только 32-битную версию comcntr.dll, 64-битное — только 64-битную. Если обмен запускается из 32-битного клиента 1С, а зарегистрирована 64-битная компонента (или наоборот), подключение не создастся. Совпадение должно быть трёхсторонним: разрядность процесса, разрядность зарегистрированной библиотеки и, желательно, версия платформы, совпадающая с версией целевой базы.

Типичные ошибки и их причины

Самая частая ошибка — «Ошибка при создании объекта из компоненты... (Недопустимая строка с указанием класса)». Она означает, что ProgID V83.COMConnector не найден в реестре: библиотека не зарегистрирована, зарегистрирована не той разрядности или процесс не имеет доступа к нужной ветке реестра. Лечится регистрацией comcntr.dll подходящей разрядности от имени администратора.

Вторая группа ошибок связана с самим подключением: «Информационная база не обнаружена», «Ошибка аутентификации», «Различаются версии клиента и сервера». Здесь проверяются строка подключения, логин и пароль, доступность сервера 1С по сети и соответствие версии платформы версии сервера. Третья группа — ошибки прав: пользователь, от имени которого идёт COM-подключение, не имеет прав на чтение или запись нужных объектов во второй базе.

Типичные ошибки при работе с COM
01
Использование учётной записи с полными правами для обмена — при компрометации строки подключения злоумышленник получает полный доступ к базе
02
Отсутствие освобождения соединения в коде — накапливаются зависшие сеансы и расходуются лицензии
03
Запуск обмена под пользователем без прав администратора при незарегистрированной компоненте — регистрация молча не выполняется, ошибка диагностируется долго
04
Игнорирование разрядности — 32-битный процесс не видит 64-битную компоненту и наоборот

Отдельного внимания заслуживает ситуация, когда COM-объект создаётся на сервере 1С внутри серверного вызова. Тогда библиотека должна быть зарегистрирована именно на сервере, а права на неё нужны учётной записи, под которой работает агент сервера 1С (по умолчанию — служебная учётная запись). Это частая причина, когда обмен работает из толстого клиента, но падает в фоновом задании.

Когда COM использовать не стоит: альтернативы

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

Способы интеграции баз 1С

COM-соединение

Подходит для разовых обработок переноса и старых обменов. Требует регистрации компоненты, Windows и совпадения разрядности; расходует лицензию

HTTP-сервисы / REST

Рекомендуемый вариант для новых интеграций: кроссплатформенно, не требует регистрации компонент, легко масштабируется. Требует разработки и публикации сервиса

Web-сервисы (SOAP)

Подходят для интеграции со сторонними системами, ожидающими SOAP. Громоздки, но поддерживаются платформой из коробки

Планы обмена (EnterpriseData)

Типовой механизм синхронизации между конфигурациями 1С через файлы или брокеры сообщений. Не требует прямого подключения к базе

Переход с COM на HTTP-сервисы обычно окупается снижением числа инцидентов: исчезают проблемы регистрации, разрядности и зависших сеансов. Однако для одноразовой выгрузки или внутренней обработки, запускаемой администратором вручную, COM остаётся быстрым и рабочим решением.

Как проверить, что COM-подключение работает корректно

После настройки обмена или регистрации компоненты стоит выполнить контрольную проверку, а не ждать первого регламентного запуска. Минимальный тест — создать COM-объект и подключиться к базе из простой внешней обработки, затем прочитать какой-либо справочник и корректно завершить соединение.

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

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

Создание объекта V83.COMConnector
Норма

Объект создаётся без исключения

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

Ошибка «Недопустимая строка с указанием класса» — компонента не зарегистрирована или не та разрядность

Вызов Connect со строкой подключения
Норма

Возвращается объект соединения, доступны метаданные базы

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

Ошибки аутентификации, «база не обнаружена» или несовпадение версий

Сеансы в консоли кластера после обмена
Норма

Сеанс пользователя обмена закрывается после завершения обработки

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

Сеанс остаётся висеть — соединение не освобождается в коде

Запуск в фоновом задании на сервере
Норма

Обмен отрабатывает так же, как из клиента

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

Падает только на сервере — компонента не зарегистрирована на сервере или нет прав у агента

Если все четыре контрольные точки пройдены, интеграцию можно переводить в регламентный режим. При этом полезно добавить в обмен журналирование: фиксацию времени начала, окончания и текста ошибок. По журналу потом легко отличить проблемы сети от проблем прав и сбоев самой компоненты.

Для учётной записи, под которой идёт COM-обмен, заведите отдельного пользователя с минимально необходимыми правами и запретом интерактивного входа, если это позволяет конфигурация. Так проще отслеживать действия обмена в журнале регистрации и ниже ущерб при утечке строки подключения.
ПЗ
Практическое замечание

FAQ: частые вопросы о COM-объектах 1С

Чем V83.COMConnector отличается от V83.Application?

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

Расходует ли COM-соединение лицензию 1С?

Да. При работе с серверной базой COM-соединение занимает клиентскую лицензию наравне с обычным сеансом пользователя. При файловом режиме действуют ограничения файловой базы на количество одновременных подключений. Поэтому соединение нужно освобождать сразу после завершения операций.

Можно ли использовать COM-соединение на Linux-сервере 1С?

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

Почему обмен работает из клиента, но падает в регламентном задании?

Регламентное задание выполняется на сервере 1С, поэтому comcntr.dll должна быть зарегистрирована именно на сервере, а учётная запись агента сервера должна иметь к ней доступ. Дополнительно проверьте, что разрядность зарегистрированной компоненты совпадает с разрядностью рабочего процесса сервера.

Опасно ли хранить пароль в строке подключения в коде?

Да, это риск: любой, кто получит доступ к коду обработки или внешнего приложения, узнаёт учётные данные. Минимизируйте ущерб: используйте отдельного пользователя с узкими правами, храните пароль в защищённом хранилище настроек, а не в тексте модуля, и ограничьте доступ к самой обработке.

Что выбрать для новой интеграции между двумя базами 1С?

Для постоянной синхронизации — планы обмена с форматом EnterpriseData, для оперативных вызовов — HTTP-сервисы. COM имеет смысл оставлять только для поддержки существующих механизмов или разовых задач переноса данных, когда разработка сервиса неоправданно дорога.

Итог

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

COM-объект 1С — это механизм подключения к другой базе или внешнему приложению через технологию Microsoft COM, чаще всего через V83.COMConnector. Он требует регистрации comcntr.dll нужной разрядности, работает только в Windows и расходует лицензию. Для новых интеграций выбирайте HTTP-сервисы или планы обмена, а COM используйте как поддерживаемыйLegacy-инструмент с обязательным освобождением соединений.