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