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

Автоматизация · 11 мин

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

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

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

Чаще всего COM-коннектор используют для обмена данными между двумя базами 1С — например, между «Управлением торговлей» и «Бухгалтерией», когда типовые планы обмена по какой-то причине не подходят. Вторая частая задача — обращение к базе 1С из внешних скриптов, написанных на VBScript, PowerShell, C# или даже из Excel через VBA.

Важно понимать ограничение: COM — технология Windows, поэтому коннектор работает только в Windows-окружении. Веб-клиент, тонкий клиент под Linux и мобильная платформа его не поддерживают. Кроме того, соединение через COM создаёт полноценный сеанс с базой и расходует клиентскую лицензию, что нужно учитывать при проектировании интеграции.

Как устроен COM-коннектор и что он умеет

Компонента поставляется вместе с платформой 1С и находится в каталоге bin установленной версии — файл comcntr.dll. После регистрации в системе любое приложение может создать объект-коннектор, открыть через него соединение с базой и получить доступ к объектной модели 1С почти так же, как это делает код внутри самой конфигурации.

Через установленное соединение доступны справочники, документы, регистры, запросы, перечисления и экспортируемые процедуры общих модулей. Например, внешний скрипт может найти контрагента по ИНН, создать реализацию товаров или выполнить запрос по остаткам склада и вернуть результат наружу.

При этом есть существенное ограничение: через COM-соединение нельзя работать с интерактивными объектами — формами, диалогами, предупреждениями. Любая попытка вызвать Предупреждение() или открыть форму на стороне соединения приведёт к ошибке. Весь код должен быть «тихим» — только данные и логика.

Когда COM-коннектор оправдан, а когда лучше выбрать другой способ

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

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

Сравнение вариантов интеграции

COM-коннектор

Подходит для обмена между базами 1С в одной сети и Windows-скриптов. Требует регистрации компоненты и совпадения версий платформы, расходует лицензию.

HTTP-сервисы

Универсальный вариант для интеграции с любыми системами, работает через интернет. Требует публикации на веб-сервере и написания кода сервиса.

OData

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

Планы обмена

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

Регистрация компоненты и подготовка к подключению

Перед первым использованием компоненту нужно зарегистрировать в операционной системе. Это делает команда regsvr32, запущенная от имени администратора. Если планируется подключение к 64-разрядному серверу 1С, регистрировать нужно 64-разрядную версию comcntr.dll из соответствующего каталога платформы.

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

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

Как подключиться к базе через COM: пошагово

Подключение выполняется в два этапа: сначала создаётся объект коннектора, затем вызывается его метод Connect со строкой соединения. Строка подключения совпадает по формату с обычной строкой запуска 1С: указывается тип базы (файловая или серверная), путь или имя сервера и базы, пользователь и пароль.

Порядок подключения
  1. 1
    Зарегистрируйте comcntr.dll нужной версии платформы через regsvr32 от имени администратора
  2. 2
    Создайте объект коннектора: в 1С это Новый COMОбъект("V83.COMConnector")
  3. 3
    Сформируйте строку соединения, например: Srvr="Server1";Ref="TradeBase";Usr="Обмен";Pwd="пароль";
  4. 4
    Вызовите метод Connect и сохраните результат в переменную — это объект соединения с базой
  5. 5
    Выполните нужные операции через объект соединения и завершите работу, обнулив переменные

Пример кода на встроенном языке 1С для подключения к серверной базе:

Коннектор = Новый COMОбъект("V83.COMConnector");

СтрокаПодключения = "Srvr=""Server1"";Ref=""TradeBase"";Usr=""Обмен"";Pwd=""secret"";";

Соединение = Коннектор.Connect(СтрокаПодключения);

Запрос = Соединение.NewObject("Запрос");

Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 10 Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура";

Результат = Запрос.Выполнить().Выгрузить();

Для файловой базы строка выглядит иначе: File="C:\Bases\Trade";Usr="Обмен";Pwd="secret";. Учётной записи, под которой идёт подключение, нужно выдать в целевой базе минимально необходимые права — не административные. Также в свойствах пользователя должны быть разрешены внешние соединения.

Типичные сценарии использования

Обмен документами между двумя базами 1С

Самый распространённый сценарий — перенос документов из одной конфигурации в другую с поиском по GUID или по ключевым реквизитам. Через соединение источник читает данные, а приёмник создаёт или обновляет объекты. Ссылки между базами сопоставляют через метод XMLСтрока() для получения GUID ссылки и ПолучитьСсылку() на приёмной стороне.

Вызов из внешних скриптов

Из PowerShell или VBScript коннектор создаётся функцией создания COM-объекта, дальше логика аналогична. Такой приём используют для регламентных задач: проверки доступности базы, запуска обработок, выгрузки справочных данных в файлы для сторонних систем.

Доступ из Excel и других приложений

Через VBA в Excel можно подтянуть в таблицу актуальные остатки или цены прямо из базы 1С. Это удобно для разовых аналитических задач, но для регулярной отчётности лучше настроить типовые отчёты или OData — VBA-скрипты сложно поддерживать и контролировать.

Типичные ошибки и способы их диагностики

Ошибка «Невозможно создать объект» при создании коннектора почти всегда означает, что компонента не зарегистрирована или зарегистрирована другой разрядности. Ошибка на этапе Connect с сообщением об отказе в доступе указывает на неверный логин, пароль или запрет внешних соединений для пользователя.

Типичные ошибки
01
Подключение под администратором — при компрометации скрипта злоумышленник получает полный доступ к базе; создавайте отдельного пользователя с минимальными правами
02
Несовпадение версий comcntr.dll и платформы базы — после обновления платформы обмен падает; перерегистрируйте компоненту нужной версии
03
Попытка вызвать интерактивные методы (Предупреждение, ОткрытьФорму) на стороне соединения — код падает; выносите всю логику в серверные общие модули
04
Неосвобождённые соединения в циклических скриптах — сеансы копятся и исчерпывают лицензии; всегда обнуляйте объект соединения
05
Хранение пароля открытым текстом в скрипте — используйте защищённые хранилища или переменные окружения

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

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

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

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

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

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

Ошибка «Невозможно создать объект» — проверьте регистрацию comcntr.dll

Выполнение Connect
Норма

Возвращён объект соединения, доступны метаданные базы

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

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

Сеансы в консоли кластера
Норма

После завершения скрипта сеанс закрывается

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

Сеансы накапливаются — соединение не освобождается в коде

Ограничения и безопасность

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

При работе с серверной базой коннектор подключается через агент кластера, и разрядность компоненты должна соответствовать разрядности рабочих процессов сервера. Для 64-разрядного сервера 1С нужна 64-разрядная comcntr.dll, иначе соединение не установится.

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

Как выбрать действие

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

Часто задаваемые вопросы

Расходует ли COM-соединение лицензию 1С?

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

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

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

Можно ли использовать COM-коннектор с базой на Linux-сервере?

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

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

Это один и тот же механизм: когда толстый клиент создаёт COMОбъект("V83.COMConnector"), он использует ту же компоненту. Разница только в том, откуда инициируется подключение — из другой базы 1С или из стороннего приложения.

Как передать между базами большой объём данных через COM?

Не перебирайте объекты по одному — это крайне медленно из-за межпроцессных вызовов. Выполняйте на стороне соединения запрос, выгружайте результат в таблицу значений и передавайте её целиком, либо сериализуйте данные через ЗначениеВСтрокуВнутр и передавайте строкой.

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

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

Итог

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

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