Зависший пользователь держит базу: четыре способа завершить его сеанс

· 9 мин

Содержание

В клиент-серверной 1С сессию пользователя закрывают в консоли кластера: Кластеры → <кластер> → Информационные базы → <база> → Сеансы, правый клик по сеансу и команда Удалить. Без графической консоли то же делает утилита rac командой rac session terminate. В файловой базе кластера нет, и сеанс там равен процессу 1cv8.exe или 1cv8c.exe на компьютере пользователя: его закрывают в диспетчере задач или через список открытых файлов на сервере, где лежит база.

Какой способ выбрать? Консоль — для разового случая, когда нужно выгнать одного-двух человек. rac и код — когда операция повторяется: перед ночным обновлением, по расписанию, из скрипта. Диспетчер задач — последний вариант, когда консоль недоступна или сеанс не удаляется штатно.

Сначала посмотрите, кто и чем занят

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

Список текущих сеансов можно получить тремя путями:

  • 🖥️ Консоль кластера — полная картина: пользователь, компьютер, приложение, время начала, рабочий процесс, занятая лицензия.
  • 🔧 Конфигуратор → Администрирование → Активные пользователи — только просмотр, завершить отсюда нельзя.
  • 📋 Пользовательский режим → Все функции → Стандартные → Активные пользователи — тот же список платформы. В типовых конфигурациях на БСП есть одноимённая обработка с командой завершения сеанса (о ней ниже).

Главное в списке — колонка «Приложение». По ней понятно, что за сеанс перед вами:

ПриложениеЧто этоМожно ли удалять
Тонкий клиент, 1CV8CОбычная работа пользователяДа, предупредив человека
Толстый клиент, 1CV8Работа в толстом клиентеДа, предупредив
Конфигуратор, DesignerКто-то в КонфигуратореОсторожно: может идти обновление
Фоновое задание, BackgroundJobРегламентные задания, обменыТолько если задание зависло
Веб-клиент, WebClientВход через браузерДа
COM-соединение, COMConnectionВнешняя программа, обработкаВыясните, чья
HTTP- и веб-сервисыИнтеграции, мобильные клиентыОбычно короткие, сами закрываются

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

Завершение сессии в консоли администрирования кластера

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

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

Номер версии в пути подставьте свой. Командную строку запускайте от имени администратора.

Пошагово

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

Сеанс пропадает из списка за несколько секунд. Пользователь получает сообщение о разрыве соединения, а программа у него закрывается или предлагает перезапуск.

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

Если сеанс не удаляется

Бывает, что сеанс исчезает и тут же появляется снова, или висит со статусом «спящий». Порядок действий:

  1. Посмотрите в узле Соединения соединения этого пользователя и удалите их тоже.
  2. Выясните, какой рабочий процесс обслуживает сеанс (колонка с процессом в списке сеансов).
  3. Если сеанс держит блокировки и мешает остальным, а удалить его не выходит, остаётся перезапуск рабочего процесса rphost. Это способ из раздела про диспетчер задач, с его последствиями.

Команда rac: завершение сеанса без графической консоли

Утилита rac работает через сервер администрирования ras. Сервис ras должен быть запущен, порт по умолчанию — 1545. Утилита удобна на Linux-серверах, где оснастки MMC нет, и в скриптах.

Порядок команд:

rem 1. Узнать идентификатор кластера
rac cluster list

rem 2. Список сеансов кластера
rac session list --cluster=<id-кластера>

rem 3. Завершить конкретный сеанс
rac session terminate --cluster=<id-кластера> --session=<id-сеанса>

Если в кластере есть администраторы, добавьте к командам --cluster-user=<логин> --cluster-pwd=<пароль>. Идентификаторы — это длинные GUID из вывода предыдущих команд. Чтобы сузить список до одной базы, к session list добавляют --infobase=<id-базы>, а идентификатор базы берут из rac infobase summary list --cluster=<id-кластера>.

Команда rac session list --licenses выводит, какую лицензию занимает каждый сеанс. Она пригодится, когда пользователи жалуются на «нет свободной лицензии», а людей в программе вроде бы мало.

Остальные параметры — сообщение пользователю при завершении, фильтры, формат вывода — зависят от версии платформы. Смотрите их в справке: rac help session.

Программное завершение сеанса из кода 1С

Встроенный язык умеет показать список сеансов, но завершить чужой сеанс напрямую не может. Для этого нужен доступ к агенту кластера.

Посмотреть сеансы текущей базы

Код ниже работает на сервере и выводит, кто сейчас в базе:

Для Каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл
	ИмяПользователя = ?(Сеанс.Пользователь = Неопределено, "<без пользователя>", Сеанс.Пользователь.Имя);
	Сообщить(СтрШаблон("%1 | %2 | %3 | %4",
		Формат(Сеанс.НомерСеанса, "ЧГ=0"),
		ИмяПользователя,
		Сеанс.ИмяКомпьютера,
		Сеанс.ИмяПриложения));
КонецЦикла;

Свой собственный сеанс программа закрывает методом ЗавершитьРаботуСистемы() на клиенте.

Завершить чужой сеанс через COM-соединение с агентом

На Windows-сервере для этого используют COM-объект V83.COMConnector. Библиотека comcntr.dll должна быть зарегистрирована через regsvr32, а её версия — совпадать с версией сервера. Пример ниже находит сеансы пользователя «Иванов» в базе buh и завершает их:

Коннектор = Новый COMОбъект("V83.COMConnector");
Агент = Коннектор.ConnectAgent("tcp://srv1c:1540");

