Кто сейчас работает в базе 1С: консоль кластера, rac, код и журнал

· 9 мин

Содержание

Быстрее всего список активных пользователей 1С получить из самой программы: Главное меню → Функции для технического специалиста → Стандартные → Активные пользователи. В Конфигураторе та же форма открывается через Администрирование → Активные пользователи. Для клиент-серверной базы полную картину (с рабочими процессами, фоновыми заданиями и лицензиями) даёт консоль администрирования серверов 1С или утилита rac.

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

Какой способ выбрать: сравнение

Способ зависит от вида базы и от того, что вы хотите узнать. Файловая база не имеет кластера, поэтому часть инструментов для неё не работает .

СпособФайловая базаКлиент-серверЧто показываетПрава
Форма «Активные пользователи»✅✅Сеансы текущей базыАдминистратор базы
Консоль администрирования серверов—✅Сеансы всех баз кластера, процессы, блокировки СУБДАдминистратор кластера
Утилита rac—✅То же, что консоль, но текстом для скриптовАдминистратор кластера
Запрос к СУБД—✅Только соединения рабочих процессов с СУБДДоступ к СУБД
Встроенный язык✅✅Сеансы текущей базы в кодеАдминистративные права
Журнал регистрации✅✅Кто входил и выходил в прошломАдминистратор базы

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

Активные пользователи в консоли администрирования серверов 1С

Консоль — оснастка MMC, она ставится вместе с сервером 1С. В меню «Пуск» ищите «Администрирование серверов 1С Предприятия». Консоль подключается к агенту сервера (по умолчанию порт 1540).

Как открыть список сеансов

  1. Откройте консоль и разверните Central 1C:Enterprise 8.3 servers.
  2. Если сервера в дереве нет, добавьте его: правый клик → Создать → Центральный сервер 1С:Предприятия 8.3, укажите имя компьютера.
  3. Разверните сервер → Кластеры → нужный кластер.
  4. Для всех баз сразу откройте узел Сеансы кластера.
  5. Для одной базы: Информационные базы → имя базы → Сеансы.

Если на кластере задан администратор, консоль спросит логин и пароль.

Что смотреть в таблице сеансов

  • 👤 Пользователь — имя из списка пользователей базы.
  • 💻 Компьютер — с какого ПК запущен клиент.
  • 🧩 Приложение — тонкий клиент, Конфигуратор, фоновое задание и т. д. (расшифровка ниже).
  • 🕐 Начало сеанса и Последняя активность — помогают отличить «зависший» сеанс от рабочего.
  • 🔒 Блокировано СУБД и Захвачено СУБД — кто кого ждёт при блокировках.

Самые частые значения в колонке «Приложение»:

ИдентификаторЧто это
1CV8CТонкий клиент
1CV8Толстый клиент
WebClientВеб-клиент через браузер
DesignerКонфигуратор
BackgroundJobФоновое или регламентное задание
COMConnectionВнешнее подключение через COM
WSConnection, HTTPServiceConnectionВеб-сервисы и HTTP-сервисы

Консоль не открывается

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

regsvr32 "C:\Program Files\1cv8\8.3.24.1586\bin\radmin.dll"

Номер версии в пути замените на свой. Версия консоли должна совпадать с версией сервера: консоль 8.3.22 к серверу 8.3.24 подключится с ошибкой.

Просмотр сеансов из режима Предприятия и из Конфигуратора

Этот способ работает и для файловых, и для серверных баз. Консоль не нужна, права администратора кластера тоже.

Через стандартную функцию

  1. Включите показ служебных функций: Главное меню → Сервис → Параметры, флажок, который отображает команду функций для технического специалиста. В ранних релизах 8.3 команда называлась «Все функции».
  2. Откройте Главное меню → Функции для технического специалиста.
  3. В ветке Стандартные выберите Активные пользователи.

Форма показывает пользователя, компьютер, приложение, время начала и номер сеанса. Список не обновляется сам — жмите кнопку обновления на панели формы.

Через раздел «Администрирование» в типовых

