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

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

COM-объекты 1С: что это такое и как их использовать

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

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

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

Чаще всего COM-соединение используют для обмена данными между двумя базами 1С (например, выгрузка документов из УТ в БП), для интеграции с внешними системами на Windows (скрипты PowerShell, VBScript, приложения на .NET) и для пакетной обработки данных, когда нужно выполнить операции без участия пользователя.

Что такое COM и какие COM-объекты есть у 1С

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

Платформа 1С регистрирует в системе несколько COM-классов. Знать их различия важно, потому что от выбора зависят возможности и накладные расходы:

ProgIDНазначениеОсобенности
V83.COMConnectorЛёгкое соединение с базойМинимальное потребление памяти, нет интерфейса, оптимален для обменов
V83.ApplicationПолное приложение 1СМожно открыть окна и формы, но тяжёлый и медленный
V82.COMConnector / V82.ApplicationТо же для платформы 8.2Используются, если база работает на старой платформе

Внутри самой 1С есть похожий механизм — объект COMОбъект (в английском синтаксисе COMObject), который позволяет из кода встроенного языка создавать COM-объекты других приложений, включая другую базу 1С, Excel, Word и сторонние компоненты.

Где COM-соединение применяют на практике

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

Второй сценарий — интеграция с внешними системами. Скрипт на PowerShell или приложение на C# может подключиться к базе 1С через COM и выгрузить остатки, прайсы или справочник контрагентов для дальнейшей передачи на сайт или в CRM. Это работает, пока обе стороны находятся в инфраструктуре Windows.

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

Обмен между двумя базами 1СХороший сценарий для COM

Обе базы доступны с одного Windows-сервера, нет веб-публикации

Интеграция с сайтом или облакомCOM не подходит напрямую

Нужны HTTP-сервисы, веб-сервисы или шина данных

Периодические фоновые задачиCOM применим

Проверьте, что сервер работает под Windows и есть лицензия на сеанс

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

Ниже — типовой порядок действий для соединения из кода 1С с другой базой 1С. Тот же принцип работает из VBScript, PowerShell или .NET, меняется только синтаксис создания объекта.

Порядок действий
  1. 1
    Убедитесь, что на машине, откуда идёт подключение, установлена платформа 1С той же версии, что и у целевой базы, и зарегистрирована компонента comcntr.dll нужной разрядности.
  2. 2
    Создайте объект-коннектор: Коннектор = Новый COMОбъект("V83.COMConnector").
  3. 3
    Сформируйте строку соединения: для файловой базы File="ПутьКБазе"; для серверной Srvr="ИмяСервера";Ref="ИмяБазы"; добавьте Usr и Pwd при необходимости.
  4. 4
    Вызовите метод Connect: База = Коннектор.Connect(СтрокаСоединения).
  5. 5
    Работайте с данными через контекст: База.Справочники.Контрагенты.НайтиПоКоду(...) и т.д.
  6. 6
    По завершении обнулите переменные и освободите соединение, чтобы не держать сеанс на сервере.

Пример минимального кода на встроенном языке 1С:

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

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

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

Запрос = База.NewObject("Запрос");

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

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

Обратите внимание: объекты удалённой базы нельзя смешивать с локальными напрямую. Ссылку на элемент справочника из COM-базы нельзя присвоить реквизиту локального объекта — нужно передавать примитивные значения (коды, GUID, наименования) и по ним искать элементы уже в своей базе.

Требования и ограничения технологии

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

Критична разрядность: 64-разрядный процесс не может загрузить 32-разрядную comcntr.dll и наоборот. Если скрипт запускается из 64-разрядного PowerShell, а зарегистрирована только 32-разрядная компонента, вы получите ошибку «Класс не зарегистрирован». Лечится установкой и регистрацией компоненты нужной разрядности командой regsvr32 из каталога платформы соответствующей битности.

Каждое COM-соединение занимает сеанс на сервере 1С и расходует лицензию. При массовых параллельных подключениях это может исчерпать пул лицензий. Также соединение держит ресурсы, пока переменная не освобождена, поэтому в коде важно предусмотреть закрытие даже при ошибках (конструкция Попытка...Исключение).

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

