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

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

Что такое COM-объект в 1С 8.3 и как с ним работать

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

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

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

Несмотря на появление HTTP-сервисов, OData и веб-сервисов, COM-подключение остаётся востребованным: оно простое в настройке, не требует публикации сервисов и позволяет напрямую читать и изменять данные другой базы. Рассмотрим, как это работает и где подводные камни.

Как устроен COM-объект и что он делает в 1С

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

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

Важно понимать различие двух ProgID: V83.ComConnector используется для подключения к базе, а V83.Application запускает полноценный экземпляр приложения 1С с интерфейсом. Для обмена данными между базами практически всегда применяется первый вариант — он легче и не требует интерактивного сеанса.

Как подключиться к другой базе 1С через V83.COMConnector

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

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

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

База = Коннектор.Connect(СтрокаСоединения);

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

Запрос = База.NewObject("Запрос");

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

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

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

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

КонецЦикла;

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

По завершении работы объект следует явно освободить, присвоив переменной значение Неопределено. Иначе соединение может «висеть» до завершения сеанса, удерживая лицензию и блокируя базу.

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

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

Во-вторых, разрядность имеет значение. 64-разрядный сервер 1С не может загрузить 32-разрядный COM-компонент и наоборот. Если код выполняется на сервере 1С x64, а коннектор зарегистрирован только в 32-разрядной версии, подключение завершится ошибкой.

В-третьих, COM работает только в Windows и только в толстом или тонком клиенте под Windows, либо на Windows-сервере. Веб-клиент, мобильная платформа и Linux-окружение этот механизм не поддерживают.

Обращение к внешним приложениям: Excel и Word

Второй распространённый сценарий — создание COM-объектов офисных приложений для выгрузки и загрузки данных. Классический пример — чтение прайса из Excel:

Excel = Новый COMОбъект("Excel.Application");

Книга = Excel.Workbooks.Open("D:\Data\price.xlsx");

Лист = Книга.Worksheets(1);

Сообщить(Лист.Cells(1, 1).Value);

Книга.Close(0);

Excel.Quit();

Excel = Неопределено;

Здесь критично завершать работу корректно: закрыть книгу, вызвать Quit() и обнулить переменную. Если оборвать выполнение по ошибке, процесс EXCEL.EXE останется в памяти и будет удерживать файл. После нескольких таких запусков на сервере накапливаются «зависшие» процессы, отъедающие память.

Типичные ошибки при работе с COM-объектами

Самая частая ошибка — «Невозможно создать объект» при вызове Новый COMОбъект. Причины: компонент не зарегистрирован, несовпадение разрядности или ошибка в имени ProgID (например, V82 вместо V83). Регистрация коннектора выполняется командой:

regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\comcntr.dll"

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

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

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

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

Сравнение способов интеграции

COM (V83.COMConnector)

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

HTTP-сервисы 1С

Универсальный вариант для обмена между любыми системами, включая Linux и веб-клиентов. Требует публикации на веб-сервере и разработки API.

OData

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

Планы обмена

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

Если обмен разовый или внутренний, а обе базы находятся в одной сети Windows — COM остаётся самым быстрым решением. Если интеграция внешняя, долгосрочная или требует работы через интернет — выбирайте HTTP-сервисы.

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

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

Обе базы 1С в одной локальной сети Windows и обмен несложныйИспользуйте V83.COMConnector — минимум настройки
Код выполняется на Linux-сервере или в веб-клиентеCOM недоступен — публикуйте HTTP-сервис или используйте OData
Нужен регулярный обмен документами между типовыми конфигурациямиНастройте план обмена вместо самописного COM-кода
Ошибка «Невозможно создать объект»Проверьте регистрацию comcntr.dll и совпадение разрядности

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

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

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

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

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

Новый COMОбъект("V83.COMConnector") выполняется без исключения

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

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

Установка соединения
Норма

Connect возвращает объект базы без ошибок

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

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

Чтение данных
Норма

Запрос возвращает те же записи, что и в интерфейсе базы

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

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

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

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

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

В консоли кластера висят активные сеансы после завершения обмена

Для отладки полезно оборачивать подключение в попытку-исключение и записывать текст ошибки в журнал регистрации — это сильно упрощает поиск причины сбоев в регламентных заданиях, где ошибка иначе теряется.

Итог

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

COM-объект в 1С 8.3 — это механизм интеграции через Windows COM: V83.COMConnector для связи баз 1С и объекты вроде Excel.Application для офисных файлов. Работает только в Windows, требует регистрации компонента и совпадения разрядности. Объекты нужно освобождать явно, а для новых долгосрочных интеграций предпочтительнее HTTP-сервисы.

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

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

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

Можно ли использовать COM-объект в веб-клиенте 1С?

Нет. Веб-клиент выполняется в браузере и не имеет доступа к локальным COM-компонентам. Если интеграция нужна пользователям веб-клиента, логику обмена следует перенести на сервер 1С (Windows) или реализовать через HTTP-сервисы.

Почему возникает ошибка «Невозможно создать объект COM»?

Основные причины: компонент не зарегистрирован в системе (решается регистрацией comcntr.dll через regsvr32), несовпадение разрядности 32/64 бита между процессом и компонентом, либо опечатка в имени ProgID. Также проверьте, что код не выполняется на Linux-сервере, где COM недоступен.

Безопасно ли передавать пароль в строке соединения?

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

Что делать, если после обмена остаются зависшие сеансы?

Зависшие сеансы — признак того, что COM-объект не был освобождён. Убедитесь, что переменной соединения присваивается Неопределено, включая ветки обработки ошибок. Аварийно завершённые сеансы можно снять через консоль кластера серверов 1С.

Работает ли COM-подключение между базами разных версий платформы?

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