К статье
Практический материал

Администрирование · 10 мин

Как получить активного пользователя 1С

Как получить активного пользователя 1С: через консоль кластера, администрирование сеансов, код на встроенном языке и журнал регистрации. Примеры и ограничения.

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

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

Ниже разобраны все рабочие варианты — от визуальных инструментов до готового кода, с ограничениями каждого метода и типичными ошибками.

Что такое сеанс и чем он отличается от соединения

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

Поэтому «список пользователей» в конфигураторе (Администрирование → Пользователи) — это не активные пользователи, а все зарегистрированные учётные записи. Активность определяется именно наличием живого сеанса, и смотреть её нужно в разделах «Сеансы» и «Соединения», а не в справочнике пользователей.

Просмотр активных пользователей в консоли кластера серверов

В клиент-серверном режиме самый наглядный способ — консоль администрирования серверов 1С (оснастка «1С:Предприятие — Сервер администрирования»). Раскройте нужный кластер, затем ветку «Информационные базы», выберите базу и откройте пункт «Сеансы». В таблице видны имя пользователя, приложение (тонкий клиент, веб-клиент, фоновое задание), время начала сеанса, последняя активность, компьютер и объём прочитанных и записанных данных.

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

Как найти активных пользователей в консоли кластера
  1. 1
    Откройте консоль администрирования серверов 1С
  2. 2
    Раскройте кластер и ветку «Информационные базы»
  3. 3
    Выберите нужную базу и откройте пункт «Сеансы»
  4. 4
    Отсортируйте список по пользователю или времени последней активности
  5. 5
    При необходимости завершите лишний сеанс через контекстное меню

Доступ к консоли требует прав администратора кластера, если они заданы. Если кластер без пароля, подключиться может любой, кто имеет сетевой доступ к серверу администрирования — это отдельный повод проверить настройки безопасности.

Получение активных пользователей программно

Разработчику часто нужно получить список сеансов из кода — например, чтобы показать «кто в базе» в форме, запретить запуск обработки при чужих сеансах или записать активность в лог. Для этого в глобальном контексте есть функция ПолучитьСеансыИнформационнойБазы(), возвращающая массив объектов типа СеансИнформационнойБазы.

bsl
Сеансы = ПолучитьСеансыИнформационнойБазы();
Для Каждого Сеанс Из Сеансы Цикл
    Если Сеанс.ИмяПриложения = "1CV8" Или Сеанс.ИмяПриложения = "1CV8C" Тогда
        Сообщить(Сеанс.Пользователь.Имя + " — " + Сеанс.ИмяКомпьютера);
    КонецЕсли;
КонецЦикла;

У каждого объекта сеанса доступны свойства: НомерСеанса, Пользователь (объект ПользовательИнформационнойБазы), ИмяПриложения, ИмяКомпьютера, НачалоСеанса, ПоследняяАктивность. Фильтруя по ИмяПриложения, можно отделить живых пользователей от фоновых заданий и веб-сервисов: «1CV8» — толстый клиент, «1CV8C» — тонкий, «WebClient» — веб-клиент, «BackgroundJob» — фоновое задание.

Для выполнения ПолучитьСеансыИнформационнойБазы() пользователю нужны административные права (роль АдминистраторСистемы или право «Администрирование»). В файловом режиме функция тоже работает и возвращает сеансы текущей базы, что делает её универсальным решением.

Как узнать текущего пользователя сеанса

Если задача — определить не всех, а именно текущего активного пользователя, который выполняет код, используйте ПользователиИнформационнойБазы.ТекущийПользователь(). Он вернёт объект с именем, полным именем и ролями. В типовых конфигурациях на БСП вместо этого принято обращаться к функции Пользователи.ТекущийПользователь() или Пользователи.АвторизованныйПользователь(), которые возвращают ссылку на элемент справочника «Пользователи», а не учётную запись платформы.

Активные пользователи в файловом режиме

В файловой базе консоли кластера нет, поэтому администратор пользуется другими средствами. Первый — пункт меню «Администрирование → Активные пользователи» в типовых конфигурациях на базе Библиотеки стандартных подсистем: откроется форма со списком сеансов, откуда при наличии прав можно завершить чужой сеанс или отправить пользователям сообщение о скором отключении.

Второй вариант — обработка «Удаление помеченных объектов» и механизм завершения работы пользователей из БСП, который планирует блокировку сеансов на заданное время. Третий — программный способ через ПолучитьСеансыИнформационнойБазы(), описанный выше, он одинаково работает в обоих режимах.

