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

Администрирование · 10 мин

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

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

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

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

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

Как устроено COM-соединение и какие объекты используются

При установке платформы 1С в системе регистрируется COM-компонент comcntr.dll. Именно он предоставляет объект-коннектор. Имя объекта зависит от версии платформы: для 8.3 это V83.COMConnector, для 8.2 — V82.COMConnector, для 8.1 — V81.COMConnector. Если на компьютере установлены несколько версий платформы, важно, чтобы зарегистрирована была та, которая соответствует версии сервера или файловой базы.

Работа строится в два этапа. Сначала создаётся коннектор, затем через его метод Connect() устанавливается соединение с конкретной базой по строке подключения. Возвращённый объект — это полноценный доступ к базе: через него доступны менеджеры справочников, документов, запросы, перечисления и другие прикладные объекты.

Строка подключения для файловой базы выглядит так: File="C:\Bases\Trade";Usr="Администратор";Pwd="пароль";. Для клиент-серверного варианта: Srvr="Server1";Ref="TradeBase";Usr="Администратор";Pwd="пароль";. Параметры указываются через точку с запятой, регистр имён параметров не важен.

Как подключиться к базе из кода 1С

Чаще всего COM-соединение создают из одной базы 1С для доступа к другой. Минимальный код выглядит так:

bsl
Попытка
	Коннектор = Новый COMОбъект("V83.COMConnector");
	Соединение = Коннектор.Connect("File=\"C:\\Bases\\Trade\";Usr=\"Admin\";Pwd=\"123\";");
Исключение
	Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;

// Пример чтения данных
Запрос = Соединение.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Номенклатура";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
	Сообщить(Выборка.Наименование);
КонецЦикла;

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

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

Регистрация компонента comcntr.dll

Самая частая причина ошибки «Невозможно создать объект» — незарегистрированный компонент. Это происходит, если платформа установлена без COM-соединения, компонент зарегистрирован от другой версии или регистрация «слетела» после обновления платформы.

Регистрация выполняется командой regsvr32 с правами администратора. Путь к DLL зависит от версии и разрядности платформы, например: regsvr32 "C:\Program Files\1cv8\8.3.22.1750\bin\comcntr.dll". После регистрации перезапустите приложение, которое создаёт соединение.

bash
regsvr32 "C:\Program Files\1cv8\8.3.22.1750\bin\comcntr.dll"

Файловый и клиент-серверный режимы: особенности

В файловом режиме COM-соединение открывает базу напрямую, как отдельный сеанс. Это значит, что компьютер, на котором выполняется код, должен иметь доступ к файлу базы по сети или локально. Если база открыта другими пользователями монопольно или выполняется обновление конфигурации, подключение завершится ошибкой.

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

Сравнение режимов

Файловая база

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

Клиент-серверная база

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

Ограничения, лицензии и производительность

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

Производительность COM — его слабое место. Каждый вызов метода через границу COM имеет накладные расходы, поэтому перебор тысяч объектов по одному работает медленно. Правильный подход — выбирать данные пакетно через запрос на стороне удалённой базы и обрабатывать результат выборкой, а не дёргать каждый объект отдельным обращением.

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

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

Как выбрать механизм интеграции

Обмен между двумя базами 1С в одной Windows-инфраструктуре, объёмы умеренныеИспользуйте COM-соединение — быстрее всего в настройке
Интеграция с внешней системой не на 1С или не на WindowsПубликуйте HTTP- или веб-сервисы на стороне 1С
Нужны большие объёмы данных регулярноРассмотрите обмен через файлы, планы обмена или EnterpriseData
Требуется доступ из веб-приложений к чтению данныхПодойдёт стандартный интерфейс OData

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

Ошибка «-2147221005: Недопустимая строка с указанием класса» означает, что COM-класс не зарегистрирован — регистрируйте comcntr.dll. Ошибка «Информационная база не обнаружена» указывает на неверный путь к файловой базе или неправильные имя сервера и базы в строке подключения.

Ошибки аутентификации возникают из-за неверного логина, пароля или отсутствия у пользователя права на внешнее соединение. Проверьте, что у пользователя в конфигурации включено право «Внешнее соединение» — оно выдаётся отдельно от права интерактивного входа.

Типичные ошибки
01
Зарегистрирован comcntr.dll другой версии платформы — соединение падает или подключается не туда; перерегистрируйте нужную версию
02
Чтение объектов по одному вместо запроса — обмен на тысячах позиций занимает часы; используйте пакетные запросы
03
Не освобождается соединение после работы — сеанс висит на сервере и держит лицензию; обнуляйте переменные после завершения
04
У пользователя нет права «Внешнее соединение» — ошибка доступа при корректном пароле; включите право в роли
05
Игнорирование разрядности — 64-битный компонент не загружается из 32-битного процесса

Проверка результата и завершение работы

После настройки подключения проверьте его минимальным тестом: выполните простой запрос к любому справочнику и убедитесь, что данные возвращаются. Затем проверьте сценарий записи на одном тестовом объекте, контролируя результат в целевой базе интерактивно.

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

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

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

Объект создаётся без исключения

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

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

Вызов Connect()
Норма

Возвращается объект соединения

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

Ошибка аутентификации или «база не обнаружена» — проверьте строку подключения и права

Запрос к справочнику
Норма

Выборка содержит записи

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

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

Сеансы после завершения
Норма

Сеанс внешнего соединения закрывается

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

Сеанс остаётся висеть — соединение не освобождено в коде

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

Итог

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

COM-соединение — простой способ программно работать с базой 1С через V83.COMConnector. Ключевые условия успеха: зарегистрированный comcntr.dll нужной версии и разрядности, право «Внешнее соединение» у пользователя, пакетные запросы вместо пообъектного чтения и обязательное освобождение соединения. Для кроссплатформенных интеграций лучше подходят HTTP- и веб-сервисы.

Частые вопросы

Чем COM-соединение отличается от веб-сервиса?

COM работает только в Windows и требует установленной платформы на стороне клиента, зато настраивается без публикации на веб-сервере. Веб-сервис доступен из любой системы по HTTP, но требует публикации и описания интерфейса.

Можно ли подключиться через COM к базе на другом компьютере?

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

Сколько лицензий расходует одно COM-соединение?

Как правило, одно соединение занимает одну клиентскую лицензию, аналогично обычному сеансу. Точное поведение зависит от типа лицензий и режима их подсчёта на сервере.

Почему после обновления платформы перестало работать соединение?

При обновлении регистрация comcntr.dll может указывать на старую версию. Перерегистрируйте компонент из папки новой версии платформы командой regsvr32 с правами администратора.

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

Напрямую — нет, через соединение доступны только объектные механизмы: запросы, справочники, документы и т.д. Для вызова произвольной логики используйте внешние соединения через Automation-сервер (V83.Application) или опубликуйте HTTP-сервис.

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

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