Как просмотреть список сеансов по всем информационным базам на сервере 1С?

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

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

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

Решение 1. Использование COM-соединителя (V83.COMConnector)

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

Разберем по шагам готовый код внешней обработки, который собирает информацию обо всех активных сеансах со всех информационных баз текущего сервера:


СтрокаСоединенияСБД = СтрокаСоединенияИнформационнойБазы();    
ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "SRVR=");
Если ПозицияПоиска = 0 Тогда
    Предупреждение("База должна быть серверной!");
    Возврат;
КонецЕсли;

ПозицияОкончания = СтрНайти(СтрокаСоединенияСБД,""";Ref=""");
ИмяСервера = Сред(СтрокаСоединенияСБД, 7, ПозицияОкончания - 7);

Коннектор = Новый COMОбъект("V83.COMConnector");
СоединениеСАгентом = Коннектор.ConnectAgent(ИмяСервера);

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

Если мКластер = Неопределено Тогда
    Предупреждение("Не найдено ни одного кластера!");
    Возврат;
КонецЕсли;

// Проходим аутентификацию на кластере
СоединениеСАгентом.Authenticate(мКластер, , );

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

// Очищаем таблицы на форме перед заполнением
Сеансы.Очистить();

Для каждого Сеанс из мСеансы Цикл
    // Добавляем строку в таблицу на форме
    НовыйСеанс = Сеансы.Добавить();
    
    // Заполняем реквизиты сеанса
    НовыйСеанс.Компьютер = Сеанс.Host;
    НовыйСеанс.База = Сеанс.infoBase.Name;
    НовыйСеанс.Пользователь = Сеанс.userName;
    НовыйСеанс.ДатаПодключения = Сеанс.StartedAt;
    НовыйСеанс.ДатаПоследнейАктивности = Сеанс.LastActiveAt;
    
    // Получаем серию используемой лицензии (если доступно)
    Попытка
        НовыйСеанс.Лицензия = Сеанс.License.Series;
    Исключение
        НовыйСеанс.Лицензия = "Не определена";
    КонецПопытки;
КонецЦикла;

Проанализируем этот алгоритм. Сначала программа считывает строку подключения к текущей информационной базе и извлекает из нее имя сервера приложений 1С с помощью функции СтрокаСоединенияИнформационнойБазы(). Затем создается COM-объект V83.COMConnector, который выполняет подключение к серверу через метод ConnectAgent(). Программа перебирает доступные кластеры, авторизуется в них и с помощью метода GetSessions() собирает информацию обо всех активных сеансах во всех базах данного кластера. Полученные данные выгружаются в таблицу на форме для просмотра пользователем.

Ограничения и риски использования COM-соединителя

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

  1. Зависимость от операционной системы: Технология COM является проприетарной технологией Microsoft. Если ваш сервер приложений 1С работает под управлением операционной системы Linux (что сейчас является стандартом для многих импортонезависимых систем), данный код завершится ошибкой.
  2. Разрядность библиотек (32/64-бит): На 64-разрядных серверах часто возникают проблемы взаимодействия между 32-битными клиентами 1С и 64-битной библиотекой comcntr.dll. Настройка корректной работы DCOM-компонентов требует ручного вмешательства в реестр Windows.
  3. Безопасность учетных данных: В приведенном коде метод Authenticate вызывается с пустыми параметрами администратора. Если на вашем рабочем кластере включена безопасность и задан пароль администратора кластера, этот код выдаст ошибку доступа. Прописывать же логин и пароль администратора кластера явным текстом в коде внешней обработки категорически запрещено по соображениям безопасности.

Решение 2. Кроссплатформенное администрирование через RAS и RAC

Для обхода ограничений COM-технологий фирма "1С" разработала специальный программный интерфейс администрирования. Он состоит из двух частей: службы RAS (Remote Administration Server) и консольной утилиты RAC (Remote Administration Client).

Служба ras.exe запускается непосредственно на сервере 1С и транслирует запросы к кластеру по стандартному сетевому протоколу TCP (по умолчанию используется порт 1545). Утилита rac.exe представляет собой консольный клиент, который может отправлять команды серверу администрирования с любого компьютера сети, независимо от установленной операционной системы (Windows или Linux).

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


ПутьККонсолиRAC = "C:\Program Files\1cv8\8.3.10.2168\bin\rac.exe";
ПараметрыЗапуска = "session list --cluster=ID_ВАШЕГО_КЛАСТЕРА localhost:1545";

// Запускаем приложение во временный файл
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("txt");
СтрокаЗапуска = """" + ПутьККонсолиRAC + """ " + ПараметрыЗапуска + " > """ + ИмяВременногоФайла + """";

ЗапуститьПриложение(СтрокаЗапуска, , Истина);

// Читаем и анализируем полученный файл сеансов
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ИмяВременногоФайла, КодировкаТекста.UTF8);

// Далее пишем парсер строк текстового файла для вывода в таблицу

Этот способ полностью решает проблему кроссплатформенности и не требует регистрации DLL-библиотек в операционной системе. Для безопасности можно настроить службу RAS таким образом, чтобы она принимала запросы только с локального хоста или определенных доверенных IP-адресов.

Важная деталь: разница между понятиями "Сеансы" и "Лицензии"

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

Для точного аудита именно занятых программных лицензий рекомендуется использовать специализированный инструмент автоматизации — утилиту 1С:Enterprise Ring (модуль license), которая позволяет получить точные сведения о количестве и типах активированных лицензий на сервере.

Рекомендации по безопасной архитектуре решения

Для обеспечения максимальной безопасности вашей корпоративной системы мы рекомендуем отказаться от предоставления прямого доступа к серверным механизмам пользователям. Вместо этого можно применить одну из следующих безопасных архитектурных схем:

  1. Регламентный сбор данных в базах: В каждой из ваших баз настраивается простое регламентное задание, которое раз в 5-10 минут выполняет стандартную функцию ПолучитьСоединенияИнформационнойБазы(). Эта функция абсолютно безопасна, работает в контексте конкретной базы и не требует прав администратора кластера. Полученные данные о количестве активных пользователей базы записываются в общую папку или в единую "управляющую" базу. Главный бухгалтер открывает отчет в этой единой базе и видит актуальные цифры по всем базам сразу.
  2. Настройка администратора кластера с правами "Только чтение": Начиная с современных версий платформы 1С:Предприятие 8.3, в настройках безопасности кластера серверов можно создать учетную запись администратора с ограниченным набором прав (Read-Only). Данный пользователь сможет удаленно запрашивать списки сеансов через API, но у него не будет прав на удаление баз или принудительное отключение пользователей.
  3. Использование внешних систем мониторинга: Для крупных инфраструктур правильным подходом является интеграция сервера 1С с системами мониторинга ИТ-инфраструктуры (например, Zabbix, Prometheus, Grafana). Системный администратор настраивает регулярный сбор данных о сеансах и загрузке лицензий 1С. Главному бухгалтеру предоставляется обычная веб-ссылка на красивый интерактивный дашборд в браузере, где в реальном времени отображаются графики использования лицензий. При этом у пользователя полностью отсутствует прямой доступ к серверным утилитам 1С.
← На главную