Зависший пользователь в базе 1С: как выгнать сеанс и снять блокировки

· 9 мин

Содержание

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

Самый короткий путь для клиент-серверной базы: консоль администрирования серверов 1С → ваш кластер → «Информационные базы» → нужная база → «Сеансы» → правая кнопка по сеансу → «Удалить». Для файловой базы и для пользователей, у которых окно ещё отвечает, хватает списка активных пользователей в самой 1С.

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

Сначала выясните, кто и чем занят

Не удаляйте сеансы вслепую. Откройте список и посмотрите три вещи: имя пользователя, приложение и время начала сеанса.

Типичные картины:

  • 🕒 сеанс начат вчера вечером, пользователь давно ушёл домой — «забытый» сеанс, его можно убирать;
  • 🔒 сеанс активен, но «Вызов» длится десятки минут — идёт тяжёлая операция (закрытие месяца , перепроведение), и обрыв всё откатит;
  • ⚙️ сеанс фонового задания или COM-соединение — это не человек, а регламентное задание или обмен, их выгоняют отдельно и осторожно.

Для клиент-серверной базы эти же данные есть в консоли кластера: колонки «Приложение», «Начало сеанса», «Последняя активность», «Потребление памяти». Для файловой — только список в 1С.

Как понять, что сеанс действительно завис

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

  1. Меняется ли в консоли «Последняя активность» и счётчики вызовов. Если растут — сеанс работает, просто долго.
  2. Нагружен ли процессор или диск на сервере. Тяжёлый отчёт может честно считаться двадцать минут.
  3. Есть ли у сеанса запись в списке ожидающих блокировку. Ожидание блокировки без движения дольше обычного времени операции — признак зависания.
  4. Отвечает ли клиентский компьютер. Если пользователь выключил ноутбук, сеанс остаётся на сервере и ждёт тайм-аута, и его можно удалять сразу.

Штатные средства: список активных пользователей

Если вы работаете в базе сами и вам нужно закрыть чужой сеанс, начните с интерфейса 1С.

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

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

Что умеет штатный список:

ДействиеРаботаетНе работает
Увидеть, кто в базевсегда—
Отправить сообщениеклиентам, которые отвечаютзависшим сеансам
Отключить пользователяживым клиентамсеансам без связи с клиентом

Зависший клиент на связь не отвечает, и «вежливое» закрытие до него не доходит. Тогда переходим на уровень кластера.

В БСП есть параметр запуска /C"ЗавершитьРаботуПользователей": сеанс с этим параметром закрывает остальных по таймеру. Удобно, когда нужно вывести всех из базы перед обновлением, а выгонять руками двадцать человек не хочется.

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

Консоль администрирования серверов 1С — основной инструмент для клиент-серверного варианта. Она ставится вместе с платформой (как отдельный компонент установки) и подключается к центральному серверу на порту 1541.

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

  1. Запустите консоль и раскройте «Центральные серверы 1С:Предприятия 8.3» → ваш сервер → «Кластеры» → кластер.
  2. Откройте «Информационные базы» → выберите базу → «Сеансы».
  3. Найдите нужный сеанс по имени пользователя. Если сеансов много, отсортируйте по времени последней активности.
  4. Нажмите правой кнопкой → «Удалить» и подтвердите.
  5. Обновите список (F5): сеанс должен исчезнуть. Если остался — переходите к разделу про рабочие процессы ниже.

Для пакетной работы у кластера есть утилита администрирования rac. Примеры команд, в которых можно не сомневаться:

rac cluster list
rac session list --cluster=<идентификатор_кластера>
rac session terminate --cluster=<идентификатор_кластера> --session=<идентификатор_сеанса>

Первая покажет идентификатор кластера, вторая — все сеансы с их идентификаторами, третья завершит выбранный. Для вызова на самом сервере понадобится запущенный сервер администрирования (ras). Остальные параметры смотрите в справке rac help.

Если консоль не подключается или ругается на радмин

Классика после установки новой платформы: консоль запускается, но вместо списка кластеров — ошибка об отсутствии компонента администрирования. Приём практика — перерегистрировать библиотеку radmin.dll из каталога bin установленной платформы командой regsvr32 от имени администратора. После этого консоль обычно подхватывает сервер. Если версии платформы на сервере и на рабочем месте сильно разные, ставьте консоль той же версии, что и сервер.

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

Блокировки: что мешает проводить документы

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

  • 🧩 Управляемые блокировки 1С — объектные: по регистрам, документам, пространствам данных. Их выставляет прикладной код при проведении.
  • 🗄️ Блокировки СУБД — на уровне таблиц и строк в PostgreSQL или MS SQL. Их выставляет сервер баз данных.

Управляемые блокировки видны в консоли кластера: раздел «Блокировки» внутри кластера (и «Сеансы» с отметкой, кто кого ждёт). Находите сеанс-«хозяина» блокировки и завершаете его — либо ждёте окончания операции, если это не зависание, а просто долгое проведение.

Что смотреть, прежде чем рубить:

ПризнакЧто это обычно значитЧто делать
Сеанс «ждёт блокировку» часамиКто-то держит её и зависНайти владельца, завершить
Все сеансы в очереди друг за другомТяжёлая транзакция одного пользователяПодождать или завершить виновника
Блокировки есть, а сеансов нетОстаток от оборванного процессаОбновить консоль, перезапустить рабочий процесс (см. ниже)

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

