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

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

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

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

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

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

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

Как устроен COM-объект и COM-соединение

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

Для соединения двух баз 1С используется объект V83.COMConnector (для платформы 8.3; в 8.2 — V82.COMConnector). Последовательность всегда одинаковая: создаётся коннектор, у него вызывается метод Connect со строкой подключения, а возвращённый объект — это уже «проекция» целевой базы, через которую доступны её менеджеры объектов, запросы и перечисления.

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

Как создать COM-подключение к другой базе 1С

Базовый код подключения к файловой базе выглядит так:

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

СтрокаПодключения = "File=""D:\Bases\Trade"";Usr=""Администратор"";Pwd=""123"";";

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

Номенклатура = Соединение.Справочники.Номенклатура.НайтиПоКоду("000000001");

Для серверной базы строка подключения отличается: вместо File указываются параметры Srvr (имя сервера) и Ref (имя базы в кластере). Формат строки полностью совпадает с тем, что используется в диалоге добавления информационной базы в список.

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

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

Требования и ограничения технологии

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

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

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

Типичные ошибки и их диагностика

Самая частая ошибка — «Ошибка при создании объекта из компоненты» или «Класс не зарегистрирован». Она означает, что COM-компонента нужной версии платформы не установлена или не зарегистрирована на той машине, где выполняется код. Решение — установить компоненту «COM-соединение» из дистрибутива платформы или зарегистрировать её вручную через regsvr32 для файла comcntr.dll.

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

Типичные ошибки
01
Создание нового COM-соединения в цикле на каждую итерацию — катастрофическое падение производительности и утечка сеансов; соединение нужно открывать один раз и переиспользовать
02
Отсутствие обработки исключений вокруг Connect — при недоступности базы обмен падает без понятного сообщения и без записи в журнал
03
Использование COM в регламентном задании без таймаута — зависшее соединение блокирует выполнение задания бессрочно
04
Передача между базами объектов несовместимых версий конфигураций — обращение к несуществующему реквизиту вызывает ошибку времени выполнения

Когда COM стоит заменить на другой способ интеграции

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

Для регулярного промышленного обмена лучше подходят HTTP-сервисы, веб-сервисы (SOAP), механизмы EnterpriseData или планы обмена. Они не зависят от операционной системы, работают через брандмауэры, не держат постоянный сеанс и дают контроль версий форматов данных.

Сравнение способов обмена между базами

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

Подходит для локальной сети и разовых задач; ограничение — только Windows, расход сеанса и лицензии, чувствительность к сбоям сети

HTTP-сервисы

Подходят для регулярной интеграции и разных платформ; требуют доработки сервисов в целевой базе, но не зависят от ОС

Планы обмена / EnterpriseData

Подходят для типовых синхронизаций с гарантией доставки; избыточны для простых разовых выгрузок

Проверка результата и безопасная работа

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

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

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

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

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

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

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

Записанные данные в целевой базе
Норма

Количество и содержимое объектов совпадает с источником

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

Пропуски, дубли или объекты с пустыми реквизитами

Поведение при недоступной базе
Норма

Ошибка перехватывается, пишется в журнал регистрации, обработка завершается

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

Задание зависает или падает без диагностики

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

Итог

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

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

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

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

Нет. Технология COM существует только в Windows, поэтому на Linux-сервере COM-объект создать нельзя. Для кроссплатформенной интеграции используйте HTTP-сервисы, веб-сервисы или файловый обмен.

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

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

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

Это коннекторы разных версий платформы: V82 — для платформы 8.2, V83 — для 8.3. Версия коннектора должна соответствовать версии платформы целевой базы, иначе подключение завершится ошибкой.

Почему возникает ошибка «Класс не зарегистрирован»?

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

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

Да, если модуль серверный, экспортный и доступен для вызова. Через объект соединения обращаются к общим модулям по имени: Соединение.ИмяОбщегоМодуля.ИмяПроцедуры(). Модули с признаком «Вызов сервера» и экспортные процедуры работают, клиентские и привилегированные с интерактивной логикой — нет.

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

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