Администрирование · 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С для доступа к другой. Минимальный код выглядит так:
Попытка
Коннектор = Новый COMОбъект("V83.COMConnector");
Соединение = Коннектор.Connect("File=\"C:\\Bases\\Trade\";Usr=\"Admin\";Pwd=\"123\";");
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;
// Пример чтения данных
Запрос = Соединение.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Номенклатура";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;Обратите внимание: создавать объекты в удалённой базе нужно через Соединение.NewObject("ИмяТипа"), а обращаться к прикладным объектам — напрямую через соединение: Соединение.Справочники.Номенклатура.НайтиПоКоду(...). Перечисления доступны как Соединение.Перечисления.ИмяПеречисления.Значение.
- 1Убедитесь, что на компьютере установлена платформа той же версии, что и у целевой базы
- 2Проверьте регистрацию компонента comcntr.dll
- 3Создайте объект V83.COMConnector в коде
- 4Сформируйте строку подключения с параметрами базы и пользователя
- 5Вызовите метод Connect() и обработайте возможную ошибку
- 6Выполните нужные операции и освободите соединение
Регистрация компонента comcntr.dll
Самая частая причина ошибки «Невозможно создать объект» — незарегистрированный компонент. Это происходит, если платформа установлена без COM-соединения, компонент зарегистрирован от другой версии или регистрация «слетела» после обновления платформы.
Регистрация выполняется командой regsvr32 с правами администратора. Путь к DLL зависит от версии и разрядности платформы, например: regsvr32 "C:\Program Files\1cv8\8.3.22.1750\bin\comcntr.dll". После регистрации перезапустите приложение, которое создаёт соединение.
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С также поддерживает.
Как выбрать механизм интеграции
Типичные ошибки и способы их устранения
Ошибка «-2147221005: Недопустимая строка с указанием класса» означает, что COM-класс не зарегистрирован — регистрируйте comcntr.dll. Ошибка «Информационная база не обнаружена» указывает на неверный путь к файловой базе или неправильные имя сервера и базы в строке подключения.
Ошибки аутентификации возникают из-за неверного логина, пароля или отсутствия у пользователя права на внешнее соединение. Проверьте, что у пользователя в конфигурации включено право «Внешнее соединение» — оно выдаётся отдельно от права интерактивного входа.
Проверка результата и завершение работы
После настройки подключения проверьте его минимальным тестом: выполните простой запрос к любому справочнику и убедитесь, что данные возвращаются. Затем проверьте сценарий записи на одном тестовом объекте, контролируя результат в целевой базе интерактивно.
Как проверить результат
Объект создаётся без исключения
Ошибка «недопустимая строка с указанием класса» — компонент не зарегистрирован
Возвращается объект соединения
Ошибка аутентификации или «база не обнаружена» — проверьте строку подключения и права
Выборка содержит записи
Пустой результат при наличии данных — проверьте текст запроса
Сеанс внешнего соединения закрывается
Сеанс остаётся висеть — соединение не освобождено в коде
По завершении работы присвойте переменным соединения и коннектора значение Неопределено, чтобы сеанс закрылся и лицензия освободилась. Для регламентных обменов добавьте журналирование: фиксируйте время начала, количество обработанных объектов и ошибки — это сильно упрощает сопровождение.
Что важно запомнить
COM-соединение — простой способ программно работать с базой 1С через V83.COMConnector. Ключевые условия успеха: зарегистрированный comcntr.dll нужной версии и разрядности, право «Внешнее соединение» у пользователя, пакетные запросы вместо пообъектного чтения и обязательное освобождение соединения. Для кроссплатформенных интеграций лучше подходят HTTP- и веб-сервисы.
Частые вопросы
Чем COM-соединение отличается от веб-сервиса?
COM работает только в Windows и требует установленной платформы на стороне клиента, зато настраивается без публикации на веб-сервере. Веб-сервис доступен из любой системы по HTTP, но требует публикации и описания интерфейса.
Можно ли подключиться через COM к базе на другом компьютере?
Да, если это клиент-серверная база — укажите сервер и имя базы в строке подключения. Для файловой базы на другом компьютере нужен сетевой доступ к папке с файлом базы, что менее надёжно.
Сколько лицензий расходует одно COM-соединение?
Как правило, одно соединение занимает одну клиентскую лицензию, аналогично обычному сеансу. Точное поведение зависит от типа лицензий и режима их подсчёта на сервере.
Почему после обновления платформы перестало работать соединение?
При обновлении регистрация comcntr.dll может указывать на старую версию. Перерегистрируйте компонент из папки новой версии платформы командой regsvr32 с правами администратора.
Можно ли через COM вызывать процедуры общих модулей удалённой базы?
Напрямую — нет, через соединение доступны только объектные механизмы: запросы, справочники, документы и т.д. Для вызова произвольной логики используйте внешние соединения через Automation-сервер (V83.Application) или опубликуйте HTTP-сервис.
Безопасно ли хранить пароль в строке подключения в коде?
Нет, пароль в открытом виде в коде — риск утечки. Храните параметры в защищённых настройках, используйте учётную запись с минимально необходимыми правами и ограничьте доступ к обработке, выполняющей обмен.