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

· 9 мин

Содержание

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

Способ зависит от того, что вам нужно. Узнать, кто держит базу перед обновлением, хватит формы в программе. Найти, чей сеанс тормозит остальных, получится только на сервере: в консоли кластера, через rac или в СУБД. Всё описанное относится к платформе 8.3 с интерфейсом «Такси».

Где открыть список пользователей, которые сейчас в программе

Есть четыре точки входа. Права нужны административные: обычный пользователь список чужих сеансов не увидит.

ГдеПутьЧто умеетВариант базы
Форма конфигурацииАдминистрирование → Обслуживание → Активные пользователисписок, фильтр, журнал регистрации по пользователю, завершение сеансафайловый и серверный
Форма платформыВсе функции → Стандартные → Активные пользователитолько списокфайловый и серверный
КонфигураторАдминистрирование → Активные пользователитолько списокфайловый и серверный
Консоль кластераКластеры → кластер → Информационные базы → база → Сеансысписок, блокировки, нагрузка, завершениетолько серверный

Команды «Все функции» по умолчанию в меню нет. Включите её: главное меню (кнопка с тремя полосками) → Сервис и настройки → Параметры, флажок «Отображать команду “Все функции”». После этого пункт Все функции появится в том же главном меню.

Если конфигурация нетиповая или старая и ссылки в разделе «Администрирование» нет, форма платформы через «Все функции» работает в любой базе на 8.3.

Консоль кластера: подготовка

Консоль «Администрирование серверов 1С Предприятия» ставится вместе с платформой, если при установке отметить компонент администрирования. Если оснастка открывается пустой или с ошибкой, зарегистрируйте radmin.dll той версии платформы, что стоит на сервере. Командную строку запустите от имени администратора:

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

Номер в пути замените на свою версию. Версия консоли должна совпадать с версией сервера, иначе подключение не пройдёт. В консоли добавьте центральный сервер: имя компьютера и порт агента, по умолчанию 1540.

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

Каждая строка списка — один сеанс. Один человек может занимать несколько строк: например, открыл программу дважды или подключился с двух компьютеров.

Основные колонки:

  • 👤 Пользователь — имя из списка пользователей базы. Пустое имя бывает, если в базе вообще нет пользователей.
  • 🖥 Компьютер — сетевое имя машины. На терминальном сервере у всех будет одно имя сервера.
  • 📱 Приложение — чем подключились: тонкий клиент, толстый клиент, веб-клиент, Конфигуратор, COM-соединение, фоновое задание.
  • 🕐 Начало работы — когда открыт сеанс.
  • 🔢 Сеанс — номер сеанса. По нему удобно искать нужную строку в консоли кластера и в журнале регистрации.

Как читать список

Несколько типичных картин и что они значат:

  • В списке «Конфигуратор» — кто-то открыл конфигуратор. Сам по себе он не мешает работать, но обновление конфигурации базы потребует его закрыть.
  • «Фоновое задание» без имени пользователя или от служебного пользователя — работают регламентные задания: обмены, загрузка курсов, полнотекстовый поиск.
  • «COM-соединение» или «Внешнее соединение» — к базе подключилась внешняя программа или обработка обмена.
  • «Веб-клиент» или сеанс веб-сервиса — работа через браузер или HTTP-сервисы публикации.

В форме конфигурации выделите строку и откройте журнал регистрации по этому пользователю. Так видно, что человек делал в последние минуты: какие документы записывал, какие отчёты строил.

Список показывает только текущий момент. Чтобы узнать, кто был в базе вчера вечером, смотрите журнал регистрации: события «Сеанс. Начало» и «Сеанс. Завершение» с отбором по дате.

Как найти сеанс, который держит блокировку

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

В консоли кластера

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

Узел Блокировки в дереве базы показывает объектные блокировки 1С: например, кто открыл объект на редактирование или держит монопольный режим.

Через rac

На сервере должна работать служба ras (сервер администрирования, порт по умолчанию 1545). Утилита rac лежит в папке bin платформы.

rac cluster list
rac infobase summary list --cluster=<uuid-кластера>
rac session list --cluster=<uuid-кластера> --infobase=<uuid-базы>

В выводе rac session list у каждого сеанса есть поля user-name, host, app-id, started-at, last-active-at. Для поиска блокировок смотрите blocked-by-dbms и blocked-by-ls: там номер сеанса, который мешает этому. Ноль — блокировки нет.

Если у кластера задан администратор, добавьте к командам --cluster-user=<имя> --cluster-pwd=<пароль>.

В СУБД

Когда в 1С ничего не видно, а запросы висят, смотрите прямо в СУБД.

  • MS SQL Server — представление sys.dm_exec_requests, поле blocking_session_id:
SELECT session_id, blocking_session_id, wait_type, wait_time, command
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
  • PostgreSQL — функция pg_blocking_pids:
SELECT pid, pg_blocking_pids(pid) AS blocked_by, state, query_start, left(query, 100)
FROM pg_stat_activity
WHERE cardinality(pg_blocking_pids(pid)) > 0;

Номер процесса СУБД с сеансом 1С сопоставляется через консоль кластера: у соединения рабочего процесса видно, какой сеанс его использует. Для регулярного разбора блокировок включают технологический журнал с событиями TLOCK, TTIMEOUT и TDEADLOCK.

