Как прописать путь к базе 1С через COM-соединение, если на сервере несколько кластеров?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разбор проблемы с портами при COM-подключении

При настройке программного подключения к информационной базе 1С через объект V83.COMConnector специалисты часто сталкиваются с ошибкой «Неверные или отсутствующие параметры соединения с информационной базой». Эта проблема регулярно возникает в инфраструктурах, где на одном физическом или виртуальном сервере создано несколько кластеров 1С, работающих на разных портах.

Разберем, почему стандартная строка соединения вида Srvr="NameServer";Ref="BaseName"; отказывается работать в такой конфигурации и как правильно сформировать параметры подключения.

Выясняем причину ошибки

Проанализируем механику работы службы сервера 1С:Предприятия. Каждый кластер 1С использует несколько разновидностей сетевых портов:

Порт агента сервера (ragent): По умолчанию использует порт 1540 (для второго кластера со смещением часто назначают 1640, 1740 и т. д.).

Порт главного менеджера кластера (rmngr): По умолчанию 1541 (для второго кластера — 1641).

Диапазон портов рабочих процессов (rphost): Например, 1560:1591 или 1660:1691.

Главная причина ошибки заключается в том, что в параметре Srvr строки соединения ошибочно указывают либо только имя сервера без порта, либо порт агента кластера (ragent), тогда как COM-коннектору требуется порт главного менеджера кластера (rmngr).

Правильное формирование строки соединения

Посмотрим на пример корректного вызова метода Connect() объекта COMConnector. Для подключения к базе, находящейся на втором кластере, необходимо явно указать порт менеджера кластера через двоеточие после имени сервера:


// Создаем объект коннектора
Коннектор = Новый COMОбъект("V83.COMConnector");

// Формируем строку соединения с указанием порта менеджера кластера
СтрокаСоединения = "Srvr=""NameServer:1641"";Ref=""BaseName"";Usr=""Пользователь"";Pwd=""Пароль"";";

// Выполняем подключение к базе
Подключение = Коннектор.Connect(СтрокаСоединения);

Разберем по шагам порядок действий для определения правильного порта:

  1. Откроем консоль администрирования кластеров серверов 1С:Предприятия.
  2. Найдем нужный кластер и откроем его свойства.
  3. Проверим значение параметра «Порт» — это и есть порт менеджера кластера (rmngr).
  4. Укажем найденное значение в параметре Srvr через двоеточие после имени или IP-адреса сервера.

Альтернативные и дополнительные способы решения

Если прямое подключение через Connect() вызывает сложности или требуется более точная настройка соединения, проанализируем альтернативные варианты интеграции:

1. Прямое подключение к рабочему процессу

В случаях, когда известен конкретный рабочий процесс кластера, можно использовать метод ConnectWorkingProcess():


Коннектор = Новый COMОбъект("V83.COMConnector");
РабочийПроцесс = Коннектор.ConnectWorkingProcess("tcp://NameServer:1662");
РабочийПроцесс.AddAuthentication("Пользователь", "Пароль");
Подключение = РабочийПроцесс.ConnectData("BaseName");

2. Использование HTTP- и Web-сервисов

В современных конфигурациях всё чаще отказываются от COM-технологий в пользу HTTP-сервисов и Web-сервисов. Публикация информационной базы на веб-сервере (IIS или Apache) полностью исключает зависимость от разрядности приложений (32/64-бит), разности версий платформ и особенностей портов кластера.

3. Проверка дополнительных условий подключения

Если после указания порта менеджера кластера ошибка сохраняется, проверим следующие настройки:

  1. Убедимся, что учетная запись 1С, указанная в параметре Usr, обладает ролью с разрешенным правом Внешнее соединение.
  2. Проверим, зарегистрирована ли компонента comcntr.dll нужной версии и разрядности платформы в операционной системе.
  3. Проверим настройки сетевого экрана: порт менеджера кластера и диапазон портов рабочих процессов должны быть доступны с клиентского компьютера.
← На главную