Администрирование · 10 мин
Как получить активного пользователя 1С
Как получить активного пользователя 1С: через консоль кластера, администрирование сеансов, код на встроенном языке и журнал регистрации. Примеры и ограничения.
Под активным пользователем 1С обычно понимают сеанс, который в данный момент подключён к информационной базе: кто-то открыл конфигурацию в тонком или толстом клиенте, работает через веб-клиент либо держит фоновое соединение. Задача «получить активного пользователя» возникает у администраторов при обновлении конфигурации, блокировке базы, поиске «зависших» сеансов и у разработчиков — когда нужно программно определить, кто сейчас работает в системе.
Способ получения списка активных пользователей зависит от режима работы базы. В клиент-серверном варианте главный инструмент — консоль кластера серверов 1С. В файловом режиме консоли нет, поэтому используют встроенные механизмы платформы: функцию ПолучитьСеансыИнформационнойБазы() или типовые обработки. Дополнительно текущего пользователя сеанса всегда можно узнать через объект ПользователиИнформационнойБазы.
Ниже разобраны все рабочие варианты — от визуальных инструментов до готового кода, с ограничениями каждого метода и типичными ошибками.
Что такое сеанс и чем он отличается от соединения
Прежде чем получать список активных пользователей, важно различать два понятия платформы. Сеанс — это логическая сессия работы пользователя или фонового задания с информационной базой. Соединение — физическая связь между клиентом и сервером (или файлом базы). Один сеанс может иметь несколько соединений или временно не иметь ни одного, например при разрыве сети до истечения таймаута.
Поэтому «список пользователей» в конфигураторе (Администрирование → Пользователи) — это не активные пользователи, а все зарегистрированные учётные записи. Активность определяется именно наличием живого сеанса, и смотреть её нужно в разделах «Сеансы» и «Соединения», а не в справочнике пользователей.
Просмотр активных пользователей в консоли кластера серверов
В клиент-серверном режиме самый наглядный способ — консоль администрирования серверов 1С (оснастка «1С:Предприятие — Сервер администрирования»). Раскройте нужный кластер, затем ветку «Информационные базы», выберите базу и откройте пункт «Сеансы». В таблице видны имя пользователя, приложение (тонкий клиент, веб-клиент, фоновое задание), время начала сеанса, последняя активность, компьютер и объём прочитанных и записанных данных.
Из этой же консоли можно завершить сеанс принудительно — через контекстное меню «Удалить». Это полезно при «зависших» сеансах, которые мешают установить монопольный режим. Отдельно есть вкладка «Соединения», где видно физические подключения процессов rphost к базе.
- 1Откройте консоль администрирования серверов 1С
- 2Раскройте кластер и ветку «Информационные базы»
- 3Выберите нужную базу и откройте пункт «Сеансы»
- 4Отсортируйте список по пользователю или времени последней активности
- 5При необходимости завершите лишний сеанс через контекстное меню
Доступ к консоли требует прав администратора кластера, если они заданы. Если кластер без пароля, подключиться может любой, кто имеет сетевой доступ к серверу администрирования — это отдельный повод проверить настройки безопасности.
Получение активных пользователей программно
Разработчику часто нужно получить список сеансов из кода — например, чтобы показать «кто в базе» в форме, запретить запуск обработки при чужих сеансах или записать активность в лог. Для этого в глобальном контексте есть функция ПолучитьСеансыИнформационнойБазы(), возвращающая массив объектов типа СеансИнформационнойБазы.
Сеансы = ПолучитьСеансыИнформационнойБазы();
Для Каждого Сеанс Из Сеансы Цикл
Если Сеанс.ИмяПриложения = "1CV8" Или Сеанс.ИмяПриложения = "1CV8C" Тогда
Сообщить(Сеанс.Пользователь.Имя + " — " + Сеанс.ИмяКомпьютера);
КонецЕсли;
КонецЦикла;У каждого объекта сеанса доступны свойства: НомерСеанса, Пользователь (объект ПользовательИнформационнойБазы), ИмяПриложения, ИмяКомпьютера, НачалоСеанса, ПоследняяАктивность. Фильтруя по ИмяПриложения, можно отделить живых пользователей от фоновых заданий и веб-сервисов: «1CV8» — толстый клиент, «1CV8C» — тонкий, «WebClient» — веб-клиент, «BackgroundJob» — фоновое задание.
Для выполнения ПолучитьСеансыИнформационнойБазы() пользователю нужны административные права (роль АдминистраторСистемы или право «Администрирование»). В файловом режиме функция тоже работает и возвращает сеансы текущей базы, что делает её универсальным решением.
Как узнать текущего пользователя сеанса
Если задача — определить не всех, а именно текущего активного пользователя, который выполняет код, используйте ПользователиИнформационнойБазы.ТекущийПользователь(). Он вернёт объект с именем, полным именем и ролями. В типовых конфигурациях на БСП вместо этого принято обращаться к функции Пользователи.ТекущийПользователь() или Пользователи.АвторизованныйПользователь(), которые возвращают ссылку на элемент справочника «Пользователи», а не учётную запись платформы.
Активные пользователи в файловом режиме
В файловой базе консоли кластера нет, поэтому администратор пользуется другими средствами. Первый — пункт меню «Администрирование → Активные пользователи» в типовых конфигурациях на базе Библиотеки стандартных подсистем: откроется форма со списком сеансов, откуда при наличии прав можно завершить чужой сеанс или отправить пользователям сообщение о скором отключении.
Второй вариант — обработка «Удаление помеченных объектов» и механизм завершения работы пользователей из БСП, который планирует блокировку сеансов на заданное время. Третий — программный способ через ПолучитьСеансыИнформационнойБазы(), описанный выше, он одинаково работает в обоих режимах.
Косвенный признак активности — файл блокировок 1Cv8.1CL рядом с файлом базы и открытые по сети файлы, но полагаться на него нельзя: после аварийного закрытия клиента блокировки могут остаться «фантомными». Точный список даёт только механизм сеансов платформы.
Журнал регистрации и история активности
Список сеансов показывает только текущий момент. Если нужно узнать, кто работал в базе ранее, используйте журнал регистрации (в конфигураторе: Администрирование → Журнал регистрации). Отфильтруйте события «Сеанс. Аутентификация», «Сеанс. Начало» и «Сеанс. Завершение» по нужному пользователю или периоду — получите историю входов и выходов с указанием компьютера и приложения.
Журнал регистрации доступен и программно через метод ВыгрузитьЖурналРегистрации(), что позволяет строить отчёты по активности: например, сколько времени пользователь был в базе или когда последний раз входил конкретный сотрудник. Для файловых баз при больших объёмах журнала выгрузку лучше делать с фильтром по датам, иначе операция займёт заметное время.
Завершение сеансов и блокировка базы
Частая практическая цель получения списка активных пользователей — выгнать всех для обновления. В консоли кластера это делается вручную или через установку блокировки сеансов в свойствах информационной базы (параметры «Блокировка начала сеансов» и сообщение для пользователей). Программно в типовых конфигурациях используется объект БлокировкаСеансов: установка свойства Установлена в Истина запрещает новые входы, а метод УстановитьСоединениеСИнформационнойБазойЗавершить() — нет, завершение делается через ЗавершитьРаботуПользователей() из БСП или удаление сеансов в консоли.
Для клиент-серверных баз также доступна утилита rac из состава сервера 1С: команда вида rac session --cluster=
Как проверить результат
Остался только ваш сеанс и служебные фоновые задания
Чужие сеансы появляются снова — не установлена блокировка входа
Режим устанавливается без ошибок
Ошибка «информационная база используется» — остались активные сеансы или соединения
Возвращается массив объектов сеансов
Ошибка нарушения прав доступа — у пользователя нет административных прав
FAQ
Как посмотреть активных пользователей без прав администратора?
Полный список сеансов без административных прав получить нельзя — это ограничение платформы. Обычный пользователь может видеть только свой текущий сеанс и, в некоторых типовых конфигурациях, сокращённую информацию, которую администратор решил вывести в интерфейс.
Почему в списке сеансов есть пользователи, которые давно закрыли программу?
Это «зависшие» сеансы: клиент закрылся аварийно или сеть оборвалась, а сервер ещё держит сеанс до истечения таймаута. Такие сеансы можно удалить вручную в консоли кластера, они не вернутся, если клиент действительно отключён.
Как определить, кто из пользователей сейчас активно работает, а кто просто держит базу открытой?
Смотрите колонку «Последняя активность» в консоли кластера или свойство ПоследняяАктивность объекта сеанса. Если с момента последнего обращения прошло много времени, сеанс простаивает. Дополнительно помогают счётчики прочитанных и записанных данных.
Можно ли получить активных пользователей через COM-соединение?
Да. Через COMConnector можно подключиться к базе и вызвать ПолучитьСеансыИнформационнойБазы() в контексте внешнего соединения. Для клиент-серверного режима альтернатива — утилита rac или RAS, которые не требуют запуска полноценного клиента.
Чем отличается ПолучитьСоединенияИнформационнойБазы() от ПолучитьСеансыИнформационнойБазы()?
Первая функция возвращает физические соединения процессов с базой, вторая — логические сеансы пользователей и заданий. Для ответа на вопрос «кто сейчас в базе» правильнее использовать сеансы: один сеанс может существовать без активного соединения, и наоборот.
Как автоматически уведомить пользователей перед отключением?
В типовых конфигурациях на БСП при установке блокировки сеансов пользователям автоматически выводится сообщение с текстом, который вы задали, и обратным отсчётом до завершения. В самописных решениях аналог реализуют через периодический опрос параметра сеанса или сеансовых сообщений.
Что важно запомнить
Активные пользователи 1С — это живые сеансы, а не записи в списке пользователей. В клиент-серверном режиме смотрите консоль кластера, в файловом — «Активные пользователи» в типовой конфигурации, программно — ПолучитьСеансыИнформационнойБазы() с административными правами. Перед принудительным завершением сеансов предупредите пользователей и установите блокировку входа.