Диагностика: выберите симптом

Как завершить сеанс или отключить всех пользователей

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

Один сеанс

  • В программе (серверная база): в форме Активные пользователи выделите строку и нажмите «Завершить сеанс». Программа спросит параметры администрирования кластера, если они заданы.
  • В консоли кластера: правой кнопкой по сеансу → «Удалить».
  • Через rac:
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Идентификатор сеанса берите из поля session вывода rac session list, а не номер из колонки «Сеанс».

Все пользователи сразу

Для обновления или регламентных работ удобнее не «убивать» сеансы по одному, а поставить блокировку входа. В типовых конфигурациях: Администрирование → Обслуживание → Блокировка работы пользователей.

  1. Укажите сообщение для пользователей и время начала и окончания блокировки.
  2. Задайте код разрешения — с ним вы сами сможете войти, добавив в строку запуска /UC<код>.
  3. Нажмите «Установить блокировку».

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

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

Тот же результат на сервере даёт консоль кластера: в свойствах информационной базы есть блокировка начала сеансов с сообщением и кодом разрешения.

Чем отличается файловый вариант от клиент-серверного

Набор инструментов зависит от того, где лежит база.

ВозможностьФайловая базаКлиент-серверная база
Список активных пользователей в программеестьесть
Консоль кластера и racнетесть
Поиск сеанса с блокировкойнет, только косвенноконсоль, rac, СУБД
Завершение чужого сеанса из программынетесть
Блокировка входа пользователейестьесть

Файловая база

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

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

На терминальном сервере это делается в диспетчере задач на вкладке «Пользователи». Закрывайте процесс 1С конкретного пользователя только после того, как убедились, что он не работает с данными.

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

Клиент-серверная база

Сервер 1С знает все сеансы всех баз кластера. В консоли можно смотреть сеансы сразу по всему кластеру (узел Сеансы на уровне кластера) или по одной базе. Там же видно, какой рабочий процесс обслуживает сеанс и сколько он занял времени СУБД.

Учтите лицензии: каждый клиентский сеанс занимает лицензию. Посмотреть, какой ключ или программная лицензия выдана сеансу, можно командой rac session list --cluster=<uuid> --licenses.

Регулярный контроль сеансов без ручной проверки

Открывать консоль каждый час неудобно. Мониторинг можно автоматизировать несколькими способами.

Скрипт на rac по расписанию

Простейший вариант — подсчёт сеансов и запись в лог через Планировщик заданий Windows:

@echo off
set RAC="C:\Program Files\1cv8\8.3.x.x\bin\rac.exe"
set CL=<uuid-кластера>
set IB=<uuid-базы>
for /f %%n in ('%RAC% session list --cluster=%CL% --infobase=%IB% ^| find /c "session-id"') do set CNT=%%n
echo %date% %time% sessions=%CNT% >> C:\1c-monitor\sessions.log

Каждая запись сеанса в выводе rac содержит строку session-id, поэтому её подсчёт даёт число сеансов. Тот же приём на Linux делается через grep -c и cron. Дальше лог можно разбирать или отправлять оповещение, если число сеансов превышает число купленных лицензий.

Журнал регистрации

Журнал хранит историю входов и выходов. Отбор по событиям «Сеанс. Начало» и «Сеанс. Завершение» за период показывает, кто и когда работал. Это полезно при разборе спорных правок: видно, был ли пользователь в базе в момент изменения документа.

Регламентные задания

Сеансы фоновых заданий тоже видны в списке. Чтобы понимать, какие из них запланированы, откройте Администрирование → Обслуживание → Регламентные и фоновые операции → Регламентные и фоновые задания. Там видно расписание, время последнего запуска и результат.

Тяжёлые задания (полнотекстовый индекс, обмены с большим объёмом) лучше переносить на ночь. Днём они создают те самые блокировки, ради которых вы ищете виновника.

Инструменты для крупных внедрений

Для серверов с десятками баз используют Центр управления производительностью из состава КИП 1С и системы мониторинга вроде Zabbix с опросом через rac. Они собирают историю сеансов, длительных вызовов и блокировок и шлют оповещения.

Мониторинг сеансов настроен
Выполнено: 0 / 5

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

Может ли обычный пользователь увидеть, кто ещё в базе?
Нет. Форма «Активные пользователи» требует административных прав. Без них список чужих сеансов недоступен.
Почему у всех пользователей в колонке «Компьютер» одно и то же имя?
Они работают через терминальный сервер или RDP. Колонка показывает машину, где запущен клиент 1С, то есть сам сервер.
Видно ли в списке тех, кто работает через веб-браузер?
Да. Такие сеансы отображаются с приложением «Веб-клиент», если база опубликована на веб-сервере.
Как узнать, кто был в 1С ночью, когда пропали данные?
Список активных пользователей хранит только текущие сеансы. Историю входов смотрите в журнале регистрации за нужный период.
Занимает ли лицензию Конфигуратор или фоновое задание?
Фоновые задания на сервере лицензию не занимают. Клиентские сеансы, включая Конфигуратор, лицензию используют.