Разработка и Конфигурация · 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, который устанавливается вместе с платформой и регистрируется в системе. Через него создаётся соединение, а затем из объекта соединения доступны все прикладные объекты удалённой базы: справочники, документы, запросы.
Соединитель = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "Srvr=\"Server1C\";Ref=\"TradeBase\";Usr=\"Администратор\";Pwd=\"пароль\";";
Соединение = Соединитель.Connect(СтрокаПодключения);
Контрагенты = Соединение.Справочники.Контрагенты;Строка подключения различается для серверного и файлового варианта. Для сервера 1С указываются параметры Srvr (имя сервера) и Ref (имя базы в кластере). Для файловой базы — параметр File с полным путём к каталогу базы. Логин и пароль передаются параметрами Usr и Pwd; если пользователь не указан, выполняется попытка входа под текущим пользователем.
После установки соединения с удалённой базой можно работать почти как с текущей: создавать документы, выполнять запросы через Соединение.NewObject("Запрос"), читать справочники. Ограничение — через COM нельзя выполнить произвольный код в удалённой базе напрямую, доступны только объектные операции и метод EvaluateExpression у соединителя в ограниченном виде.
- 1Убедитесь, что на компьютере, где выполняется код, установлена платформа 1С той же или совместимой версии
- 2Зарегистрируйте компонент V83.COMConnector командой regsvr32 или установкой платформы
- 3Создайте объект: Новый COMОбъект("V83.COMConnector")
- 4Сформируйте строку подключения (Srvr/Ref для сервера или File для файловой базы)
- 5Вызовите метод Connect и проверьте, что исключение не возникло
- 6Выполните нужные операции и освободите соединение, присвоив переменным Неопределено
Обращение к внешним программам из 1С
Второй класс задач — управление внешними приложениями. Классический пример — выгрузка данных в Excel: создаётся объект Excel.Application, открывается книга, заполняются ячейки, файл сохраняется. Аналогично работают Word.Application, Outlook.Application и другие программы, предоставляющие COM-интерфейс.
Кроме офисных приложений через COM подключаются драйверы торгового оборудования, криптографические библиотеки и самописные компоненты. Любая DLL, зарегистрированная как COM-сервер, доступна из кода 1С через Новый COMОбъект("Имя.Класса").
Попытка
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 копятся, память сервера растёт.
Как проверить результат
Новый COMОбъект() отрабатывает без исключения
Ошибка «класс не зарегистрирован» — компонент не установлен или другая разрядность
Connect возвращает объект соединения, доступны Соединение.Справочники
Исключение с текстом про аутентификацию или невозможность найти базу
После обнуления переменных процесс внешнего приложения исчезает из диспетчера задач
Процессы EXCEL.EXE / 1cv8.exe накапливаются после каждого запуска
Альтернативы COM и когда от него отказаться
COM — не единственный и не всегда лучший способ интеграции. Для обмена между базами 1С часто удобнее HTTP-сервисы, web-сервисы или планы обмена: они работают на Linux, не требуют регистрации компонентов и лучше масштабируются. Для выгрузки в Excel вместо COM можно формировать табличный документ и сохранять его в формате XLSX штатными средствами платформы.
Сравнение вариантов интеграции
Быстро настроить между базами 1С под Windows; не работает на Linux, нагружает сервер, требует совместимости версий
Кроссплатформенно, подходит для внешних систем; требует разработки и публикации сервиса на веб-сервере
Надёжный типовой обмен с очередями и регистрацией изменений; сложнее в первоначальной настройке
Простейший вариант без постоянного соединения; нет контроля целостности и актуальности данных
Выбирайте 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 у офисных приложений), переменным присваивается Неопределено, а код обёрнут в Попытка/Исключение с освобождением объектов и в ветке ошибки. Зависшие процессы можно снять вручную, но устранять нужно причину в коде.