Кто сейчас работает в базе 1С: сеансы, журнал регистрации и блокировки

· 9 мин

Содержание

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

Для серверной базы полнее картина в консоли администрирования кластера: там видно компьютер, тип клиента, время последней активности, занятую лицензию и ожидание на блокировках. Кто входил вчера или неделю назад, покажет журнал регистрации. Всё ниже относится к платформе 8.3 и не зависит от конфигурации: способы одинаковы для Бухгалтерии, ЗУП, УТ и любой другой базы.

СпособЧто показываетГде работаетПрава
👥 «Активные пользователи» в режиме ПредприятияСеансы текущей базыФайловая и сервернаяАдминистратор базы
🛠 КонфигураторТо же, без запуска ПредприятияФайловая и сервернаяДоступ к Конфигуратору
🖥 Консоль кластера / racСеансы всех баз, лицензии, блокировкиТолько сервернаяАдминистратор кластера
📜 Журнал регистрацииИсторию входов и выходовФайловая и сервернаяАдминистратор базы
🗄 Запрос к СУБДСоединения рабочих процессов с базойТолько сервернаяДоступ к SQL/PostgreSQL
⚙️ Код и скриптыСеансы по расписанию, счётчикиОбеЗависит от способа

Список сеансов в 1С: Предприятии и Конфигураторе

Режим Предприятия

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

Порядок действий:

  1. Откройте главное меню (☰ в левом верхнем углу).
  2. Выберите Функции для технического специалиста.
  3. Раскройте ветку Стандартные и откройте Активные пользователи.

В списке есть колонки: пользователь, приложение (тонкий клиент, Конфигуратор, фоновое задание, COM-соединение, веб-клиент), время начала работы, компьютер, номер сеанса и номер соединения. Свой сеанс обычно помечен отдельно.

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

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

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

Строки «Фоновое задание» — это не люди. Регламентные задания (обмены, загрузка курсов, полнотекстовый поиск) создают свои сеансы. Не путайте их с «зависшими» пользователями.

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

В клиент-серверном варианте сеансы хранит кластер серверов 1С, а не сама база. Поэтому консоль кластера даёт самый полный список.

Консоль администрирования (MMC)

  1. Запустите «Администрирование серверов 1С Предприятия».
  2. Раскройте Центральные серверы 1С:Предприятия → ваш сервер → Кластеры → нужный кластер.
  3. Откройте Информационные базы → имя базы → Сеансы.
  4. Чтобы увидеть сеансы всех баз сразу, откройте узел Сеансы на уровне кластера.

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

Если консоль не открывается и пишет, что оснастка не зарегистрирована, зарегистрируйте radmin.dll той версии платформы, что стоит на сервере. Командная строка от имени администратора:

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

Номер версии в пути подставьте свой. Консоль подключается к агенту сервера на порт 1540.

Утилита rac

Утилита командной строки rac работает через сервер администрирования ras (по умолчанию порт 1545). Без запущенного ras команды не выполнятся. Базовая последовательность:

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

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

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

Журнал регистрации: кто входил в базу раньше

Список сеансов показывает только «сейчас». Чтобы узнать, кто работал ночью, сколько человек было одновременно в конце квартала или когда сотрудник последний раз заходил, нужен журнал регистрации.

Где открыть:

  • 📜 в режиме Предприятия: Функции для технического специалиста → Стандартные → Журнал регистрации;
  • 🛠 в Конфигураторе: Администрирование → Журнал регистрации;
  • 🗂 в конфигурациях на БСП: Администрирование → Обслуживание, ссылка на журнал.

Как настроить отбор :

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

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

Если журнал пустой или короткий, проверьте уровень логирования: Администрирование → Настройка журнала регистрации в Конфигураторе. При уровне «Не регистрировать» история входов не пишется. Там же задаётся период, после которого старые записи удаляются.

Запрос к СУБД: соединения рабочих процессов

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

Зачем тогда смотреть в СУБД: увидеть, какой запрос сейчас висит, кто кого блокирует и сколько соединений держит база.

MS SQL Server

SELECT s.session_id,
       s.host_name,
       s.program_name,
       s.login_name,
       s.status,
       s.last_request_end_time,
       r.blocking_session_id,
       r.wait_type,
       r.wait_time
FROM sys.dm_exec_sessions s
LEFT JOIN sys.dm_exec_requests r ON r.session_id = s.session_id
WHERE s.database_id = DB_ID('buh_base')
ORDER BY s.last_request_end_time DESC;

Имя buh_base замените на имя своей базы на SQL-сервере. Ненулевой blocking_session_id показывает, какое соединение держит блокировку.

PostgreSQL

SELECT pid,
       application_name,
       client_addr,
       state,
       query_start,
       pg_blocking_pids(pid) AS blocked_by,
       left(query, 120) AS query
FROM pg_stat_activity
WHERE datname = 'buh_base'
ORDER BY query_start;

Как связать соединение СУБД с пользователем 1С

В свойствах сеанса в консоли кластера есть сведения о соединении с СУБД. В выводе rac session list номер процесса СУБД стоит в поле db-proc-info, а время удержания — в db-proc-took. Найдите в результатах SQL-запроса тот же session_id (или pid в PostgreSQL), и вы получите имя пользователя 1С.

