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

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

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

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

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

Наиболее частый сценарий — подключение одной базы 1С к другой через объект V83.COMConnector. Такой способ используется для обмена данными между конфигурациями, когда веб-сервисы или HTTP-интерфейсы не настроены или недоступны. Второй популярный сценарий — работа с офисными приложениями: Excel, Word, Outlook через их COM-интерфейсы.

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

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

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

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

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

V83.COMConnector — подключение к другой базе 1С

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

Типовой код подключения к файловой базе выглядит так:

1c
Коннектор = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "File=\"D:\\Bases\\Trade\";Usr=\"Администратор\";Pwd=\"123\";";
Соединение = Коннектор.Connect(СтрокаПодключения);
Запрос = Соединение.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура";

Для серверной базы строка подключения имеет вид Srvr="ИмяСервера";Ref="ИмяБазы";Usr="...";Pwd="...";. После успешного вызова Connect возвращается объект соединения, через который создаются запросы, объекты данных и вызываются методы удалённой базы.

Компонент должен быть зарегистрирован в системе. При установке платформы это происходит автоматически, но при ручном развёртывании или на сервере без полной установки компонент регистрируют командой regsvr32 "C:\Program Files\1cv8\<версия>\bin\comcntr.dll" с правами администратора.

Работа с Excel и Word через COM

Второй массовый сценарий — обращение к Microsoft Office. Объект Excel.Application позволяет программно открыть книгу, заполнить ячейки, применить форматирование и сохранить файл. Аналогично Word.Application используется для формирования документов по шаблону, а Outlook.Application — для отправки писем.

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

Для серверных сценариев Microsoft официально не рекомендует автоматизацию Office через COM: приложения Office рассчитаны на интерактивную работу и могут показывать модальные диалоги, которые на сервере без пользовательского сеанса просто зависнут. Более надёжная альтернатива — формирование файлов через табличные документы 1С с сохранением в XLSX или через библиотеки работы с OpenXML.

Ограничения и типичные проблемы

Главные ограничения технологии: работа только под Windows, зависимость от разрядности процесса, требование регистрации компонента и заметные накладные расходы на каждый вызов. Отдельная проблема — разрядность: 64-разрядный сервер 1С не может загрузить 32-разрядный COM-компонент в свой процесс, и наоборот. Если после обновления платформы подключение перестало работать, первым делом проверяют соответствие разрядности.

Ещё одно ограничение V83.COMConnector — версия компонента должна совпадать с версией платформы целевой базы, иначе подключение завершится ошибкой несовместимости. На одном компьютере может быть зарегистрирован только один экземпляр comcntr.dll за раз, что создаёт конфликты при наличии нескольких версий платформы.

Типичные ошибки
01
Не закрыто соединение или приложение: процессы Excel и COMConnector копятся в памяти до перезагрузки сервера
02
Передача данных по одной строке в цикле через COM: обмен на 10 000 записей занимает часы вместо минут
03
Пароль к базе хранится открытым текстом в коде общего модуля: его видит любой разработчик и он попадает в выгрузку конфигурации
04
COM-вызов выполняется на клиенте, а компонент зарегистрирован только на сервере: код падает с ошибкой создания объекта

Когда COM использовать не стоит

COM-интеграцию стоит рассматривать как запасной вариант. Современные альтернативы — HTTP-сервисы и веб-сервисы 1С, планы обмена, EnterpriseData, внешние источники данных. Они не привязаны к Windows, работают через брандмауэры, масштабируются и не требуют регистрации компонентов.

Способы связи двух баз 1С

V83.COMConnector

Быстро внедрить, полный доступ к объектам базы. Только Windows, только в одной сети, зависит от версии платформы

HTTP/веб-сервисы

Кроссплатформенно, работает через интернет, управляемый интерфейс API. Требует разработки и публикации сервиса

Планы обмена

Штатный механизм с регистрацией изменений и очередями. Сложнее настройка, ориентирован на регулярную синхронизацию

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

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

Диагностику начинают с проверки регистрации компонента: достаточно выполнить в консоли 1С или внешней обработке создание объекта и посмотреть на ошибку. Сообщение «Класс не зарегистрирован» означает отсутствие записи в реестре — нужна регистрация comcntr.dll. Ошибка «Несовместимая версия» указывает на конфликт версий платформы.

Проверка COM-подключения к базе
  1. 1
    Убедитесь, что comcntr.dll нужной версии зарегистрирована: regsvr32 с правами администратора
  2. 2
    Проверьте разрядность: 64-битный сервер 1С требует 64-битной регистрации компонента
  3. 3
    Выполните тестовое подключение с явной строкой соединения и обработкой исключения
  4. 4
    Проверьте права пользователя, указанного в строке подключения, на целевую базу
  5. 5
    После работы убедитесь в диспетчере задач, что лишние процессы не остались

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

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

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

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

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

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

Ошибка "Класс не зарегистрирован" или "-2147221005"

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

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

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

Ошибка аутентификации или несовместимости версий

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

После сеанса в диспетчере задач нет лишних процессов

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

Накапливаются EXCEL.EXE или зависшие соединения

FAQ

Почему возникает ошибка «Класс не зарегистрирован» при создании COMОбъект?

Компонент не зарегистрирован в Windows или зарегистрирован не той разрядности. Выполните regsvr32 для comcntr.dll с правами администратора и убедитесь, что разрядность компонента совпадает с разрядностью процесса 1С, который его вызывает.

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

Нет. COM — технология Windows, на Linux она недоступна. Для кроссплатформенной интеграции используйте HTTP-сервисы, веб-сервисы или обмен через файлы и очереди сообщений.

Чем отличается V83.COMConnector от внешнего соединения через WS?

COMConnector работает только в локальной сети Windows и даёт прямой доступ к объектам базы. WS-подключение идёт через веб-сервер по SOAP, работает через интернет и не зависит от разрядности, но требует публикации базы и описания веб-сервиса.

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

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

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

Каждый вызов метода COM — межпроцессное взаимодействие с большими накладными расходами. Читайте данные пакетами через запрос на стороне удалённой базы и передавайте результат целиком, а не перебирайте записи по одной через COM-вызовы.

Итог

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

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