Кластеры = Агент.GetClusters().Выгрузить();
Для Каждого Кластер Из Кластеры Цикл
	// Логин и пароль администратора кластера; пустые, если администраторы не заданы
	Агент.Authenticate(Кластер, "", "");

	Сеансы = Агент.GetSessions(Кластер).Выгрузить();
	Для Каждого Сеанс Из Сеансы Цикл
		Если Сеанс.UserName = "Иванов" И Сеанс.infoBase.Name = "buh" Тогда
			Агент.TerminateSession(Кластер, Сеанс);
		КонецЕсли;
	КонецЦикла;
КонецЦикла;

Выгрузить() превращает массив COM в обычный массив 1С, так по нему удобнее идти циклом. Чтобы случайно не выгнать фоновые задания, добавьте в условие проверку Сеанс.AppID — например, оставьте только 1CV8C и 1CV8.

Пароль администратора кластера в коде открытым текстом хранить нельзя. Берите его из безопасного хранилища или параметров, к которым нет доступа у рядовых пользователей.

Готовая обработка в типовых конфигурациях

В БП 3.0, ЗУП 3.1, УТ 11 и других конфигурациях на БСП есть обработка «Активные пользователи» с командой завершения выбранного сеанса. В клиент-серверной базе она при первом использовании спросит параметры администрирования кластера: адрес агента, логин и пароль. По сути это тот же COM-вызов, только с формой. Найти её проще всего из раздела Администрирование через поиск по разделу по слову «активные».

Диспетчер задач: принудительное завершение процесса

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

ПроцессГде работаетЧто оборвётся
1cv8c.exeКомпьютер или терминальный сервер пользователяТолько сеанс этого пользователя
1cv8.exeТо же, толстый клиент или КонфигураторТолько этот сеанс
rphost.exeСервер 1СВсе сеансы, которые обслуживает процесс, у многих людей сразу
ragent.exe, rmngr.exeСервер 1СВесь кластер. Не трогайте

На терминальном сервере удобно снять клиент конкретного человека командой:

taskkill /FI "USERNAME eq DOMAIN\ivanov" /IM 1cv8c.exe /F

Тот же результат даёт вкладка «Пользователи» диспетчера задач: развернуть нужного пользователя, выбрать процесс 1С, Снять задачу.

Завершение rphost.exe обрывает работу всех пользователей этого процесса, а не одного. Делайте это только в нерабочее время или предупредив всех. Кластер сам запустит новый рабочий процесс, но всё несохранённое пропадёт.

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

Файловая база: как выгнать пользователя без кластера

В файловом варианте нет ни консоли, ни rac. Каждый пользователь сам открывает файл 1Cv8.1CD. Значит, и закрывать нужно процесс или открытый файл.

Способ 1. Открытые файлы на сервере

Если база лежит в общей папке на Windows-сервере:

  1. На сервере откройте fsmgmt.msc (Общие папки).
  2. Перейдите в Открытые файлы.
  3. Найдите строки с файлом 1Cv8.1CD и путём к базе. В колонке «Пользователь» видно, кто его держит.
  4. Правый клик → Закрыть открытый файл.

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

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

Способ 2. Процесс на компьютере пользователя

Подключитесь к компьютеру удалённо или попросите коллегу закрыть 1С. Если программа не отвечает — снимите 1cv8c.exe или 1cv8.exe в диспетчере задач.

Если база не открывается монопольно, а в ней никого нет

После аварийного выхода в каталоге базы иногда остаётся служебный файл блокировки 1Cv8.1CL. Если все пользователи точно вышли (проверьте открытые файлы на сервере), а Конфигуратор пишет, что база занята, этот файл можно удалить. Делайте это только при закрытой у всех 1С: удаление при работающих пользователях ведёт к ошибкам записи.

Блокировка входа и таймауты: чтобы сеансы не копились

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

Блокировка начала сеансов

В клиент-серверной базе это делается в консоли: свойства информационной базы → флажок Блокировка начала сеансов включена. Там же задают:

  • ⏰ время начала и окончания блокировки;
  • 💬 сообщение, которое увидят пользователи при попытке войти;
  • 🔑 код разрешения — с ним администратор сможет зайти, несмотря на блокировку.

Чтобы войти с кодом разрешения, добавьте к строке запуска параметр /UC<код>, например /UC12345. Без кода войти не получится ни у кого, включая вас.

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

Таймауты неактивных сеансов

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

Разумная практика для офиса — завершать спящие сеансы через несколько часов. Тогда утром на сервере не висят вчерашние «хвосты», а человек, у которого моргнул интернет, успевает переподключиться к своему сеансу.

Перед обновлением базы
Выполнено: 0 / 6

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

Освобождается ли лицензия сразу после удаления сеанса?
Да, программная лицензия возвращается в пул, как только сеанс исчезает из списка в консоли. Если «хвост» остался — лицензия занята, пока его не удалить.
Узнает ли пользователь, что его сеанс завершили?
Да. Клиент получит сообщение о разрыве соединения с сервером. Причину программа не показывает, поэтому предупредите человека заранее.
Можно ли закрыть сеанс без прав администратора кластера?
Нет. Если на кластере заданы администраторы, консоль, rac и COM-соединение потребуют их логин и пароль. Права пользователя внутри самой базы для этого не подходят.
Почему сеанс фонового задания появляется снова после удаления?
Его запускает планировщик регламентных заданий. Чтобы задания не стартовали, включите в свойствах базы блокировку регламентных заданий.
Что будет с документом, который пользователь проводил в момент завершения?
Транзакция откатится, документ останется в состоянии до проведения. Данные в базе не разъедутся, но документ придётся провести заново.