Как правильно посчитать количество используемых лицензий 1С:Предприятие (КОРП, ПРОФ и другие) на сервере?

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

Мониторинг использования лицензий 1С:Предприятие — важная задача для системных администраторов и специалистов по поддержке. Он позволяет отслеживать, сколько лицензий различных типов (КОРП, ПРОФ, Базовая и т.д.) фактически используются в данный момент, что помогает в планировании закупок и оптимизации ресурсов. Сегодня мы с вами разберем, как получить эту информацию программно, используя средства администрирования сервера 1С:Предприятия.

Давайте вместе выясним, как получить детальные данные о сеансах и ассоциированных с ними лицензиях, а затем сведем эту информацию для получения общей картины использования.

Понимание основ: Объекты администрирования сервера 1С

Прежде чем перейти к коду, давайте рассмотрим ключевые объекты, которые мы будем использовать для получения информации о лицензиях. Эти объекты предоставляют доступ к функциям администрирования кластера серверов 1С:Предприятия:

  1. АдминистрированиеСервера: Это основной объект для подключения к серверу администрирования 1С:Предприятия. Он позволяет получить список кластеров, запущенных на данном сервере.
  2. Кластер: Объект, представляющий собой кластер серверов 1С. Через него мы можем получить информацию о базах данных, рабочих процессах и, что самое главное для нас, о текущих сеансах пользователей.
  3. Сеанс: Объект, описывающий активный сеанс пользователя или фонового задания в информационной базе. Каждый сеанс содержит информацию о подключенном пользователе, используемой базе и, конечно же, о типе используемой лицензии.

Кстати, в контексте администрирования 1С часто встречается вопрос о "ws". Обычно это сокращение от "веб-сервисы" (web-services) или "веб-сервер" (web-server). Веб-сервер используется для публикации информационных баз, работы веб-клиента или внешних веб-сервисов. Однако, для получения информации о лицензиях активных сеансов, напрямую через объекты АдминистрированиеСервера, Кластер и Сеанс, веб-сервисы не используются. Мы будем работать непосредственно с API администрирования сервера 1С.

Получение информации о лицензиях текущих сеансов

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

  1. Подключение к агенту сервера:

    Первым делом нам необходимо создать объект АдминистрированиеСервера и выполнить аутентификацию. Это позволит нам получить доступ к информации о кластерах.

  2. Получение списка кластеров:

    Сервер 1С может содержать один или несколько кластеров. Мы получим их список и будем перебирать каждый из них.

  3. Аутентификация в кластере и получение сеансов:

    Для каждого кластера мы также должны выполнить аутентификацию, чтобы получить доступ к его внутренним объектам, таким как сеансы.

  4. Извлечение информации о лицензиях:

    Для каждого сеанса нас интересует свойство Лицензии. Это свойство возвращает строку, указывающую тип лицензии, используемой данным сеансом (например, "ПРОФ", "КОРП", "Базовая", "Веб-клиент" и т.д.).

Рассмотрим пример кода, который выполняет эти действия:


// Создаем объект для администрирования сервера 1С
Агент = Новый АдминистрированиеСервера();

// Выполняем аутентификацию на сервере.
// Если требуется, указываем имя пользователя и пароль:
// Агент.ВыполнитьАутентификацию("ИмяПользователяАдминистратора", "ПарольАдминистратора");
// Для простоты примера предполагаем, что текущий пользователь имеет права
Агент.ВыполнитьАутентификацию();

// Получаем список кластеров, зарегистрированных на сервере
Кластеры = Агент.ПолучитьКластеры();

Сообщить("--- Информация о лицензиях по сеансам ---");

// Перебираем каждый кластер
Для Каждого Кластер из Кластеры Цикл
    // Выполняем аутентификацию в текущем кластере
    // Если требуется, указываем имя пользователя и пароль:
    // Кластер.ВыполнитьАутентификацию("ИмяПользователяАдминистратораКластера", "ПарольАдминистратораКластера");
    Кластер.ВыполнитьАутентификацию();

    // Получаем список активных сеансов в данном кластере
    Сеансы = Кластер.ПолучитьСеансы();

    // Перебираем каждый сеанс и выводим информацию о лицензии
    Для Каждого Сеанс из Сеансы Цикл
        // Свойство Сеанс.Лицензии возвращает строку с типом используемой лицензии
        Сообщить("Сеанс (" + Сеанс.ИмяПользователя + " в базе " + Сеанс.ИмяИнформационнойБазы + "): Лицензии = " + Сеанс.Лицензии);
    КонецЦикла;

КонецЦикла;

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

Подсчет лицензий по типам (КОРП, ПРОФ и другие)

