Кто сейчас работает в базе 1С: список сеансов, блокировки и контроль
Содержание
Посмотреть, кто сейчас в 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С: например, кто открыл объект на редактирование или держит монопольный режим.
Через 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, а не номер из колонки «Сеанс».
Все пользователи сразу
Для обновления или регламентных работ удобнее не «убивать» сеансы по одному, а поставить блокировку входа. В типовых конфигурациях: Администрирование → Обслуживание → Блокировка работы пользователей.
- Укажите сообщение для пользователей и время начала и окончания блокировки.
- Задайте код разрешения — с ним вы сами сможете войти, добавив в строку запуска
/UC<код>. - Нажмите «Установить блокировку».
Работающие пользователи получат предупреждение, а через несколько минут программа закроет их сеансы. Новые входы будут отклоняться с вашим сообщением.
Фоновые задания блокировка в программе не всегда останавливает сразу. Если идёт обмен или закрытие месяца, дождитесь окончания или включите в свойствах базы в консоли кластера флажок блокировки регламентных заданий.
Тот же результат на сервере даёт консоль кластера: в свойствах информационной базы есть блокировка начала сеансов с сообщением и кодом разрешения.
Чем отличается файловый вариант от клиент-серверного
Набор инструментов зависит от того, где лежит база.
| Возможность | Файловая база | Клиент-серверная база |
|---|---|---|
| Список активных пользователей в программе | есть | есть |
Консоль кластера и 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. Они собирают историю сеансов, длительных вызовов и блокировок и шлют оповещения.