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

Разработка и Конфигурация · 12 мин

Что такое COM в 1С и как работает COM-соединение

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

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

Технология работает только в Windows, так как опирается на системный COM-интерфейс. Для подключения используется COM-объект V83.COMConnector (для платформы 8.3), который регистрируется библиотекой comcntr.dll из каталога установки платформы. Через него создаётся «внешнее соединение» — полноценный программный доступ к другой базе.

COM-соединение применяют для обмена данными между базами (например, между «Бухгалтерией» и «Зарплатой и управлением персоналом»), для интеграции 1С с внешними системами, для пакетной обработки данных и для сценариев, где веб-сервисы недоступны или не настроены. Ниже разберём, как это работает на практике, какие есть ограничения и какие ошибки встречаются чаще всего.

Что такое COM-объект и COM-соединение в 1С

COM (Component Object Model) — это стандарт Microsoft, позволяющий одному приложению использовать функциональность другого через заранее описанные интерфейсы. Приложение-источник регистрирует в операционной системе COM-объект, а приложение-потребитель создаёт его экземпляр и вызывает методы.

В 1С COM используется в двух направлениях. Во-первых, сама платформа предоставляет COM-объекты наружу: любое внешнее приложение (скрипт, программа на C#, Delphi, даже Excel через VBA) может подключиться к базе 1С. Во-вторых, из кода 1С можно создавать COM-объекты других программ — например, Excel.Application для выгрузки данных в Excel или V83.COMConnector для подключения к другой базе 1С.

Объект V83.COMConnector и библиотека comcntr.dll

Центральный элемент механизма — COM-объект с программным идентификатором V83.COMConnector. Он предоставляет метод Connect, который принимает строку подключения к базе и возвращает объект внешнего соединения. Через этот объект доступны почти все прикладные возможности базы: менеджеры справочников и документов, запросы, перечисления, общие модули (если они доступны внешнему соединению).

За регистрацию объекта отвечает библиотека comcntr.dll, которая находится в каталоге bin конкретной версии платформы, например C:\Program Files\1cv8\8.3.22.1709\bin\comcntr.dll. Важно: версия библиотеки должна соответствовать версии платформы, с которой работает база, иначе соединение завершится ошибкой несовпадения версий.

Как создать COM-соединение: пример кода

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

Коннектор = Новый COMОбъект("V83.COMConnector");

СтрокаПодключения = "Srvr=""Server1C"";Ref=""TradeBase"";Usr=""Обмен"";Pwd=""12345"";";

Соединение = Коннектор.Connect(СтрокаПодключения);

// Чтение данных из базы-источника

Запрос = Соединение.NewObject("Запрос");

Запрос.Текст = "ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Номенклатура";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить(Выборка.Наименование);

КонецЦикла;

Для файловой базы строка подключения выглядит иначе: File="C:\Bases\Trade";Usr="Обмен";Pwd="12345";. После завершения работы соединение нужно освободить, присвоив переменным значение Неопределено, иначе сеанс на стороне базы-источника может остаться висеть до таймаута.

Порядок создания COM-соединения
  1. 1
    Убедитесь, что на компьютере, где выполняется код, установлена платформа той же версии, что и у базы-источника
  2. 2
    Зарегистрируйте comcntr.dll нужной версии командой regsvr32 от имени администратора
  3. 3
    Создайте в базе-источнике отдельного пользователя с минимально необходимыми правами
  4. 4
    Создайте COMОбъект V83.COMConnector и вызовите Connect со строкой подключения
  5. 5
    Выполните обмен данными и обязательно освободите соединение через Неопределено
  6. 6
    Проверьте в консоли кластера или в мониторе, что сеанс соединения закрылся

Регистрация comcntr.dll и типичные ошибки

Самая частая проблема при работе с COM — ошибка создания объекта с сообщением вида «Ошибка при вызове конструктора (COMОбъект): -2147221164(0x80040154): Класс не зарегистрирован». Она означает, что в системе не зарегистрирована библиотека comcntr.dll или зарегистрирована версия другой разрядности.

Регистрация выполняется из командной строки с правами администратора. Если код выполняется 64-разрядным процессом (например, сервером 1С x64), нужна 64-разрядная библиотека из соответствующего каталога платформы.

cmd
regsvr32 "C:\Program Files\1cv8\8.3.22.1709\bin\comcntr.dll"

Вторая типичная ошибка — «Несовпадение версий клиента и сервера»: она возникает, когда коннектор одной версии платформы пытается подключиться к базе, работающей на другой версии. Лечится регистрацией comcntr.dll той же версии, что и сервер. Третья группа проблем — права доступа: пользователь, указанный в строке подключения, должен существовать в базе-источнике и иметь права на нужные объекты.

Типичные ошибки при работе с COM
01
Регистрация comcntr.dll не той разрядности: 32-битная библиотека не видна 64-битному серверу 1С, и объект не создаётся
02
Использование в строке подключения учётной записи администратора вместо отдельного служебного пользователя — это риск для безопасности и затрудняет аудит
03
Отсутствие освобождения соединения: сеансы копятся, и база-источник начинает тормозить или упирается в лицензии
04
Выполнение COM-подключения на тонком или веб-клиенте без выноса кода на сервер — COM доступен только на стороне, где установлена платформа Windows
05
Попытка передать между базами сложные объекты (таблицы значений, хранилища) напрямую — через COM передаются только сериализуемые типы и объекты базы-источника

Ограничения и особенности COM-соединения

COM-соединение — мощный, но «капризный» механизм, и его ограничения нужно учитывать при проектировании интеграции. Главное ограничение — платформа: COM работает только в Windows. Если сервер 1С развёрнут на Linux, COM-соединение на нём недоступно, и нужно использовать веб-сервисы, HTTP-сервисы или планы обмена.

Другие существенные моменты:

  • COM-соединение не потребляет клиентскую лицензию (в отличие от V83.Application), но создаёт сеанс в кластере, который виден в консоли;
  • код выполняется в контексте безопасности базы-источника: нельзя обойти права пользователя, указанного в строке подключения;
  • производительность ниже, чем у прямого обращения к данным: каждый вызов — это межпроцессное взаимодействие, поэтому массовые операции лучше выполнять пакетами через запросы, а не построчно;
  • нельзя передавать между базами объекты по ссылке: документ базы-источника нельзя «присвоить» в базу-приёмник, данные нужно переносить по реквизитам;
  • при обновлении платформы на сервере нужно перерегистрировать comcntr.dll новой версии, иначе интеграция сломается.

Альтернативы COM: что выбрать для интеграции

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

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

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

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

HTTP-сервисы и веб-сервисы

Кроссплатформенный вариант, работает через сеть и брандмауэры, не зависит от разрядности. Требует публикации на веб-сервере и написания кода сервисов.

Планы обмена (в т.ч. EnterpriseData)

Штатный механизм для регулярной синхронизации между типовыми конфигурациями. Надёжен, с регистрацией изменений, но менее гибок для разовых произвольных выборок.

Внешние источники данных

Подходят для чтения данных из сторонних СУБД (SQL Server, PostgreSQL) в интерфейс 1С, но не для соединения двух баз 1С между собой.

Практическое правило: если обе базы живут в одной сети на Windows и обмен несложный (например, ночная выгрузка остатков), COM — быстрый и рабочий вариант. Если интеграция критична для бизнеса, должна переживать обновления платформы или базы разнесены по разным площадкам, надёжнее построить обмен на HTTP-сервисах или планах обмена.

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

Как выбрать механизм

Обе базы на Windows, обмен разовый или несложный, нужен быстрый результатИспользуйте COM-соединение через V83.COMConnector
Сервер 1С на Linux или планируется переход на LinuxCOM недоступен — проектируйте обмен через HTTP-сервисы
Обмен регулярный между типовыми конфигурациями (БП, ЗУП, УТ)Используйте штатную синхронизацию через планы обмена
Интеграция должна работать через интернет или между разными организациямиПубликуйте HTTP/веб-сервисы с аутентификацией, COM через интернет не используйте

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

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

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

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

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

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

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

Ошибка «Класс не зарегистрирован» — не зарегистрирована или не та разрядность comcntr.dll

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

Возвращён объект соединения

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

Ошибка аутентификации или несовпадения версий — проверьте пользователя, пароль и версию библиотеки

Выполнение тестового запроса
Норма

Запрос возвращает данные из базы-источника

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

Ошибка прав доступа — добавьте пользователю права на читаемый объект

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

Сеанс в консоли кластера закрывается после освобождения соединения

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

Сеанс висит — соединение не освобождено, проверьте присвоение Неопределено

Часто задаваемые вопросы

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

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

Работает ли COM-соединение на Linux-сервере 1С?

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

Можно ли подключиться через COM к базе другой версии платформы?

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

Почему COM-соединение работает медленно при больших выгрузках?

Каждый вызов через COM — это межпроцессное взаимодействие с сериализацией данных. Построчное создание тысяч документов через отдельные вызовы очень медленное. Оптимизация: выбирать данные пакетами одним запросом на стороне источника и переносить их массивами, а не обращаться к базе за каждой записью.

Безопасно ли использовать COM для обмена между базами?

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

Что делать, если после обновления платформы обмен через COM перестал работать?

Почти наверняка причина в том, что в системе зарегистрирована старая версия comcntr.dll. Найдите библиотеку в каталоге bin новой версии платформы, зарегистрируйте её командой regsvr32 от имени администратора (с учётом разрядности процесса, который выполняет подключение) и повторите тест соединения.

Итог

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

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