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

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

COM-объекты в 1С: что это и как с ними работать

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

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

На практике COM чаще всего применяют для обмена данными между двумя базами 1С — например, между «Управлением торговлей» и «Бухгалтерией», когда нужно напрямую перенести документы без промежуточных файлов. Также через COM-объект V83.COMConnector внешние программы (скрипты на VBScript, PowerShell, приложения на C#) могут обращаться к базе 1С извне.

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

Что такое COM и как это работает в 1С

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

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

Какие COM-объекты используются в 1С

В практике встречаются два направления применения COM. Первое — подключение к другой базе 1С через V83.COMConnector. Второе — обращение из 1С к произвольным COM-объектам Windows: например, к Excel (Excel.Application), Word, ADODB для прямых запросов к SQL, скриптовым объектам вроде WScript.Shell.

Также существует устаревший вариант V82.COMConnector для платформы 8.2 — он встречается в старых интеграциях. Имя объекта жёстко привязано к версии платформы, поэтому при обновлении платформы внешние скрипты, использующие коннектор, нужно проверять и при необходимости править.

COM-объектНазначениеГде создаётся
V83.COMConnectorСоединение с базой 1С 8.3В 1С, скриптах, внешних приложениях
V82.COMConnectorСоединение с базой 1С 8.2Устаревшие интеграции
Excel.ApplicationЧтение и запись файлов ExcelИз кода 1С
ADODB.ConnectionПрямые запросы к внешним СУБДИз кода 1С

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

Стандартный сценарий: в базе-источнике создаётся объект COMConnector, затем вызывается метод Connect со строкой подключения к целевой базе. Строка подключения для файловой базы выглядит как File="путь_к_базе";Usr="имя";Pwd="пароль", для клиент-серверной — Srvr="сервер";Ref="имя_базы";Usr="...";Pwd="...".

bsl
Коннектор = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "Srvr=""Server1C"";Ref=""TradeBase"";Usr=""Обмен"";Pwd=""secret"";";
Соединение = Коннектор.Connect(СтрокаПодключения);
Запрос = Соединение.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура";
Результат = Запрос.Выполнить().Выбрать();

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

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

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

Главное ограничение — разрядность. Если код выполняется в 64-разрядном сервере 1С, то и COM-коннектор должен быть зарегистрирован 64-разрядной версии той же платформы. Несовпадение разрядности — самая частая причина ошибки «Невозможно создать объект». При обновлении платформы регистрацию коннектора иногда нужно повторять.

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

Ещё одно ограничение — производительность. Каждое обращение к свойству или методу через COM — это межпроцессный вызов. Цикл на десять тысяч итераций с обращением к реквизитам объектов через соединение может выполняться в десятки раз дольше, чем аналогичный код внутри базы. Поэтому тяжёлую логику стараются выполнять на стороне целевой базы (через запросы), а через COM передавать только готовые результаты.

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

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

Ошибки аутентификации при Connect указывают на неверный логин/пароль или на то, что пользователю запрещён вход (например, включена блокировка сеансов при обновлении базы). Ошибки вида «Информационная база не обнаружена» — проблема в строке подключения: неправильный путь, имя сервера или имя базы в кластере.

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

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

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

Новый COMОбъект выполняется без исключения

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

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

Подключение
Норма

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

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

Ошибка аутентификации или «база не обнаружена»

Завершение работы
Норма

После выполнения кода сеанс в консоли кластера исчезает

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

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

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

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

Сравнение вариантов

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

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

HTTP-сервисы 1С

Подходит для интеграций с любыми системами и через интернет. Требует публикации на веб-сервере и разработки API

Планы обмена

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

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

Подходит для чтения данных из внешних СУБД в интерфейс 1С. Не предназначен для вызова логики другой базы 1С

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

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

Как выбрать действие

Обе базы 1С в одной сети, обмен редкий и объёмы небольшиеCOM-соединение — быстрый и рабочий вариант
Нужен обмен через интернет или с не-1С системойHTTP-сервисы или web-сервисы, COM не рассматривать
Требуется регулярная типовая синхронизация справочников и документовПлан обмена или типовая синхронизация через EnterpriseData
Ошибка «Невозможно создать объект» при рабочей ранее интеграцииПроверьте, не обновлялась ли платформа, и перерегистрируйте коннектор нужной разрядности

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

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

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

Занимает ли COM-соединение лицензию 1С?

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

Что делать при ошибке «Невозможно создать объект V83.COMConnector»?

Проверьте три вещи: установлена ли платформа 1С на компьютере, где выполняется код; совпадает ли разрядность платформы и процесса, создающего объект; зарегистрирован ли коннектор. После обновления платформы регистрацию часто нужно выполнить заново.

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

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

Почему обмен через COM работает медленно и как ускорить?

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

Безопасно ли хранить пароль для COM-подключения в коде?

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

Итог

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

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