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

· 10 мин

Содержание

Зависший сеанс в клиент-серверной базе 1С 8.3 сбрасывают в консоли администрирования серверов: Кластер → Информационные базы → <база> → Сеансы, правый клик по сеансу → Удалить. В файловой базе консоли нет: там закрывают процесс 1cv8.exe (или 1cv8c.exe) на том компьютере, где он висит, а если компьютер недоступен — снимают сетевую блокировку файла базы на сервере, где лежит каталог.

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

Почему сеанс завис и как это распознать

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

Типичные причины зависания:

  • 🔌 Обрыв связи. Ноутбук ушёл в сон, упал VPN, пропал Wi-Fi. Клиента уже нет, а сервер ещё держит сеанс.
  • 🧱 Ожидание блокировки. Сеанс ждёт, пока другой пользователь отпустит записи, и сам блокирует третьих. Получается цепочка.
  • 🐢 Долгий серверный вызов. Тяжёлый отчёт без отборов, обработка с бесконечным циклом, запрос по огромной таблице.
  • 💥 Аварийное закрытие клиента. Процесс убит через диспетчер задач, а запись о сеансе осталась.
  • 🖥️ Зависший терминальный сеанс Windows. Пользователь «отключился» от RDP, но не вышел — 1С продолжает работать в его профиле.

Как отличить зависший сеанс от рабочего — смотрите на колонки списка сеансов в консоли:

ПризнакСеанс живойСеанс завис
«Время последней активности»обновляетсяне меняется десятки минут
«Ожидание блокировки» / «Время ожидания блокировки»пусто или растёт и сбрасываетсярастёт без остановки
«Длительность текущего серверного вызова»короткая или нольбольшая и растёт
Компьютер пользователядоступенвыключен или не отвечает

Если колонок не видно, включите их через настройку списка в консоли (правый клик по шапке таблицы). Полезно сразу добавить «Режим ожидания», «Хост», «Процесс» и «Соединение».

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

Сброс сеанса в консоли администрирования кластера

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

Пошагово

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

Регистрация консоли , если она не запускается (путь подставьте под свою версию платформы, командную строку запустите от администратора):

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

Сеанс не удаляется: работаем с соединением и процессом

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

  1. Перейдите в Кластер → Рабочие процессы → <процесс rphost> → Соединения.
  2. Найдите соединение с нужной базой и хостом пользователя, удалите его.
  3. Если удалить нечего, а блокировка остаётся — в свежих версиях платформы в контекстном меню сеанса есть команда прерывания текущего серверного вызова. Она обрывает именно долгий вызов, не закрывая сеанс.

Крайняя мера — перезапуск рабочего процесса rphost или службы сервера 1С.

Перезапуск rphost или службы обрывает сеансы ВСЕХ пользователей, которые на нём работают, а не только зависшего. Незаписанные документы пропадут, а длинные транзакции откатятся. Делайте это после предупреждения коллег или вне рабочего времени.

То же самое из командной строки через rac

Если графическая консоль недоступна (Linux-сервер, удалённый доступ без RDP), используйте утилиту rac. Ей нужен запущенный сервер администрирования ras (по умолчанию порт 1545).

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

Если у кластера задан администратор, добавьте к каждой команде --cluster-user и --cluster-pwd. Полный набор параметров для вашей версии смотрите в справке rac help session.

Как завершить сеанс прямо из программы

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

КонфигурацияГде искать список
Бухгалтерия 3.0Администрирование → Обслуживание → Активные пользователи
ЗУП 3.1Администрирование → Обслуживание → Активные пользователи
УТ 11НСИ и администрирование → Администрирование → Обслуживание → Активные пользователи

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

Порядок:

  1. Откройте список активных пользователей.
  2. Выделите сеанс зависшего пользователя.
  3. Нажмите Завершить сеанс. Программа попросит пароль администратора кластера, если он задан.

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

Когда нужно выгнать всех: блокировка работы пользователей

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

Для разовых задач без программы ту же блокировку ставят в консоли кластера: свойства информационной базы → флаг «Блокировка начала сеансов включена», время и сообщение. Код разрешения из этого окна потом передают в строке запуска своего клиента параметром /UC, чтобы самому войти в заблокированную базу.

Какая у вас ситуация?

Блокировки на стороне СУБД: смотрим и снимаем через SQL

Распространённый миф — будто в базе есть «таблица блокировок 1С», которую можно очистить запросом. Её нет. Управляемые блокировки 1С живут в памяти кластера и исчезают вместе с сеансом. А вот на уровне СУБД транзакция зависшего сеанса может продолжать держать строки, если соединение не закрылось.

Прямые запросы к базе 1С — это крайний случай. Любые изменения данных таблиц через SQL ломают целостность базы. Ниже — только просмотр и завершение подключения, никаких DELETE и UPDATE.

MS SQL Server

Найти, кто кого блокирует:

SELECT r.session_id, r.blocking_session_id, r.wait_type,
       r.wait_time / 1000 AS wait_sec, s.host_name, s.program_name
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON s.session_id = r.session_id
WHERE r.blocking_session_id <> 0;

В колонке blocking_session_id — номер подключения-виновника. Подключения 1С идут от имени процесса rphost, поэтому host_name покажет сервер 1С, а не компьютер пользователя. Сопоставить подключение с сеансом 1С помогает колонка «Соединение с СУБД» в списке сеансов консоли кластера.

Завершить подключение (транзакция будет откачена):

KILL 87;