В конфигурациях на Библиотеке стандартных подсистем (БП 3.0, ЗУП 3.1, УТ 11) есть своя форма. Путь: Администрирование → Обслуживание, ссылка «Активные пользователи» в группе журнала регистрации. Форма умеет больше стандартной: открыть журнал регистрации по выбранному пользователю и завершить его сеанс.

В Конфигураторе

Меню Администрирование → Активные пользователи. Удобно, когда Конфигуратор уже открыт для обновления: сразу видно, кто мешает получить монопольный доступ.

Завершение чужого сеанса обрывает работу пользователя. Несохранённый документ пропадёт. Перед этим предупредите человека или делайте это вне рабочего времени.

Запросы к SQL: что можно увидеть на стороне СУБД

Сразу о главном ограничении. В клиент-серверной базе с СУБД соединяется не компьютер пользователя, а рабочий процесс сервера 1С (rphost). Поэтому СУБД видит соединения от имени одного SQL-логина с сервера 1С, а не Иванова и Петрову.

Имена пользователей 1С в системных представлениях СУБД не хранятся. Таблицы базы 1С вроде списка пользователей содержат учётные записи, а не сеансы. Через SQL реально узнать другое: сколько соединений держит база и какие запросы сейчас выполняются.

MS SQL Server — соединения с конкретной базой:

SELECT session_id, login_name, host_name, program_name,
       status, login_time, last_request_end_time
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('buh_base')
ORDER BY login_time;

PostgreSQL — то же самое:

SELECT pid, usename, client_addr, state, backend_start, query
FROM pg_stat_activity
WHERE datname = 'buh_base'
ORDER BY backend_start;

Имя buh_base замените на имя базы в СУБД. Сопоставить SQL-соединение с пользователем 1С можно через консоль кластера: в свойствах сеанса есть номер соединения с СУБД, в списке соединений кластера видно, какой рабочий процесс его держит.

SQL полезен, когда консоль 1С недоступна или нужно найти тяжёлый запрос. Для списка людей в базе он не подходит.

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

Внутри своей базы

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

&НаСервереБезКонтекста
Функция СписокАктивныхСеансов()

    Результат = Новый Массив;

    Для Каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл

        ИмяПользователя = "";
        Если Сеанс.Пользователь <> Неопределено Тогда
            ИмяПользователя = Сеанс.Пользователь.Имя;
        КонецЕсли;

        Строка = Новый Структура;
        Строка.Вставить("Пользователь", ИмяПользователя);
        Строка.Вставить("Компьютер", Сеанс.ИмяКомпьютера);
        Строка.Вставить("Приложение", ПредставлениеПриложения(Сеанс.ИмяПриложения));
        Строка.Вставить("Начало", Сеанс.НачалоСеанса);
        Строка.Вставить("НомерСеанса", Сеанс.НомерСеанса);
        Результат.Добавить(Строка);

    КонецЦикла;

    Возврат Результат;

КонецФункции

Пустое имя пользователя бывает, когда в базе не заведено ни одного пользователя. Свой сеанс узнаёте функцией НомерСеансаИнформационнойБазы() — по ней удобно исключить себя из списка.

Чтобы считать только людей, отфильтруйте по ИмяПриложения: оставьте 1CV8C, 1CV8 и WebClient. Фоновые задания и Конфигуратор в такой подсчёт не попадут.

Из внешней программы по всем базам кластера

Через COM-объект V8.COMConnector можно подключиться к агенту кластера и получить сеансы всех баз. Схема: ConnectAgent("tcp://server:1540") → GetClusters() → Authenticate(Кластер, Логин, Пароль) → GetSessions(Кластер). У каждого сеанса есть userName, Host, AppID, StartedAt и ссылка на базу.

Для работы COM нужна зарегистрированная comcntr.dll той же версии, что и сервер. Регистрируется так же, как radmin.dll, через regsvr32. Если COM неудобен, в скриптах проще использовать rac из раздела про автоматизацию.

Журнал регистрации: кто работал вчера и неделю назад

Консоль и форма «Активные пользователи» показывают только текущий момент. Ответ на вопрос «кто был в базе ночью, когда пропали документы» даёт журнал регистрации.

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

