Взаимодействие между базами 1С через COM
Рассмотрено много особенностей взаимодействия между базами 1С по COM технологии
- Описание
- Подробнее
Описание
Взаимодействие между базами 1С через COM
В этой статье я расскажу о многих особенностях взаимодействия между базами 1С по COM технологии, накопленных за годы развития и использования интеграционного коммерческого продукта 2iS:Интеграция компании 2iS.
Термины
ОС – операционная система
COM-клиент – процесс(поток) ОС, запросивший создание COM-объекта
COM-сервер – COM-объект, созданный по запросу клиента
Издание платформы – подстрока до 2-й точки версии платформы (например 8.2, 8.3)
Com-соединитель – COM-объект V8X.ComСonnector для создания внешних соединений с базами 1С
Automation-сервер – он же OLE-сервер, COM-объект V8X.Application для создания приложений 1С
Сборка платформы – полная строка версии платформы (например 8.2.19.130, 8.2.16.352)
COM классы платформы
Виды COM классов
Для каждого издания платформы в системном реестре регистрируются собственные классы для взаимодействия с базами. Символ “X” обозначает место подстановки номера издания платформы (например 0,1,2,3,4).
V8X.ComСonnector — Com-соединитель / Менеджер COM-соединений
С помощью данного объекта выполняется установка внешнего соединения с информационной базой 1С:Предприятия 8 и администрирование кластера серверов. С помощью одного экземпляра объекта может быть установлено неограниченное число соединений.
Регистрация и отмена регистрации выполняется отдельно для каждой разрядности (32b и 64b)
Регистрация: Regsvr32 “<ПутьНужнойРазрядности>\bin\comcntr.dll”
Отмена регистрации: Regsvr32 “<ПутьНужнойРазрядности>\bin\comcntr.dll” /u
V8X.Application — Automation-сервер толстого клиента
Предоставляет доступ ко всем свойствам и методам глобального контекста клиентского приложения, а также включение и выключение пользовательского интерфейса (главного окна приложения).
Может запускать как обычное, так и управляемое приложение в зависимости от параметров конфигурации и пользователя базы, но явно задавать тип приложения нельзя.
Регистрация и отмена регистрации
Регистрация — 1cv8.exe /regserver
Отмена регистрации — 1cv8.exe /unregserver
V8Xc.Application — Automation-сервер тонкого клиента
Предоставляет доступ ко всем свойствам и методам глобального контекста клиентского приложения, а также включение и выключение пользовательского интерфейса (главного окна приложения).
Регистрация и отмена регистрации
Регистрация — 1cv8c.exe /regserver
Отмена регистрации — 1cv8c.exe /unregserver
Привязка COM классов к dll-файлам
Привязка имени COM класса к конкретному dll-файлу осуществляется через ветку HKEY_CLASSES_ROOT системного реестра, которая собирается следующим образом:
Берется содержимое ветки HKEY_CURRENT_USER\Software\Classes
Добавляется содержимое ветки HKEY_LOCAL_MACHINE\Software\Classes, но только те ключи, которые отсутствуют в п.1.
Поэтому регистрация класса от имени пользователя имеет приоритет над общей регистрацией.
Для 32-b и 64-b режимов исполнения кода в реестре хранятся отдельные ветки и соответственно отдельные привязки. Поэтому управление COM-классами для них осуществляется независимо. В частности это касается класса V8X.ComConnector (на 64-b операционной системе)
64-b — c:\Program Files\1cv8*\<Версия>\bin\comcntr.dll
32-b — c:\Program Files (x86)\1cv8*\<Версия>\bin\comcntr.dll
Подключение внешнего соединения
Рассмотрим алгоритм подключения внешнего соединения в деталях
Создание COM-объекта Com-соединитель (Имя класса — V8X.ComConnector). Варианты:
Внутрипроцессное (inproc)
Должен быть зарегистрирован класс V8X.ComConnector той же разрядности, что и COM-клиент
Если издание платформы COM-клиента совпадает с изданием платформы COM-сервера, то также требуется равенство сборки платформы COM-клиента и COM-сервера.
Он регистрируется при установке платформы с опцией «Внешнее соединение». В любой момент его можно зарегистрировать командой «Regsvr32 comcntr.dll» в каталоге исполняемых файлов платформы.
COM-объект создается в памяти COM-клиента
Затраты на создание примерно – 0.01(первое)/0.001(второе) cек
Пример
КомСоединитель = Новый COMОбъект(“V83.ComConnector”);
ВнешнееСоединение = КомСоединитель.Connect(СтрокаСоединения);
Внепроцессное локальное (local)
Должен быть зарегистрирован класс V8X.ComConnector любой разрядности и сборки платформы. Необходимо настроить через dcomcnfg.exe COM+ приложение с активацией «серверное приложение»/«Server apllication». Подробнее рассмотрено далее.
COM-объект создается в памяти служебного хост-процесса (dllhost.exe) на компьютере COM-клиента
Затраты на создание примерно – 0.06(первое)/0.03(второе) сек
Пример
КомСоединитель = Новый COMОбъект(“V83.ComConnector”);
ВнешнееСоединение = КомСоединитель.Connect(СтрокаСоединения);
Внепроцессное нелокальное (DCOM)
На нелокальном компьютере должен быть зарегистрирован класс V8X.ComConnector любой разрядности и сборки платформы. Необходимо настроить на нелокальном компьютере через dcomcnfg.exe COM+ приложение с активацией «Cерверное приложение»/«Server apllication». Подробнее рассмотрено далее.
Необходимо настроить на нелокальном компьютере роль «Сервер приложений»/«Application server» и включить нелокальный доступ к COM+, выбрав опцию «Сетевой доступ к COM+»/”COM+ network access”. Подробнее рассмотрено далее.
COM-объект создается в памяти служебного хост-процесса (dllhost.exe) на другом компьютере
Затраты на создание примерно
Экспериментальные данные
Задержка канала, мс | Длительность создания COM-объекта, мс |
0 | 60 |
30 | 700 |
80 | 2000 |
170 | 4000 |