Косвенный признак активности — файл блокировок 1Cv8.1CL рядом с файлом базы и открытые по сети файлы, но полагаться на него нельзя: после аварийного закрытия клиента блокировки могут остаться «фантомными». Точный список даёт только механизм сеансов платформы.

Типичные ошибки
01
Путать список пользователей конфигуратора с активными сеансами — учётная запись может существовать без единого входа в базу
02
Пытаться установить монопольный режим, не завершив фоновые задания и сеансы отладчика — они тоже считаются активными
03
Считать активным пользователя по открытому файлу 1Cv8.1CL — после сбоя блокировка остаётся, хотя сеанса уже нет
04
Запускать ПолучитьСеансыИнформационнойБазы() под пользователем без административных прав и получать ошибку доступа

Журнал регистрации и история активности

Список сеансов показывает только текущий момент. Если нужно узнать, кто работал в базе ранее, используйте журнал регистрации (в конфигураторе: Администрирование → Журнал регистрации). Отфильтруйте события «Сеанс. Аутентификация», «Сеанс. Начало» и «Сеанс. Завершение» по нужному пользователю или периоду — получите историю входов и выходов с указанием компьютера и приложения.

Журнал регистрации доступен и программно через метод ВыгрузитьЖурналРегистрации(), что позволяет строить отчёты по активности: например, сколько времени пользователь был в базе или когда последний раз входил конкретный сотрудник. Для файловых баз при больших объёмах журнала выгрузку лучше делать с фильтром по датам, иначе операция займёт заметное время.

Завершение сеансов и блокировка базы

Частая практическая цель получения списка активных пользователей — выгнать всех для обновления. В консоли кластера это делается вручную или через установку блокировки сеансов в свойствах информационной базы (параметры «Блокировка начала сеансов» и сообщение для пользователей). Программно в типовых конфигурациях используется объект БлокировкаСеансов: установка свойства Установлена в Истина запрещает новые входы, а метод УстановитьСоединениеСИнформационнойБазойЗавершить() — нет, завершение делается через ЗавершитьРаботуПользователей() из БСП или удаление сеансов в консоли.

Для клиент-серверных баз также доступна утилита rac из состава сервера 1С: команда вида rac session --cluster= --infobase= list выводит сеансы, а rac session terminate — завершает их. Это удобно для скриптов автоматического обновления в ночное время.

Контрольные точки

Как проверить результат

Список сеансов после завершения
Норма

Остался только ваш сеанс и служебные фоновые задания

Тревожный признак

Чужие сеансы появляются снова — не установлена блокировка входа

Монопольный режим
Норма

Режим устанавливается без ошибок

Тревожный признак

Ошибка «информационная база используется» — остались активные сеансы или соединения

Код ПолучитьСеансыИнформационнойБазы()
Норма

Возвращается массив объектов сеансов

Тревожный признак

Ошибка нарушения прав доступа — у пользователя нет административных прав

FAQ

Как посмотреть активных пользователей без прав администратора?

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

Почему в списке сеансов есть пользователи, которые давно закрыли программу?

Это «зависшие» сеансы: клиент закрылся аварийно или сеть оборвалась, а сервер ещё держит сеанс до истечения таймаута. Такие сеансы можно удалить вручную в консоли кластера, они не вернутся, если клиент действительно отключён.

Как определить, кто из пользователей сейчас активно работает, а кто просто держит базу открытой?

Смотрите колонку «Последняя активность» в консоли кластера или свойство ПоследняяАктивность объекта сеанса. Если с момента последнего обращения прошло много времени, сеанс простаивает. Дополнительно помогают счётчики прочитанных и записанных данных.

Можно ли получить активных пользователей через COM-соединение?

Да. Через COMConnector можно подключиться к базе и вызвать ПолучитьСеансыИнформационнойБазы() в контексте внешнего соединения. Для клиент-серверного режима альтернатива — утилита rac или RAS, которые не требуют запуска полноценного клиента.

Чем отличается ПолучитьСоединенияИнформационнойБазы() от ПолучитьСеансыИнформационнойБазы()?

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

Как автоматически уведомить пользователей перед отключением?

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

Итог

Что важно запомнить

Активные пользователи 1С — это живые сеансы, а не записи в списке пользователей. В клиент-серверном режиме смотрите консоль кластера, в файловом — «Активные пользователи» в типовой конфигурации, программно — ПолучитьСеансыИнформационнойБазы() с административными правами. Перед принудительным завершением сеансов предупредите пользователей и установите блокировку входа.