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

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

COM-объект в 1С 8: что это и как его использовать

Что такое COM-объект в 1С 8: V83.COMConnector, COMОбъект(), подключение баз, ошибки COM, 32/64 бита и практические примеры кода.

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

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

Типовые сценарии применения: обмен данными между двумя базами 1С без настройки планов обмена, выгрузка отчётов в Excel, интеграция с самописными программами на C# или VBScript, вызов 1С из внешних скриптов регламентных заданий. При этом у COM есть существенные ограничения — он работает только под Windows и создаёт нагрузку на сервер, о чём подробно сказано ниже.

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

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

В 1С доступ к COM-объектам реализован через встроенный тип COMОбъект. При создании такого объекта платформа обращается к Windows, та находит зарегистрированный компонент и запускает его (или подключается к уже работающему экземпляру). Все вызовы методов и обращения к свойствам проходят через механизм маршалинга COM, что делает их относительно медленными по сравнению с обычным кодом 1С.

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

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

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

bsl
Соединитель = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "Srvr=\"Server1C\";Ref=\"TradeBase\";Usr=\"Администратор\";Pwd=\"пароль\";";
Соединение = Соединитель.Connect(СтрокаПодключения);
Контрагенты = Соединение.Справочники.Контрагенты;

Строка подключения различается для серверного и файлового варианта. Для сервера 1С указываются параметры Srvr (имя сервера) и Ref (имя базы в кластере). Для файловой базы — параметр File с полным путём к каталогу базы. Логин и пароль передаются параметрами Usr и Pwd; если пользователь не указан, выполняется попытка входа под текущим пользователем.

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

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

Обращение к внешним программам из 1С

Второй класс задач — управление внешними приложениями. Классический пример — выгрузка данных в Excel: создаётся объект Excel.Application, открывается книга, заполняются ячейки, файл сохраняется. Аналогично работают Word.Application, Outlook.Application и другие программы, предоставляющие COM-интерфейс.

Кроме офисных приложений через COM подключаются драйверы торгового оборудования, криптографические библиотеки и самописные компоненты. Любая DLL, зарегистрированная как COM-сервер, доступна из кода 1С через Новый COMОбъект("Имя.Класса").

bsl
Попытка
    Excel = Новый COMОбъект("Excel.Application");
Исключение
    Сообщить("Excel не установлен или COM-класс не зарегистрирован: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;
Excel.Visible = Ложь;
Книга = Excel.Workbooks.Add();
Лист = Книга.Worksheets(1);
Лист.Cells(1, 1).Value = "Номенклатура";

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

Где выполняется COM-код: клиент или сервер

COM-объект создаётся на том компьютере, где выполняется код. Если процедура с директивой &НаКлиенте создаёт COMОбъект, компонент ищется на компьютере пользователя. Если код выполняется на сервере (&НаСервере), COM-компонент должен быть установлен и зарегистрирован именно на сервере 1С — а это частая причина ошибок «класс не зарегистрирован».

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

Типичные ошибки и способы их устранения

Наиболее частая ошибка — «Класс не зарегистрирован» (0x80040154). Она означает, что COM-компонент не найден в реестре: либо платформа/приложение не установлены на этом компьютере, либо зарегистрирована версия другой разрядности. Лечится установкой нужного ПО или регистрацией через regsvr32 от имени администратора.

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

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

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

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

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

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

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

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

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

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

Исключение с текстом про аутентификацию или невозможность найти базу

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

После обнуления переменных процесс внешнего приложения исчезает из диспетчера задач

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

Процессы EXCEL.EXE / 1cv8.exe накапливаются после каждого запуска

Альтернативы COM и когда от него отказаться

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

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

COM (V83.COMConnector)

Быстро настроить между базами 1С под Windows; не работает на Linux, нагружает сервер, требует совместимости версий

HTTP-сервисы

Кроссплатформенно, подходит для внешних систем; требует разработки и публикации сервиса на веб-сервере

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

Надёжный типовой обмен с очередями и регистрацией изменений; сложнее в первоначальной настройке

Файловый обмен (CSV, XML, JSON)

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

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

Итог

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

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

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

Работает ли COM-объект в 1С на Linux-сервере?

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

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

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

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

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

Как передать пароль к базе, не храня его в коде?

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

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

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

Что делать, если после обмена в диспетчере задач остаются процессы 1cv8 или EXCEL?

Это признак незакрытых COM-объектов. Убедитесь, что после работы вызываются методы завершения (Quit у офисных приложений), переменным присваивается Неопределено, а код обёрнут в Попытка/Исключение с освобождением объектов и в ветке ошибки. Зависшие процессы можно снять вручную, но устранять нужно причину в коде.