Как программно получить информацию о лицензиях клиентских сеансов на сервере 1С 8.2?

Программист IT и автоматизация бизнеса
← На главную

При администрировании серверов 1С часто возникает задача мониторинга используемых лицензий. Если для платформы 8.3 эта задача решается достаточно просто через COM-интерфейс, то при работе с версией 8.2 разработчики сталкиваются с ошибкой «Метод объекта не обнаружен (License)». Рассмотрим подробно, почему так происходит, и какие существуют обходные пути для получения этих данных.

Анализ проблемы и стандартного подхода через COM-соединение

Для начала разберем стандартный код, который успешно работает на платформе 8.3, но дает сбой на 8.2. Разработчики обычно используют объект V82.COMConnector для подключения к агенту сервера и получения списка сессий. Проанализируем типичный алгоритм работы:


// Пример кода для получения сеансов и попытки чтения лицензий
Соединение = Новый COMОбъект("V82.COMConnector");
Агент = Соединение.ConnectAgent("tcp://ИмяСервера");
Кластер = Агент.GetClusters().GetValue(0);
Агент.Authenticate(Кластер, "", "");

// Получаем массив сессий
МассивСессий = Агент.GetSessions(Кластер).Выгрузить();

Для Каждого Сессия Из МассивСессий Цикл
    // На платформе 8.2 на следующей строке возникнет ошибка
    Если Сессия.License <> Неопределено Тогда
        // Обработка информации о лицензии
    КонецЕсли;
КонецЦикла;

В платформе 8.3 свойство License объекта Session возвращает вложенный объект типа ILicenseInfo, содержащий данные о типе лицензии (клиентская, серверная), ее серийном номере и способе выдачи. Однако в платформе 8.2, несмотря на наличие упоминаний в справочной системе, программный доступ к этому свойству через COM фактически не реализован или работает некорректно.

Выясним причины ошибки «Метод объекта не обнаружен»

Проанализируем ситуацию, почему одна и та же структура кода ведет себя по-разному. Основная причина кроется в архитектурных различиях между версиями 8.2 и 8.3:

  1. Ограничения COM-интерфейса 8.2: В версии 8.2 интерфейс управления кластером был менее развит. Объект Session (Сеанс) в этой версии платформы не предоставляет объектную модель для описания лицензий. Информация о лицензии в консоли администрирования 8.2 часто является просто строковым представлением, которое не экспортируется через COM как свойство License.
  2. Различия в механизме выдачи лицензий: В 8.3 сервер 1С берет на себя гораздо больше функций по управлению программными лицензиями. В 8.2 же преобладали аппаратные ключи HASP, управление которыми происходило на уровне драйверов и менеджеров лицензий, а не через внутренние объекты сервера приложений.
  3. Ошибки в документации: Как было замечено многими разработчиками, справка конфигуратора 1С 8.2 может содержать описание свойств, которые фактически были добавлены в более поздних редакциях платформы или предназначались для других механизмов (например, для веб-сервисов).

Разберем альтернативные способы получения информации о лицензиях в 8.2

Если прямое обращение к свойству License невозможно, рассмотрим, как можно получить нужные данные другими методами.

1. Анализ технологического журнала (ТЖ)

Это самый надежный способ для платформы 8.2. В технологическом журнале фиксируются события получения лицензии. Настроим сбор событий LEvent. Рассмотрим пример конфигурации logcfg.xml для мониторинга лицензий:


<config xmlns="http://v8.1c.ru/7.4/puls/conf/config">
  <log location="C:\Logs\Licenses" history="72">
    <event>
      <eq property="Name" value="LEVENT"/>
    </event>
    <property name="all"/>
  </log>
</config>

После настройки ТЖ мы сможем программно парсить текстовые файлы логов, где будет указано, какой сеанс (по его ID) какую лицензию захватил. Выясним формат записи: в событии будет содержаться информация о типе лицензии и ее параметрах.

2. Использование утилит мониторинга HASP

Если в вашей системе используются аппаратные ключи, посмотрим на использование сторонних утилит, таких как Aladdin Monitor или аналоги. Эти инструменты позволяют видеть количество занятых лицензий на конкретном ключе. Однако стоит помнить, что они не связывают лицензию с конкретным номером сеанса внутри 1С напрямую — они видят только сетевые подключения к менеджеру лицензий.

3. Попытка использования более новой библиотеки COM

Рассмотрим вариант, когда на сервере установлены обе платформы — 8.2 и 8.3. В некоторых случаях удается использовать V83.COMConnector для подключения к серверу 8.2. Посмотрим на этот процесс:

Внимание: Этот метод часто приводит к ошибкам несовместимости типов данных (например, при передаче структур кластера), поэтому он не является гарантированным решением.

Рекомендации по реализации мониторинга

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

  1. Проверьте, нельзя ли перевести информационную базу на платформу 8.3 в режиме совместимости. Это решит проблему с COM-интерфейсом и даст доступ ко всем современным методам администрирования.
  2. Если переход невозможен, реализуйте парсер технологического журнала. Это потребует написания дополнительного кода на 1С или любом скриптовом языке (Python, PowerShell), который будет считывать данные из папки логов и сопоставлять их с текущим списком сессий, полученным через GetSessions().
  3. Используйте объект IClusterAdminConnector вместо упрощенного COMConnector, если вам требуется более глубокий доступ к функциям администрирования, хотя для 8.2 проблема со свойством License может сохраниться и там.

Таким образом, мы выяснили, что отсутствие свойства License в 1С 8.2 — это не ошибка в вашем коде, а ограничение самой платформы. Использование технологического журнала является единственным легитимным и точным способом программно «увидеть» лицензии в этой версии программы.

← На главную