Мониторинг использования лицензий 1С:Предприятие — важная задача для системных администраторов и специалистов по поддержке. Он позволяет отслеживать, сколько лицензий различных типов (КОРП, ПРОФ, Базовая и т.д.) фактически используются в данный момент, что помогает в планировании закупок и оптимизации ресурсов. Сегодня мы с вами разберем, как получить эту информацию программно, используя средства администрирования сервера 1С:Предприятия.
Давайте вместе выясним, как получить детальные данные о сеансах и ассоциированных с ними лицензиях, а затем сведем эту информацию для получения общей картины использования.
Прежде чем перейти к коду, давайте рассмотрим ключевые объекты, которые мы будем использовать для получения информации о лицензиях. Эти объекты предоставляют доступ к функциям администрирования кластера серверов 1С:Предприятия:
АдминистрированиеСервера: Это основной объект для подключения к серверу администрирования 1С:Предприятия. Он позволяет получить список кластеров, запущенных на данном сервере.Кластер: Объект, представляющий собой кластер серверов 1С. Через него мы можем получить информацию о базах данных, рабочих процессах и, что самое главное для нас, о текущих сеансах пользователей.Сеанс: Объект, описывающий активный сеанс пользователя или фонового задания в информационной базе. Каждый сеанс содержит информацию о подключенном пользователе, используемой базе и, конечно же, о типе используемой лицензии.Кстати, в контексте администрирования 1С часто встречается вопрос о "ws". Обычно это сокращение от "веб-сервисы" (web-services) или "веб-сервер" (web-server). Веб-сервер используется для публикации информационных баз, работы веб-клиента или внешних веб-сервисов. Однако, для получения информации о лицензиях активных сеансов, напрямую через объекты АдминистрированиеСервера, Кластер и Сеанс, веб-сервисы не используются. Мы будем работать непосредственно с API администрирования сервера 1С.
Теперь давайте перейдем к практическому примеру. Мы рассмотрим по шагам, как подключиться к серверу 1С, получить список активных сеансов и извлечь информацию о лицензиях, используемых каждым сеансом.
Первым делом нам необходимо создать объект АдминистрированиеСервера и выполнить аутентификацию. Это позволит нам получить доступ к информации о кластерах.
Сервер 1С может содержать один или несколько кластеров. Мы получим их список и будем перебирать каждый из них.
Для каждого кластера мы также должны выполнить аутентификацию, чтобы получить доступ к его внутренним объектам, таким как сеансы.
Для каждого сеанса нас интересует свойство Лицензии. Это свойство возвращает строку, указывающую тип лицензии, используемой данным сеансом (например, "ПРОФ", "КОРП", "Базовая", "Веб-клиент" и т.д.).
Рассмотрим пример кода, который выполняет эти действия:
// Создаем объект для администрирования сервера 1С
Агент = Новый АдминистрированиеСервера();
// Выполняем аутентификацию на сервере.
// Если требуется, указываем имя пользователя и пароль:
// Агент.ВыполнитьАутентификацию("ИмяПользователяАдминистратора", "ПарольАдминистратора");
// Для простоты примера предполагаем, что текущий пользователь имеет права
Агент.ВыполнитьАутентификацию();
// Получаем список кластеров, зарегистрированных на сервере
Кластеры = Агент.ПолучитьКластеры();
Сообщить("--- Информация о лицензиях по сеансам ---");
// Перебираем каждый кластер
Для Каждого Кластер из Кластеры Цикл
// Выполняем аутентификацию в текущем кластере
// Если требуется, указываем имя пользователя и пароль:
// Кластер.ВыполнитьАутентификацию("ИмяПользователяАдминистратораКластера", "ПарольАдминистратораКластера");
Кластер.ВыполнитьАутентификацию();
// Получаем список активных сеансов в данном кластере
Сеансы = Кластер.ПолучитьСеансы();
// Перебираем каждый сеанс и выводим информацию о лицензии
Для Каждого Сеанс из Сеансы Цикл
// Свойство Сеанс.Лицензии возвращает строку с типом используемой лицензии
Сообщить("Сеанс (" + Сеанс.ИмяПользователя + " в базе " + Сеанс.ИмяИнформационнойБазы + "): Лицензии = " + Сеанс.Лицензии);
КонецЦикла;
КонецЦикла;
Этот код выведет список всех активных сеансов и тип лицензии, который использует каждый из них. Однако, для полноценного анализа нам нужно не просто увидеть список, а посчитать количество лицензий каждого типа.
Чтобы получить сводную информацию о количестве использованных лицензий каждого типа, мы модифицируем предыдущий пример. Мы будем использовать объект Соответствие (аналог словаря или хеш-таблицы), чтобы хранить счетчики для каждого типа лицензий.
Давайте разберем по шагам, как это сделать:
Соответствие, где ключом будет строка с типом лицензии (например, "ПРОФ", "КОРП"), а значением — количество использованных лицензий этого типа.Сеанс.Лицензии. Если такой тип уже есть в нашем Соответствии, мы увеличим его счетчик. Если нет — добавим новый тип с начальным значением 1.Соответствию и выведем итоговые данные.Посмотрим на пример кода с подсчетом:
// Создаем объект для администрирования сервера 1С
Агент = Новый АдминистрированиеСервера();
Агент.ВыполнитьАутентификацию();
// Создаем Соответствие для хранения счетчиков лицензий по типам
// Ключ: Тип лицензии (строка), Значение: Количество (число)
КартаИспользованныхЛицензий = Новый Соответствие();
Кластеры = Агент.ПолучитьКластеры();
// Перебираем каждый кластер
Для Каждого Кластер из Кластеры Цикл
Кластер.ВыполнитьАутентификацию();
Сеансы = Кластер.ПолучитьСеансы();
// Перебираем каждый сеанс
Для Каждого Сеанс из Сеансы Цикл
ТипЛицензии = Сеанс.Лицензии; // Получаем тип лицензии для текущего сеанса
// Проверяем, что тип лицензии не пустой (сеанс может быть без явной клиентской лицензии)
Если Не ПустаяСтрока(ТипЛицензии) Тогда
// Проверяем, есть ли уже такой тип лицензии в нашей карте
Если КартаИспользованныхЛицензий.Ключи().Содержит(ТипЛицензии) Тогда
// Если есть, увеличиваем счетчик
КартаИспользованныхЛицензий.Вставить(ТипЛицензии, КартаИспользованныхЛицензий.Получить(ТипЛицензии) + 1);
Иначе
// Если нет, добавляем новый тип с начальным значением 1
КартаИспользованныхЛицензий.Вставить(ТипЛицензии, 1);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Сообщить("--- Сводка по использованным лицензиям по типам ---");
// Выводим итоговую сводку
Для Каждого ЭлементИзКарты Из КартаИспользованныхЛицензий Цикл
Сообщить("Тип лицензии: " + ЭлементИзКарты.Ключ + ", Количество: " + ЭлементИзКарты.Значение);
КонецЦикла;
Этот код предоставит нам аккуратную сводку, показывающую, сколько лицензий каждого типа (КОРП, ПРОФ, Базовая, Веб-клиент и т.д.) активно используются в данный момент на всех кластерах сервера 1С.
При работе с администрированием сервера 1С и подсчетом лицензий следует учитывать несколько важных моментов:
Агент.ВыполнитьАутентификацию() и Кластер.ВыполнитьАутентификацию() пользователь, под которым выполняется код, должен иметь достаточные права администратора кластера 1С:Предприятия. В противном случае вы получите ошибку доступа.Сеанс.Лицензии: Значение свойства Сеанс.Лицензии возвращает тип *клиентской* лицензии, которая была выдана данному сеансу. Если сеанс использует, например, лицензию уровня КОРП, то это будет указано. Если сеанс использует обычную ПРОФ лицензию, будет указано "ПРОФ".Мы вместе рассмотрели подробный подход к подсчету используемых клиентских лицензий 1С:Предприятие. Используя предоставленные методы и примеры кода, вы сможете эффективно мониторить загрузку ваших лицензий и принимать обоснованные решения по их управлению.
← К списку