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

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

Переход с файлового варианта работы информационной базы на клиент-серверный (с использованием MS SQL Server или PostgreSQL) требует существенного изменения логики подключения внешних обработок. Если раньше для доступа к данным достаточно было указать путь к папке на диске, то в серверном варианте взаимодействие происходит через кластер серверов 1С:Предприятия. В рамках данной статьи мы подробно разберем, как правильно сформировать строку подключения, настроить системное окружение и избежать типичных ошибок при работе с COM-объектами.

Разбор параметров строки подключения для клиент-серверного варианта

При использовании файловой базы строка подключения начиналась с ключевого слова File. Для серверной базы структура полностью меняется. Рассмотрим основные параметры, которые необходимо использовать в методе Connect объекта V83.COMConnector.

Проанализируем ключевые параметры:

Выясним, как выглядит типовой пример кода для подключения к серверной базе:


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

// Формируем строку соединения
// Обратите внимание на использование двойных кавычек для значений, если в них есть пробелы
Сервер = "10.6.10.20";
ИмяБазы = "Buh_Production";
Логин = "Администратор";
Пароль = "SecretPassword123";

СтрокаПодключения = "Srvr='" + Сервер + "';Ref='" + ИмяБазы + "';Usr='" + Логин + "';Pwd='" + Пароль + "';";

Попытка
    Соединение = КомОбъект.Connect(СтрокаПодключения);
    Сообщить("Подключение успешно установлено!");
Исключение
    Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;

Важный совет: Самый простой способ узнать точные параметры Srvr и Ref — открыть окно запуска 1С, выбрать нужную базу в списке и посмотреть в нижнюю часть окна. Там будет указана строка вида srvr="ИмяСервера";ref="ИмяБазы".

Решение проблемы с регистрацией comcntr.dll

Часто после перехода на клиент-серверный вариант программисты сталкиваются с тем, что даже при правильной строке подключения возникает ошибка "Класс не зарегистрирован" или общее сообщение о неудаче. Проанализируем причину: при установке сервера 1С или обновлении платформы библиотека comcntr.dll, отвечающая за COM-соединение, может не зарегистрироваться в реестре Windows автоматически.

Разберем по шагам процесс ручной регистрации библиотеки:

  1. Определим путь к установленной платформе. Обычно это C:\Program Files\1cv8\номер_версии\bin\.
  2. Запустим командную строку (cmd) от имени администратора.
  3. Выполним команду регистрации для нужной версии платформы:

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

Если ваша система 64-битная, а вы вызываете COM-объект из 32-битного приложения (или наоборот), стандартная регистрация может не помочь. В этом случае необходимо настроить "Приложение COM+" в службах компонентов Windows, чтобы библиотека работала в отдельном процессе dllhost.exe.

Особенности разрядности систем (x86 vs x64)

Проанализируем ситуацию, когда сервер 1С работает на 64-битной платформе, а клиентское приложение или внешняя обработка — на 32-битной. Библиотека comcntr.dll должна соответствовать разрядности процесса, который её вызывает.

Если вы получаете ошибку при создании объекта Новый COMОбъект("V83.COMConnector"), проверьте следующее:

Рассмотрим настройку через Службы компонентов (Component Services) для решения конфликтов разрядности:

  1. Откройте "Панель управления" -> "Администрирование" -> "Службы компонентов".
  2. Перейдите в "Компьютеры" -> "Мой компьютер" -> "Приложения COM+".
  3. Создайте новое приложение (Пустое приложение), назовите его, например, 1C_COM_Connector.
  4. Укажите способ запуска: "Серверное приложение".
  5. В созданное приложение в ветку "Компоненты" добавьте новую компоненту, выбрав файл comcntr.dll из каталога bin вашей платформы.
  6. В свойствах созданного приложения на вкладке "Удостоверение" укажите пользователя с правами администратора.

Производительность и сетевые задержки

Многие разработчики замечают, что после перехода на клиент-серверную модель отчеты, использующие COM-соединение, начинают работать значительно медленнее (в 10-20 раз). Выясним причину этого явления.

В файловом варианте COM-объект работает с базой данных "напрямую" в рамках одного адресного пространства. В клиент-серверном варианте каждое обращение к свойству объекта (например, Соединение.Справочники.Номенклатура.НайтиПоКоду("001")) инициирует полноценный сетевой вызов (RPC) между вашим приложением, кластером серверов 1С и SQL-сервером.

Рассмотрим рекомендации по оптимизации:

Лицензирование при COM-подключении

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

Посмотрим, как правильно завершать работу с объектом:


// В конце работы обязательно освобождаем ресурсы
Соединение = Неопределено;
КомОбъект = Неопределено;

Если вы запускаете подключение с сервера на тот же самый кластер, лицензия всё равно может быть затребована. Проверьте настройки раздачи лицензий в консоли администрирования кластера (параметр "Разрешить выдачу лицензий сервером 1С").

Итоги

Мы проанализировали процесс перехода COM-подключений на клиент-серверный режим. Основные шаги включают изменение строки подключения (использование Srvr и Ref), обязательную регистрацию comcntr.dll соответствующей разрядности и оптимизацию кода для уменьшения количества сетевых вызовов. Помните, что COM-технология постепенно вытесняется веб-технологиями, и для новых проектов стоит рассматривать HTTP-сервисы как более надежную альтернативу.

← На главную