Как исправить ошибку «Не найдена лицензия» при COM-соединении и настроить отладку под конкретным пользователем

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

При работе с распределенными информационными системами на базе 1С:Предприятие часто возникает необходимость оперативного обмена данными. Одним из классических способов является использование COM-соединения. Однако этот метод нередко преподносит сюрпризы в виде трудноуловимых ошибок. Одной из самых распространенных и неприятных является ошибка: «Произошла исключительная ситуация (1C:Enterprise 8.3.x.xxxx): Не найдена лицензия. Не обнаружен ключ защиты программы или полученная программная лицензия!». Особенно странно это выглядит, когда у большинства пользователей обмен работает корректно, а проблема локализована под одной конкретной учетной записью.

В данной статье мы подробно разберем причины возникновения этой ситуации, проанализируем специфику работы COM-объектов в многодоменной среде и изучим программный способ временного перехвата сессии пользователя для проведения отладки.

Разбор причин ошибки лицензирования при COM-подключении

Для начала проанализируем, как 1С ищет лицензию при создании COM-соединения. Важно понимать, что объект V83.COMConnector — это внутрипроцессный сервер (DLL), который запускается в контексте того приложения, которое его вызывает. В отличие от полноценного клиента 1С, COM-соединение предъявляет более жесткие требования к окружению.

Рассмотрим основные факторы, которые могут приводить к отказу в получении лицензии:

  1. Область видимости программной лицензии. Если вы используете программные лицензии (файлы .lic), они могут быть активированы «на пользователя» или «на компьютер». Если лицензия активирована в профиле конкретного пользователя (папка %AppData%), то другой доменный пользователь, под которым запускается COM-соединение, просто не увидит этот файл.
  2. Доступ к сетевым ресурсам в разных доменах. Если база является файловой и находится в другом домене, то при попытке соединения 1С должна не только достучаться до файла базы данных, но и проверить наличие лицензий. Если у пользователя ограничены права на сетевую папку или отсутствуют доверительные отношения между доменами, система может вернуть ошибку лицензирования, хотя корень проблемы — в правах NTFS.
  3. Настройки файла nethasp.ini. При использовании аппаратных ключей защиты COM-соединение обращается к настройкам менеджера лицензий. Если в файле nethasp.ini не прописан жестко IP-адрес сервера (параметр NH_SERVER_ADDR), а поиск идет через широковещательный запрос (Broadcast), то в сложной сетевой инфраструктуре между разными доменами этот запрос может блокироваться сетевым экраном.

Методика отладки под проблемным пользователем

Когда ошибка возникает только у одного конкретного пользователя, нам необходимо воспроизвести ситуацию именно под его учетными данными. Однако зачастую мы не знаем пароля пользователя, а сбрасывать его нельзя, чтобы не прерывать рабочий процесс. Выясним, как можно временно «подменить» пароль для отладки и затем вернуть его обратно, используя программные методы работы с пользователями информационной базы.

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

Для начала нам необходимо считать текущее значение пароля. В 1С 8.3 для этого используется свойство СохраняемоеЗначениеПароля объекта ПользовательИнформационнойБазы.

Выполним следующий код под правами администратора, чтобы сохранить текущий хеш:


// Имя пользователя, под которым нужно провести отладку
ИмяПользователя = "ИвановИИ"; 
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);

Если ПользовательИБ <> Неопределено Тогда
    // Сохраняем текущий хеш пароля в переменную или текстовый файл
    ХешПароля = ПользовательИБ.СохраняемоеЗначениеПароля;
    Сообщить("Хеш пароля сохранен: " + ХешПароля);
    
    // Сбрасываем пароль для возможности входа без него
    ПользовательИБ.Пароль = "";
    ПользовательИБ.Записать();
    Сообщить("Пароль временно сброшен для отладки.");
КонецЕсли;

Теперь мы можем запустить сеанс 1С под пользователем "ИвановИИ" без пароля, установить точки остановки в модулях, где происходит вызов метода Connect(), и детально проанализировать состояние системы.

Восстановление исходного пароля пользователя

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

Проанализируем пример кода для восстановления:


// Восстановление пароля из сохраненного ранее значения
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("ИвановИИ");

Если ПользовательИБ <> Неопределено Тогда
    // Устанавливаем сохраненный хеш напрямую в системное поле
    ПользовательИБ.СохраняемоеЗначениеПароля = ХешПароля; 
    ПользовательИБ.Записать();
    Сообщить("Исходный пароль пользователя успешно восстановлен.");
КонецЕсли;

Важное примечание: данный метод работает в платформе 8.3 и позволяет восстанавливать доступ даже в типовых конфигурациях, где механизмы авторизации сильно кастомизированы. Обратите внимание, что прямое редактирование СохраняемоеЗначениеПароля доступно только на сервере или в толстом клиенте под полными правами.

Дополнительная диагностика прав COM и DCOM

Если манипуляции с пользователем и проверкой лицензий не дали результата, разберем более глубокие настройки операционной системы. Ошибка «Не найдена лицензия» может быть следствием того, что компонента V83.COMConnector не может инициализироваться из-за ограничений безопасности Windows.

Проверим следующие настройки:

Стоит ли переходить на веб-сервисы?

Рассмотрим ситуацию шире. COM-технология считается устаревшей и «капризной» в настройке, особенно в современных инфраструктурах с высокой степенью защиты и множеством доменов. Если ваш функционал обмена (как в случае с Альфа-Авто и УПП) требует частого вызова «по кнопке» для синхронизации единичных объектов, оптимальным решением станет переход на HTTP-сервисы или Веб-сервисы.

Преимущества очевидны:

Тем не менее, если текущая архитектура жестко завязана на COM, предложенная методика с сохранением хеша пароля поможет вам быстро диагностировать и устранить проблемы под любым пользователем без вмешательства в его персональные данные.

← На главную