Каждая пара «начало — завершение» с одним номером сеанса — это один вход в программу. Если завершения нет, сеанс оборвался аварийно: выключили компьютер, упал клиент или сеанс завершили из консоли.

В коде журнал выгружается методом ВыгрузитьЖурналРегистрации. В отборе по событию используются служебные идентификаторы _$Session$_.Start и _$Session$_.Finish.

Журнал хранит только то, что включено уровнем регистрации. Если уровень выставлен в «Не регистрировать», истории входов не будет. Проверьте настройку заранее, а не в день разбора инцидента.

Журнал лежит в каталоге 1Cv8Log: у файловой базы — рядом с файлом базы, у серверной — в каталоге кластера на сервере. Старые записи удаляются по настройке периода хранения.

Автоматизация: выгрузка по расписанию и оповещения

Для регулярного контроля консоль неудобна: её надо открывать руками. Здесь выручает rac — консольный клиент сервера администрирования (RAS). Он ставится вместе с сервером 1С.

Запуск сервера администрирования

rac работает не напрямую с агентом, а через службу RAS (по умолчанию порт 1545). На Windows её регистрируют как службу, на Linux запускают командой:

/opt/1cv8/x86_64/8.3.24.1586/ras cluster --daemon

Команды для списка сеансов

rac localhost:1545 cluster list
rac localhost:1545 session list --cluster=<uuid-кластера>
rac localhost:1545 session list --cluster=<uuid-кластера> --licenses

Первая команда выводит идентификатор кластера, его подставляете в следующие. Вторая даёт сеансы со всеми полями: user-name, host, app-id, started-at, last-active-at. Третья показывает, какие лицензии заняты сеансами. Если на кластере есть администратор, добавьте --cluster-user и --cluster-pwd. Отбор по одной базе и остальные параметры смотрите в rac help session.

Что можно собрать на этой основе

  • 📊 Скрипт по расписанию (Планировщик заданий Windows или cron) пишет список сеансов в файл раз в 10–15 минут. Через месяц у вас статистика пиковой нагрузки.
  • 🔔 Оповещение, когда занятых лицензий больше заданного порога. Например, из 50 лицензий занято 47 — пора докупать или искать «забытые» сеансы.
  • 🧹 Отчёт по сеансам, где last-active-at старше 8 часов, — кандидаты на завершение после конца смены.
  • 🛠 Регламентное задание в самой базе на основе ПолучитьСеансыИнформационнойБазы(). Подходит, если доступа к серверу нет, а права в базе есть.

Системы мониторинга вроде Zabbix подключаются к тем же данным: скрипт с rac отдаёт число сеансов как метрику.

Не завершайте сеансы скриптом автоматически в рабочее время. Пользователь потеряет несохранённые данные, а фоновое задание оборвётся посреди обработки. Автозавершение — только ночью и только для сеансов людей, не фоновых заданий.

Что именно вам нужно узнать?

Частые вопросы

Почему в списке висит пользователь, который давно ушёл домой?
Клиент мог закрыться аварийно, а сервер ещё держит сеанс. Сравните «Последнюю активность» с текущим временем. Сервер со временем сам удалит такой сеанс; завершить вручную можно из консоли кластера.
Почему в списке один и тот же пользователь дважды?
Человек открыл два окна программы или работает с двух компьютеров. Каждое окно клиента — отдельный сеанс, и каждое может занять лицензию.
Видно ли активных пользователей файловой базы с другого компьютера?
Только изнутри базы: форма «Активные пользователи» в Предприятии или в Конфигураторе. Консоли и rac у файловой базы нет, так как нет кластера.
Кто такой «пустой» пользователь с приложением BackgroundJob?
Это фоновое или регламентное задание: обмен, загрузка курсов валют, обновление полнотекстового поиска. Это не человек, и лицензию клиента оно не занимает.
Можно ли увидеть, кто именно держит блокировку?
Да, в консоли кластера: в списке сеансов колонки «Блокировано СУБД» и «Захвачено СУБД» показывают, кто кого ждёт.