PostgreSQL

SELECT pid, state, wait_event_type, now() - xact_start AS tx_age, query
FROM pg_stat_activity
WHERE datname = 'buh_base' AND state <> 'idle'
ORDER BY xact_start;

SELECT pg_terminate_backend(12345);

Ищите подключения с состоянием idle in transaction и большим tx_age — это и есть зависшие транзакции, держащие строки.

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

Файловая база: процессы, файл блокировки и chdbfl

В файловой базе нет сервера и списка сеансов — каждый пользователь сам открывает файл 1Cv8.1CD по сети. Поэтому «сеанс» здесь — это открытый файл и процесс на чьём-то компьютере.

Сброс по шагам

  1. Посмотрите в Конфигураторе Администрирование → Активные пользователи, кто числится в базе и с какого компьютера.
  2. Закройте 1cv8.exe / 1cv8c.exe на этом компьютере (или завершите его RDP-сеанс на терминальном сервере).
  3. Если компьютер недоступен — на сервере с общей папкой откройте Управление компьютером → Общие папки → Открытые файлы и закройте 1Cv8.1CD для нужного пользователя.
  4. Когда все вышли, проверьте каталог базы. Файл 1Cv8.1CL — служебный файл блокировки. Если он остался, а пользователей точно нет, его можно удалить, предварительно скопировав в сторону.

Удаляйте 1Cv8.1CL только когда в базе никого нет. Если хотя бы один пользователь работает, его сеанс оборвётся, а база может повредиться.

Проверка базы утилитой chdbfl

Аварийно оборванный сеанс в файловой базе иногда оставляет повреждения. Тогда база не открывается или выдаёт ошибки формата потока. Для проверки физической целостности в каталоге платформы есть утилита chdbfl.exe:

  1. Сделайте копию каталога базы целиком.
  2. Убедитесь, что в базе никого нет — утилита требует монопольного доступа.
  3. Запустите C:\Program Files\1cv8\<версия>\bin\chdbfl.exe.
  4. Укажите путь к 1Cv8.1CD, отметьте «Исправлять обнаруженные ошибки» и нажмите Выполнить.

Если chdbfl ошибок не нашёл, а проблемы остались, следующий шаг — Конфигуратор → Администрирование → Тестирование и исправление с проверкой логической целостности. Это тоже монопольная операция.

Профилактика: таймауты, засыпание сеансов и порядок работы

Зависшие сеансы — не случайность, их можно почти убрать настройками.

В консоли кластера, в свойствах информационной базы:

  • ⏳ «Засыпание пассивного сеанса» — через сколько секунд бездействия сеанс без связи с клиентом «засыпает» и отпускает лицензию.
  • 🛑 «Завершение спящего сеанса» — через сколько секунд спящий сеанс закрывается совсем. Значения порядка 300 и 3600 секунд подойдут большинству офисов.

В свойствах кластера:

  • включите контроль проблемных процессов: ограничение объёма памяти рабочих процессов и принудительное завершение тех, что его превысили;
  • настройте интервал перезапуска рабочих процессов, если rphost годами копит память. Перезапуск идёт плавно, с переносом сеансов на новый процесс.

Организационно:

  • ✅ научите пользователей выходить из 1С, а не закрывать крышку ноутбука;
  • ✅ на терминальном сервере задайте лимит для отключённых RDP-сеансов в групповых политиках;
  • ✅ тяжёлые отчёты и закрытие месяца запускайте с отборами и вне пиковых часов;
  • ✅ проверьте стабильность VPN: частые обрывы — главный источник «призраков».
Проверка настроек против зависаний
Выполнено: 0 / 6

Частые ошибки при сбросе сеансов

  • ❌ Перезагрузка сервера вместо удаления одного сеанса. Страдают все, а проблема решалась одним кликом.
  • ❌ Удаление сеанса посреди закрытия месяца. Операция откатывается целиком, и её придётся запускать заново.
  • ❌ Удаление сеанса фонового задания. Сеансы с приложением «Фоновое задание» запускает сама программа: обмены, загрузка курсов, регламентные операции. Удалите — задание просто перезапустится по расписанию или оборвёт обмен на середине.
  • ❌ Попытка «почистить» таблицы базы через SQL. Это не снимает блокировки 1С, а портит данные.
  • ❌ Удаление 1Cv8.1CL при работающих пользователях в файловой базе.
Сохранятся ли данные пользователя, если удалить его сеанс?
Всё, что было записано до удаления, сохранится. Открытый незаписанный документ и незавершённая транзакция пропадут.
Почему лицензия не освободилась сразу после удаления сеанса?
Обновите список и подождите минуту: менеджер лицензий фиксирует изменение не мгновенно. Если лицензия не вернулась, проверьте, нет ли у пользователя второго сеанса с другим приложением.
Можно ли сбросить сеанс без пароля администратора кластера?
Нет. Если администратор кластера задан, консоль, rac и «Активные пользователи» запросят его логин и пароль. Если пароль утерян — обратитесь к администратору сервера; восстановление делают из резервной копии настроек кластера при остановленной службе.
Что значит сеанс с приложением «Конфигуратор» и можно ли его удалить?
Это открытый Конфигуратор. Удалить можно, но если разработчик сохранял изменения конфигурации, они могут потеряться. Сначала свяжитесь с ним.
Удалённый сеанс сразу появляется снова — почему?
У пользователя клиент ещё жив и переподключается. Закройте программу на его компьютере или временно включите блокировку начала сеансов.