Разработка и Конфигурация · 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="...".
Коннектор = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "Srvr=""Server1C"";Ref=""TradeBase"";Usr=""Обмен"";Pwd=""secret"";";
Соединение = Коннектор.Connect(СтрокаПодключения);
Запрос = Соединение.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура";
Результат = Запрос.Выполнить().Выбрать();Обратите внимание: объекты целевой базы (запросы, менеджеры справочников) создаются через Соединение.NewObject(...) или через свойства соединения, а не через обычный контекст. Передавать между базами можно только простые типы и сами COM-объекты соединения — нельзя, например, вернуть из вызова результат запроса как готовую таблицу значений текущей базы.
- 1Убедитесь, что на компьютере, где выполняется код, установлена платформа 1С нужной версии и разрядности
- 2Создайте в целевой базе отдельного пользователя с минимально необходимыми правами
- 3Создайте объект: Новый COMОбъект("V83.COMConnector")
- 4Вызовите Connect со строкой подключения к целевой базе
- 5Выполните нужные операции через объект соединения
- 6Завершите работу: обнулите переменные соединения, чтобы сеанс закрылся
- 7Проверьте в консоли кластера, что сеанс завершён и не завис
Требования и ограничения технологии
Главное ограничение — разрядность. Если код выполняется в 64-разрядном сервере 1С, то и COM-коннектор должен быть зарегистрирован 64-разрядной версии той же платформы. Несовпадение разрядности — самая частая причина ошибки «Невозможно создать объект». При обновлении платформы регистрацию коннектора иногда нужно повторять.
Каждое COM-соединение открывает сеанс с целевой базой и занимает лицензию. Если соединения создаются массово (например, в цикле обработки) и не закрываются, можно исчерпать лицензии и заблокировать работу пользователей. Кроме того, версия платформы коннектора должна быть совместима с версией, под которой работает целевая база.
Ещё одно ограничение — производительность. Каждое обращение к свойству или методу через COM — это межпроцессный вызов. Цикл на десять тысяч итераций с обращением к реквизитам объектов через соединение может выполняться в десятки раз дольше, чем аналогичный код внутри базы. Поэтому тяжёлую логику стараются выполнять на стороне целевой базы (через запросы), а через COM передавать только готовые результаты.
Типичные ошибки и их диагностика
Ошибка «-2147221005: Недопустимая строка с указанием класса» почти всегда означает, что COM-объект не зарегистрирован в системе или не совпадает разрядность. Лечится регистрацией коннектора нужной версии или установкой соответствующей платформы.
Ошибки аутентификации при Connect указывают на неверный логин/пароль или на то, что пользователю запрещён вход (например, включена блокировка сеансов при обновлении базы). Ошибки вида «Информационная база не обнаружена» — проблема в строке подключения: неправильный путь, имя сервера или имя базы в кластере.
Как проверить результат
Новый COMОбъект выполняется без исключения
Ошибка «Невозможно создать объект» или «Недопустимая строка с указанием класса»
Connect возвращает объект соединения, доступны метаданные базы
Ошибка аутентификации или «база не обнаружена»
После выполнения кода сеанс в консоли кластера исчезает
Сеанс остаётся активным и держит лицензию
Когда COM не подходит: альтернативы
COM разумно использовать, когда обе базы находятся в одной локальной сети, платформа установлена на машине, где выполняется обмен, а требования к скорости умеренные. Для интеграций через интернет, с мобильными клиентами или с не-1С системами COM не подходит в принципе.
Сравнение вариантов
Подходит для локальных обменов база-база. Ограничения: только Windows, расход лицензии, зависимость от разрядности и версии платформы
Подходит для интеграций с любыми системами и через интернет. Требует публикации на веб-сервере и разработки API
Подходит для регулярной синхронизации типовых данных между базами 1С. Не даёт произвольного доступа к объектам в реальном времени
Подходит для чтения данных из внешних СУБД в интерфейс 1С. Не предназначен для вызова логики другой базы 1С
Если интеграцию планируется развивать — добавлять новые операции, подключать сторонние системы — закладывайте её на HTTP-сервисы сразу. Переписывание работающего COM-обмена на сервисную архитектуру позже обычно обходится дороже, чем изначально правильный выбор.
Как выбрать действие
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-сервисы.