Как исправить ошибку «Не найдена лицензия» при COM-подключении к базе 1С:Предприятие?

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

При программной интеграции и обмене данными между базами «1С:Предприятие» разработчики часто сталкиваются с ситуацией, когда обычный пользовательский сеанс в толстом или тонком клиенте запускается без нареканий, однако при попытке установить программное соединение через COM-коннектор возникает исключение:

Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V82.COMConnector.1 / V83.COMConnector.1): Не найдена лицензия. Не обнаружен ключ защиты программы или полученная программная лицензия!

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

Причины возникновения ошибки лицензирования в COM-соединении

Проанализируем механику работы COM-коннектора платформы «1С:Предприятие». В отличие от полноценного клиентского приложения, объект COMConnector реализуется через динамическую библиотеку comcntr.dll. Данная библиотека загружается непосредственно в адресное пространство вызывающего процесса и инициализирует собственный независимый сеанс лицензирования.

Выделим основные причины, по которым коннектор не может получить лицензию:

  1. Отключен поиск аппаратных ключей в настройках запуска. При инициализации COM-библиотека считывает глобальный конфигурационный файл стартера 1CEStart.cfg текущего пользователя. Если в настройках запуска отключен флаг использования аппаратных лицензий (параметр UseHWLicenses=0), COM-соединение полностью игнорирует сетевые ключи HASP и пытается найти только программные лицензии (файлы .lic).
  2. Запрет выдачи лицензий сервером 1С. Если подключение выполняется к клиент-серверной базе, а на вызывающей машине нет локального ключа или программной лицензии, COM-сеанс может получить лицензию от кластера серверов базы-приемника только при условии, что в параметрах целевой базы разрешена раздача лицензий сервером.
  3. Блокировка широковещательных пакетов в локальной сети. По умолчанию поиск менеджера лицензий HASP License Manager происходит посредством широковещательных broadcast-запросов по протоколу UDP на порт 475. Если рабочие станции или серверы находятся в разных подсетях или маршрутизаторы блокируют broadcast-трафик, COM-коннектор не может автоматически обнаружить ключ.
  4. Контекст службы при вызове из серверного кода. Если вызов COM-объекта выполняется на стороне сервера (например, в фоновом или регламентном задании), код исполняется от имени системной учетной записи службы сервера 1С (обычно USR1CV8). У этой учетной записи может отсутствовать доступ к каталогам с лицензиями или могут быть установлены собственные индивидуальные настройки стартера.

Способ 1. Включение поиска аппаратных лицензий в настройках стартера

Рассмотрим самое быстрое и распространенное решение, когда в организации используются аппаратные USB-ключи защиты HASP. Для того чтобы COM-коннектор начал опрашивать аппаратные ключи, выполним следующие шаги:

  1. Запустим диалоговое окно запуска «1С:Предприятие» на компьютере, с которого инициируется соединение.
  2. В правой панели нажмем кнопку «Настройка...».
  3. В открывшемся окне настроек диалога запуска установим флажок «Использовать аппаратную лицензию (ключ защиты)».
  4. Нажмем кнопку «ОК» для сохранения параметров.

Альтернативно мы можем скорректировать конфигурационный файл вручную. Перейдем в каталог профиля пользователя по пути %APPDATA%\1C\1CEStart\ или %LOCALAPPDATA%\1C\1CEStart\, откроем файл 1CEStart.cfg в текстовом редакторе и убедимся, что параметр выставлен в единицу:

UseHWLicenses=1

Если файл был поврежден или содержал некорректные параметры, можно удалить 1CEStart.cfg — платформа создаст его заново со стандартными настройками при следующем старте.

Способ 2. Прямое указание IP-адреса менеджера лицензий HASP

Если рабочие места и сервер лицензирования разделены маршрутизаторами или виртуальными сетями, настроим адресный опрос менеджера лицензий HASP через конфигурационный файл nethasp.ini.

  1. Найдем файл nethasp.ini в каталоге платформы. Обычно он расположен по пути:
    C:\Program Files (x86)\1cv82\conf\ (или в каталоге конкретного релиза ...\bin\conf\).
  2. Откроем файл и перейдем к секции [NH_TCPIP].
  3. Раскомментируем строку NH_SERVER_ADDR (убрав точку с запятой в начале строки) и укажем точный IP-адрес компьютера или сервера, на котором установлен аппаратный ключ и запущен HASP License Manager:
    NH_SERVER_ADDR = 192.168.1.100
  4. Установим параметр NH_USE_BROADCAST = Disabled для отключения лишних широковещательных пакетов.
  5. Сохраним изменения в файле.

Способ 3. Разрешение выдачи лицензий сервером «1С:Предприятия»

Если соединение устанавливается с клиент-серверной базой данных, проанализируем параметры информационной базы в консоли администрирования кластера серверов 1С:

  1. Откроем консоль «Администрирование серверов 1С:Предприятия».
  2. Раскроем дерево нужного кластера и перейдем в ветку «Информационные базы».
  3. Откроем свойства целевой базы, к которой выполняется подключение.
  4. Найдем параметр «Разрешить выдачу лицензий сервером 1С:Предприятия» и переведем его в значение «Да».
  5. Применим изменения, нажав кнопку «ОК».

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

Способ 4. Корректная программная инициализация COM-соединения

Посмотрим на пример кода на встроенном языке 1С, демонстрирующий безопасную инициализацию COM-подключения с перехватом исключений и корректной очисткой объектов в памяти:


Попытка
    // Создаем экземпляр COM-коннектора (для платформы 8.2 используется V82.COMConnector)
    COMКоннектор = Новый COMОбъект("V82.COMConnector");
    
    // Строка подключения для клиент-серверной базы
    СтрокаПодключения = "Srvr=""Server1C"";Ref=""ZUP_Base"";Usr=""Обмен"";Pwd=""Password123"";";
    
    // Выполняем соединение с информационной базой
    ВнешнееСоединение = COMКоннектор.Connect(СтрокаПодключения);
    
    // Выполняем необходимые действия в базе-приемнике
    МассивСотрудников = ВнешнееСоединение.Справочники.СотрудникиОрганизаций.Выбрать();
    
    Сообщить("Соединение с информационной базой успешно установлено!");
Исключение
    // Обрабатываем ошибки лицензирования и подключения
    ОписаниеОшибки = ОписаниеОшибки();
    Сообщить("Не удалось установить COM-соединение: " + ОписаниеОшибки);
    ВнешнееСоединение = Неопределено;
    COMКоннектор = Неопределено;
КонецПопытки;

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

← На главную