Блокировки и захваченные объекты: кто мешает остальным

Когда пользователи жалуются на «зависание» при проведении, ищут не просто активного пользователя, а того, кто держит блокировку.

Что проверить

  • 🔒 Управляемые блокировки 1С. В консоли кластера у базы есть узел Блокировки. Командой rac localhost:1545 lock list --cluster=<uuid-кластера> получите тот же список: какой сеанс и на какой объект поставил блокировку.
  • ⏳ Ожидание сеансов. В выводе rac session list поля blocked-by-ls и blocked-by-dbms показывают номер сеанса, который блокирует текущий на уровне управляемых блокировок и СУБД соответственно. Ненулевое значение — прямой указатель на виновника.
  • 📝 Объектная блокировка формы. Если второй пользователь открывает тот же документ, программа сообщает, что объект заблокирован, и не даёт записать изменения. Это не ошибка: кто-то держит документ открытым. Имя и компьютер видно в «Активных пользователях».
  • 🧾 Технологический журнал. Для разбора повторяющихся случаев включают технологический журнал с событиями TLOCK, TTIMEOUT и TDEADLOCK. Он показывает, кто ждал, кто держал и на какой таблице.

Что делать с найденным сеансом

  1. Найдите пользователя по колонкам «Пользователь» и «Компьютер».
  2. Позвоните и попросите закрыть документ или завершить длинную операцию (закрытие месяца , групповое перепроведение).
  3. Если человека нет на месте, завершите сеанс в консоли кластера.
  4. Если сеанс завершён, а блокировка висит, проверьте соединения в СУБД: долгая транзакция может доработать или откатиться не сразу.

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

Что вам нужно узнать о пользователях?

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

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

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

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

&НаСервере
Функция АктивныеПользователи()

    Результат = Новый ТаблицаЗначений;
    Результат.Колонки.Добавить("Пользователь");
    Результат.Колонки.Добавить("Компьютер");
    Результат.Колонки.Добавить("Приложение");
    Результат.Колонки.Добавить("Начало");

    Служебные = Новый Массив;
    Служебные.Добавить("BackgroundJob");
    Служебные.Добавить("SrvrConsole");
    Служебные.Добавить("COMConsole");

    Для Каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл
        Если Служебные.Найти(Сеанс.ИмяПриложения) <> Неопределено Тогда
            Продолжить;
        КонецЕсли;
        Строка = Результат.Добавить();
        Строка.Пользователь = ?(Сеанс.Пользователь = Неопределено,
            "<без пользователя>", Сеанс.Пользователь.Имя);
        Строка.Компьютер = Сеанс.ИмяКомпьютера;
        Строка.Приложение = ПредставлениеПриложения(Сеанс.ИмяПриложения);
        Строка.Начало = Сеанс.НачалоСеанса;
    КонецЦикла;

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

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

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

Снаружи: скрипт на rac

Для всех баз кластера удобнее командная строка. Пример для планировщика Windows: раз в 10 минут сохраняет список сеансов в файл с датой.

@echo off
set RAC="C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
set CLUSTER=<uuid-кластера>
set LOG=D:\1c-monitor\sessions_%date:~6,4%%date:~3,2%%date:~0,2%.txt

echo ===== %time% >> %LOG%
%RAC% localhost:1545 session list --cluster=%CLUSTER% >> %LOG%

Дальше файл разбирают любым средством: PowerShell, Python, загрузка в 1С. Формат вывода — блоки «поле : значение», разделённые пустой строкой. Разбор по датам в имени файла настроен под русский формат даты Windows (ДД.ММ.ГГГГ); на другой локали поправьте подстроки.

COM-соединение с агентом сервера

Третий вариант — обработка, которая подключается к агенту через V83.COMConnector: методы ConnectAgent, GetClusters, Authenticate, GetSessions. Он нужен, если мониторинг должен жить внутри 1С, но видеть все базы кластера. Компонента comcntr.dll должна быть зарегистрирована на компьютере, где выполняется код, той же версии, что и сервер.

Не опрашивайте кластер чаще раза в минуту. Частые подключения сами создают нагрузку на агент, а картина за минуту почти не меняется.

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

Почему в списке висит пользователь, который давно ушёл домой?
Чаще всего это спящий сеанс: клиент потерял связь с сервером, но кластер ещё держит сеанс. Он завершится по таймауту, заданному в свойствах информационной базы, или его можно завершить в консоли вручную.
Можно ли увидеть активных пользователей без прав администратора?
Нет. Список сеансов и журнал регистрации требуют административных прав в базе, консоль кластера — прав администратора кластера, если он задан.
Занимают ли фоновые задания лицензию?
Нет, клиентскую лицензию занимают сеансы клиентских приложений. Точно проверить, кто держит лицензии, можно командой rac session list --licenses.
Как узнать, сколько человек было в базе одновременно в прошлом месяце?
Через журнал регистрации: выгрузите события начала и завершения сеансов за период и посчитайте пересечения по времени. Либо заранее настройте сбор снимков сеансов по расписанию.
В файловой базе нет консоли кластера. Чем её заменить?
Только «Активными пользователями» в Предприятии или Конфигураторе и журналом регистрации. Кластера у файловой базы нет, поэтому rac и консоль к ней неприменимы.