При администрировании серверов 1С часто возникает задача мониторинга используемых лицензий. Если для платформы 8.3 эта задача решается достаточно просто через COM-интерфейс, то при работе с версией 8.2 разработчики сталкиваются с ошибкой «Метод объекта не обнаружен (License)». Рассмотрим подробно, почему так происходит, и какие существуют обходные пути для получения этих данных.
Для начала разберем стандартный код, который успешно работает на платформе 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:
Session (Сеанс) в этой версии платформы не предоставляет объектную модель для описания лицензий. Информация о лицензии в консоли администрирования 8.2 часто является просто строковым представлением, которое не экспортируется через COM как свойство License.Если прямое обращение к свойству 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. Посмотрим на этот процесс:
comcntr.dll от версии 8.3 в операционной системе.Новый COMОбъект("V83.COMConnector").Внимание: Этот метод часто приводит к ошибкам несовместимости типов данных (например, при передаче структур кластера), поэтому он не является гарантированным решением.
Проанализировав ситуацию, можно сделать вывод: если ваша инфраструктура все еще базируется на 1С 8.2, полноценный мониторинг лицензий «в одну строку» через COM невозможен. Для решения задачи рекомендуем придерживаться следующего плана:
GetSessions().IClusterAdminConnector вместо упрощенного COMConnector, если вам требуется более глубокий доступ к функциям администрирования, хотя для 8.2 проблема со свойством License может сохраниться и там.Таким образом, мы выяснили, что отсутствие свойства License в 1С 8.2 — это не ошибка в вашем коде, а ограничение самой платформы. Использование технологического журнала является единственным легитимным и точным способом программно «увидеть» лицензии в этой версии программы.