Когда сеанс не удаляется: рабочие процессы и ОС

Бывает, что в консоли сеанс удалён, а через минуту снова на месте, или клиент завис вместе с процессом на сервере. Тогда опускаемся на уровень операционной системы.

Рабочий процесс кластера

Сеансы живут в рабочих процессах rphost. В консоли они видны в разделе «Рабочие серверы» → «Рабочие процессы». Остановка рабочего процесса завершает все сеансы, которые он обслуживает, включая чужие. Поэтому:

  • ⛔ не убивайте rphost в разгар рабочего дня, если процессов один-два;
  • ✅ при нескольких рабочих процессах сначала посмотрите, какие сеансы на каком висят;
  • 🕘 лучше делать это вне часов пиковой нагрузки.

Убить конкретный процесс можно из диспетчера задач (вкладка «Подробности», колонка PID) или командой:

taskkill /PID <номер_процесса> /F

На Linux аналог — kill <PID>. Кластер сам поднимет новый рабочий процесс.

Терминальный сервер и клиентский компьютер

Если пользователи работают через удалённый рабочий стол, зависший 1cv8.exe есть смысл прибить на самом терминальном сервере. Диспетчер задач → вкладка «Пользователи» → выберите нужного → «Отключить» либо «Выйти». Из командной строки список и выход выглядят так:

query user
logoff <ID_сеанса> /server:<имя_сервера>

logoff выбрасывает пользователя из Windows целиком — со всеми открытыми программами. Для одного зависшего окна 1С достаточно снять только процесс 1cv8.exe этого пользователя.

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

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

  1. Попросите пользователей выйти или найдите, на каком компьютере запущен 1cv8.exe.
  2. Снимите процесс на этом компьютере (диспетчер задач, при необходимости — удалённо).
  3. Если база открыта «в никуда» с сетевой шары, проверьте открытые файлы на файловом сервере: в оснастке «Общие папки» → «Открытые файлы» найдите 1Cv8.1CD и закройте дескриптор.

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

Блокировки на стороне СУБД

Это крайняя мера, когда 1С-сеанса уже нет, а в СУБД висит транзакция и мешает всем. Или когда кластер не отвечает вообще.

В PostgreSQL ищем зависшие запросы по представлению pg_stat_activity и завершаем бэкенд функцией pg_terminate_backend:

SELECT pid, usename, state, query_start, wait_event_type, left(query, 80)
FROM pg_stat_activity
WHERE datname = '<имя_базы>' AND state <> 'idle'
ORDER BY query_start;

SELECT pg_terminate_backend(<pid>);

В MS SQL Server процессы смотрят процедурой sp_who2 (колонка BlkBy показывает, кто кого блокирует), а соединение разрывают командой KILL <spid>.

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

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

Не дать сеансам зависнуть снова

Один раз выгнать зависший сеанс несложно. Куда полезнее сделать так, чтобы это не нужно было делать каждую неделю.

  • 🔁 Регламентные перезапуски. Рабочие процессы кластера имеет смысл периодически перезапускать. В настройках кластера есть интервал перезапуска и допустимый объём памяти рабочего процесса — подберите значения под нагрузку, чтобы перезапуск шёл ночью.
  • 🚪 Блокировка начала сеансов. Перед обновлением или массовой обработкой включайте её в свойствах информационной базы в консоли: задайте период, сообщение для пользователей и код доступа для себя. Новые пользователи не войдут, а ваши сеансы — да.
  • ⏰ Расписание тяжёлых заданий. Закрытие месяца и перепроведение не должны идти в разгар рабочего дня. Выносите их на ночь и ставьте в разные интервалы.
  • 🧹 Чистка «забытых» сеансов. Заведите привычку раз в день смотреть список сеансов старше суток и убирать их. Один забытый сеанс с открытой транзакцией способен держать блокировку на регистре.
  • 📋 Журнал регистрации и технологический журнал. Если один и тот же пользователь или операция зависают снова и снова, причина в коде или в данных, а не в «глючной 1С».
Перед принудительным завершением сеанса
Выполнено: 0 / 5

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

Потеряются ли данные, если принудительно завершить сеанс?
Сохранённые документы останутся. Пропадёт всё, что человек ввёл и не записал, а текущее проведение откатится.
Можно ли завершить пользователя без прав администратора?
В консоли кластера — нет, нужны права администратора кластера или информационной базы. В списке активных пользователей — только если у вас есть соответствующее право в базе.
Почему сеанс снова появляется после удаления?
Клиентское приложение пользователя ещё работает и переподключилось. Закройте процесс 1cv8.exe на его компьютере или терминальном сервере, потом удаляйте сеанс.
Чем завершение сеанса отличается от остановки рабочего процесса?
Завершение сеанса затрагивает одного пользователя. Остановка rphost выбросит всех, кого он обслуживал, поэтому делайте её вне рабочего времени.
Как выгнать всех пользователей перед обновлением?
Включите блокировку начала сеансов, отправьте сообщение и удалите оставшиеся сеансы в консоли кластера. После этого можно заходить в базу в монопольном режиме.