Самая частая проблема — «Класс не зарегистрирован» (0x80040154). Причины: платформа не установлена на машине, где выполняется код; разрядность процесса и компоненты не совпадают; компонента не зарегистрирована. Проверка: выполнить регистрацию regsvr32 "C:\Program Files\1cv8\<версия>\bin\comcntr.dll" из каталога нужной разрядности.

Вторая группа ошибок — ошибки аутентификации и прав: «Пользователь ИБ не идентифицирован», «Нарушение прав доступа». Здесь проверяют логин/пароль в строке соединения и права пользователя на объекты, к которым идёт обращение через COM.

Третья группа — «зависшие» сеансы: соединение не закрыто из-за исключения, сеанс висит на сервере, лицензия занята. Диагностируется через консоль кластера (список сеансов), лечится корректным освобождением объектов в коде и, при необходимости, принудительным удалением зависшего сеанса администратором.

Типичные ошибки
01
Смешивание объектов двух баз: попытка записать COM-ссылку в локальный реквизит приводит к ошибке несовместимости типов — передавайте только примитивные значения.
02
Отсутствие обработки исключений: соединение остаётся открытым, сеансы и лицензии удерживаются до перезапуска процесса.
03
Запуск обмена из 64-разрядного процесса при 32-разрядной компоненте: получаете 'Класс не зарегистрирован' и теряете время на диагностику.
04
Транзакционные блокировки: долгие операции через COM в рабочее время вызывают конфликты блокировок с пользователями — планируйте обмен на нерабочие часы.

Альтернативы COM: когда выбрать другой способ

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

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

COM-соединение

Быстрый прямой доступ к объектам базы; только Windows, расходует лицензии, сложная диагностика разрядности.

HTTP-сервисы 1С

Кроссплатформенно, работает через веб-сервер, удобно для сайтов и мобильных приложений; требует публикации и разработки API.

Web-сервисы (SOAP)

Стандартизованный обмен, подходит для Enterprise-интеграций; громоздкий формат, выше накладные расходы.

Планы обмена

Встроенный механизм 1С для регулярной синхронизации между базами; не подходит для интеграции с не-1С системами.

Внешние источники данных

Доступ к таблицам SQL напрямую из 1С; чтение внешних БД, но не вызов логики другой базы 1С.

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

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

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

Нужно быстро наладить обмен между двумя базами 1С на одном Windows-сервереИспользуйте V83.COMConnector с обработкой ошибок и закрытием соединения.
Интеграция с сайтом, мобильным приложением или Linux-системойПубликуйте HTTP-сервисы или веб-сервисы, COM не подойдёт.
Ошибка 'Класс не зарегистрирован'Проверьте разрядность процесса и зарегистрируйте comcntr.dll нужной битности через regsvr32.
На сервере висят лишние сеансы после обменаДобавьте освобождение COM-объектов в блоке Исключение и после цикла обработки.

Проверка результата и безопасная эксплуатация

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

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

Соединение установлено
Норма

Метод Connect вернул объект без исключения, доступны менеджеры объектов базы

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

Исключение при Connect — ошибка в строке соединения, правах или регистрации компоненты

Данные перенесены корректно
Норма

Количество созданных документов совпадает с источником, реквизиты заполнены, GUID-ы связаны

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

Пропуски, дубли или пустые реквизиты — проверяйте логику поиска по ключевым полям

Сеансы после обмена
Норма

В консоли кластера сеанс COM-соединения закрыт после завершения обработки

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

Сеанс висит — в коде нет освобождения объекта или обмен упал с ошибкой

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

Логируйте каждый сеанс обмена: время начала и конца, количество обработанных объектов, ошибки. Без журнала расследовать расхождения в данных между базами практически невозможно, особенно если обмен выполняется по расписанию без наблюдения.

Итог

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

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

Частые вопросы о COM-объектах 1С

Чем V83.COMConnector отличается от V83.Application?

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

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

Чаще всего несовпадение разрядности: 64-разрядный процесс пытается загрузить 32-разрядную компоненту или наоборот. Проверьте, какая битность у запускающего приложения, и зарегистрируйте comcntr.dll из каталога платформы той же разрядности командой regsvr32. Также убедитесь, что платформа вообще установлена на этой машине.

Можно ли использовать COM-соединение на Linux?

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

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

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

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

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

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

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