Разработка и Конфигурация · 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Убедитесь, что на машине, откуда выполняется код, зарегистрирована COM-компонента нужной версии платформы
- 2Создайте объект V83.COMConnector через Новый COMОбъект
- 3Сформируйте строку подключения с типом базы, пользователем и паролем
- 4Вызовите метод Connect и обработайте возможное исключение
- 5Выполните нужные операции с объектами целевой базы
- 6Освободите соединение: присвойте переменной Неопределено и завершите работу
После успешного Connect через объект соединения доступны почти те же возможности, что и в коде самой базы: запросы, создание и запись документов, вызов экспортных процедур общих модулей. Не доступны интерактивные действия, предопределённые обработчики интерфейса и всё, что требует клиентского приложения.
Требования и ограничения технологии
COM работает только под Windows. Если сервер 1С развёрнут на Linux, COM-соединение с серверной стороны невозможно — это одно из главных ограничений при выборе способа интеграции. На клиенте под Windows COM доступен и в толстом, и в тонком клиенте (при выполнении кода на клиенте), но чаще соединение создают на сервере в фоновом задании.
Критично совпадение разрядности: 64-разрядный процесс не может загрузить 32-разрядную COM-компоненту и наоборот. Если COM-объект создаётся на сервере 1С, регистрировать компоненту нужно той же разрядности, что и сервер, и под учётной записью, от имени которой работает агент сервера.
Ещё ограничения, о которых часто забывают: COM-соединение потребляет отдельный сеанс и лицензию на целевой базе, при сетевых сбоях соединение «зависает» без автоматического восстановления, а передача больших объёмов данных по одному объекту работает заметно медленнее пакетных механизмов обмена.
Типичные ошибки и их диагностика
Самая частая ошибка — «Ошибка при создании объекта из компоненты» или «Класс не зарегистрирован». Она означает, что COM-компонента нужной версии платформы не установлена или не зарегистрирована на той машине, где выполняется код. Решение — установить компоненту «COM-соединение» из дистрибутива платформы или зарегистрировать её вручную через regsvr32 для файла comcntr.dll.
Вторая группа ошибок — отказ в подключении: неверный пользователь или пароль, база заблокирована, превышено число соединений. Третья группа — ошибки уже внутри целевой базы: исключения при записи объектов, нарушение прав доступа, блокировки данных. Их текст приходит через механизм ИнформацияОбОшибке и требует анализа логики целевой базы.
Когда COM стоит заменить на другой способ интеграции
COM-соединение оправдано для разовых выгрузок, обслуживания, административных обработок и обменов внутри одной локальной сети между базами на Windows. Это самый быстрый способ «дотянуться» до чужой базы без настройки дополнительной инфраструктуры.
Для регулярного промышленного обмена лучше подходят HTTP-сервисы, веб-сервисы (SOAP), механизмы EnterpriseData или планы обмена. Они не зависят от операционной системы, работают через брандмауэры, не держат постоянный сеанс и дают контроль версий форматов данных.
Сравнение способов обмена между базами
Подходит для локальной сети и разовых задач; ограничение — только Windows, расход сеанса и лицензии, чувствительность к сбоям сети
Подходят для регулярной интеграции и разных платформ; требуют доработки сервисов в целевой базе, но не зависят от ОС
Подходят для типовых синхронизаций с гарантией доставки; избыточны для простых разовых выгрузок
Проверка результата и безопасная работа
После настройки обмена через 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 не имеет встроенного таймаута восстановления. Практические меры: запускать обмен в фоновом задании с контролем времени выполнения, дробить передачу на порции, фиксировать прогресс в журнале и предусмотреть принудительное завершение и повторный запуск задания.