Чтобы получить сводную информацию о количестве использованных лицензий каждого типа, мы модифицируем предыдущий пример. Мы будем использовать объект Соответствие (аналог словаря или хеш-таблицы), чтобы хранить счетчики для каждого типа лицензий.

Давайте разберем по шагам, как это сделать:

  1. Инициализация счетчика: Мы создадим объект Соответствие, где ключом будет строка с типом лицензии (например, "ПРОФ", "КОРП"), а значением — количество использованных лицензий этого типа.
  2. Накопление данных: В цикле по сеансам мы будем получать тип лицензии из свойства Сеанс.Лицензии. Если такой тип уже есть в нашем Соответствии, мы увеличим его счетчик. Если нет — добавим новый тип с начальным значением 1.
  3. Вывод результатов: После обработки всех сеансов мы пройдемся по нашему Соответствию и выведем итоговые данные.

Посмотрим на пример кода с подсчетом:


// Создаем объект для администрирования сервера 1С
Агент = Новый АдминистрированиеСервера();
Агент.ВыполнитьАутентификацию();

// Создаем Соответствие для хранения счетчиков лицензий по типам
// Ключ: Тип лицензии (строка), Значение: Количество (число)
КартаИспользованныхЛицензий = Новый Соответствие();

Кластеры = Агент.ПолучитьКластеры();

// Перебираем каждый кластер
Для Каждого Кластер из Кластеры Цикл
    Кластер.ВыполнитьАутентификацию();
    Сеансы = Кластер.ПолучитьСеансы();

    // Перебираем каждый сеанс
    Для Каждого Сеанс из Сеансы Цикл
        ТипЛицензии = Сеанс.Лицензии; // Получаем тип лицензии для текущего сеанса

        // Проверяем, что тип лицензии не пустой (сеанс может быть без явной клиентской лицензии)
        Если Не ПустаяСтрока(ТипЛицензии) Тогда
            // Проверяем, есть ли уже такой тип лицензии в нашей карте
            Если КартаИспользованныхЛицензий.Ключи().Содержит(ТипЛицензии) Тогда
                // Если есть, увеличиваем счетчик
                КартаИспользованныхЛицензий.Вставить(ТипЛицензии, КартаИспользованныхЛицензий.Получить(ТипЛицензии) + 1);
            Иначе
                // Если нет, добавляем новый тип с начальным значением 1
                КартаИспользованныхЛицензий.Вставить(ТипЛицензии, 1);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
КонецЦикла;

Сообщить("--- Сводка по использованным лицензиям по типам ---");

// Выводим итоговую сводку
Для Каждого ЭлементИзКарты Из КартаИспользованныхЛицензий Цикл
    Сообщить("Тип лицензии: " + ЭлементИзКарты.Ключ + ", Количество: " + ЭлементИзКарты.Значение);
КонецЦикла;

Этот код предоставит нам аккуратную сводку, показывающую, сколько лицензий каждого типа (КОРП, ПРОФ, Базовая, Веб-клиент и т.д.) активно используются в данный момент на всех кластерах сервера 1С.

Важные аспекты и возможные нюансы

При работе с администрированием сервера 1С и подсчетом лицензий следует учитывать несколько важных моментов:

  1. Права доступа: Для успешного выполнения операций Агент.ВыполнитьАутентификацию() и Кластер.ВыполнитьАутентификацию() пользователь, под которым выполняется код, должен иметь достаточные права администратора кластера 1С:Предприятия. В противном случае вы получите ошибку доступа.
  2. Расположение кода: Этот код может быть выполнен в любой клиентской или серверной части 1С:Предприятия, которая имеет доступ к серверу администрирования 1С. Чаще всего его запускают в обработках или регламентных заданиях.
  3. Лицензии, не связанные с сеансами: Данный метод подсчитывает только клиентские лицензии, используемые активными пользовательскими сеансами. Он не учитывает серверные лицензии (КОРП, ПРОФ), которые устанавливаются на сервер 1С и дают право на использование определенных функций сервера, а также не учитывает аппаратные или программные лицензии, которые могут быть заняты, но не связаны с активным сеансом в кластере (например, лицензии для фоновых процессов, которые не отображаются как "сеансы" в привычном понимании). Для полноценного анализа всех установленных и доступных лицензий, включая серверные, потребуются дополнительные методы (например, через утилиту `lmtool` для HASP-лицензий или анализ логов сервера 1С).
  4. Интерпретация Сеанс.Лицензии: Значение свойства Сеанс.Лицензии возвращает тип *клиентской* лицензии, которая была выдана данному сеансу. Если сеанс использует, например, лицензию уровня КОРП, то это будет указано. Если сеанс использует обычную ПРОФ лицензию, будет указано "ПРОФ".

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

← К списку