Завис пользователь в 1С: как завершить его сеанс и снять блокировку
Содержание
Сбросить сеанс в 1С можно из консоли администрирования серверов 1С:Предприятия: найдите базу, откройте ветку «Сеансы», выделите нужную строку и выберите «Удалить». В файловой базе такой консоли нет, поэтому сеанс завершают на рабочем месте пользователя через диспетчер задач. Всё, что дальше, нужно, когда стандартный путь не сработал.
Типичная ситуация: человек ушёл, не закрыв 1С, или программа повисла. Другие пользователи видят «Ошибку блокировки», регламентное задание не стартует, обновление не проходит из-за активных сеансов. Ниже способы от безопасных к радикальным.
Сначала разберитесь, что именно висит
Перед тем как что-то удалять, определите, что это за объект. В консоли есть две разные ветки, и путаница между ними — частая причина «я сбросил, а оно осталось».
- 🔹 Сеанс — работа пользователя или процесса в информационной базе. Он занимает лицензию и держит блокировки данных.
- 🔹 Соединение — сетевая связь клиентского приложения с кластером. Одно соединение обычно соответствует одному сеансу, но бывают соединения без сеанса, например зависшее после обрыва сети.
- 🔹 Рабочий процесс — процесс
rphostна сервере, в котором выполняется код. Один процесс обслуживает много сеансов.
В свойствах сеанса консоль показывает приложение: тонкий клиент, Конфигуратор, COM-соединение, фоновое задание. Это важно. Если «висит» фоновое задание, например закрытие месяца или обмен, то, сбросив его, вы оборвёте операцию на середине. Спросите у пользователя или посмотрите журнал регистрации, что именно выполнялось.
Признаки зависшего сеанса:
- ⏳ в колонке «Вызовов» и «Время вызова» цифры растут, а пользователь говорит, что давно закрыл программу;
- ⏳ сеанс держит лицензию, хотя человек ушёл домой;
- ⏳ сеанс остался после обрыва VPN или падения клиента.
Прежде чем сбросить сеанс, предупредите пользователя. Всё, что он не успел записать, пропадёт. Проведённые документы останутся, а несохранённая форма с открытым новым документом — нет.
Консоль администрирования: сбросить сеанс на сервере
Это основной способ для клиент-серверной базы. Консоль («Администрирование серверов 1С:Предприятия») входит в состав платформы и ставится вместе с серверными компонентами. Для запуска нужны права администратора кластера, если он защищён паролем.
Порядок действий:
- Запустите консоль и разверните
Центральные серверы 1С:Предприятия. - Раскройте нужный сервер, затем
Кластерыи сам кластер (обычно «Локальный кластер», порт 1541). - Откройте
Информационные базы, затем вашу базу и веткуСеансы. - Выделите сеанс. Можно выбрать несколько, удерживая Ctrl.
- Вызовите правой кнопкой меню и выберите
Удалить. Подтвердите действие.
Если нужны сеансы всех баз кластера, ветка Сеансы есть и на уровне самого кластера. Там удобно сортировать по приложению и по времени последней активности.
💡 Пользователь, чей сеанс удалён, при следующем обращении к серверу увидит сообщение об окончании сеанса. Работать дальше он сможет, только перезапустив 1С.
Если консоль не видит кластер или не подключается
Бывает, что консоль открывается, но центральных серверов нет или связь с сервером не устанавливается. Прежде чем искать причину в сети, проверьте два места.
- Версия консоли. Она должна быть той же платформы, что и сервер 1С, либо хотя бы совместимой. После обновления платформы на сервере консоль на рабочем месте администратора нередко остаётся старой.
- Регистрация компоненты
radmin.dll. Консоль работает через неё, и после установки новой версии платформы регистрация иногда не обновляется. Её перерегистрируют командойregsvr32с путём к файлуradmin.dllиз каталогаbinнужной версии платформы. Командную строку запускайте от имени администратора.
Дальше убедитесь, что сервер доступен по порту агента (по умолчанию 1540) и что в брандмауэре открыты порты кластера. Диапазон портов рабочих процессов задаётся в свойствах рабочего сервера.
Как читать колонки списка сеансов
Консоль показывает много полей, и среди них несколько реально помогают отличить зависший сеанс от рабочего.
- 📌 Пользователь и компьютер. Если имя компьютера не совпадает с рабочим местом сотрудника, возможно, это сеанс с домашнего ПК или из терминальной сессии.
- 📌 Приложение. Тонкий клиент, Конфигуратор, COM-соединение, фоновое задание. Сеансы Конфигуратора часто забывают закрыть, а они блокируют обновление конфигурации .
- 📌 Время начала и последняя активность. Сеанс, начатый вчера и не проявлявший активности с вечера, почти наверняка забыт.
- 📌 Лицензия. Если сеанс держит лицензию, а работы в нём нет, её лучше освободить в первую очередь.
Сортируйте список по последней активности. Сверху окажутся сеансы, с которыми можно разбираться без риска.
Сброс сеансов из командной строки через rac
Если нужно автоматизировать задачу, например, снимать зависшие сеансы по расписанию или из скрипта обновления, используйте утилиту администрирования rac. Она лежит рядом с платформой в каталоге bin и работает с агентом сервера (ras).
Сначала запустите службу ras, если она ещё не запущена, потом получите идентификатор кластера:
rac cluster list
Затем посмотрите список сеансов кластера:
rac session list --cluster=<идентификатор_кластера>
В выводе будут идентификаторы сеансов, имена пользователей, приложения и время последней активности. Завершить конкретный сеанс можно так:
rac session terminate --session=<идентификатор_сеанса> --cluster=<идентификатор_кластера>
Если кластер защищён паролем, добавьте параметры --cluster-user и --cluster-pwd. Полный перечень команд и параметров для вашей версии платформы показывает rac help; не рассчитывайте на память, набор отличается от релиза к релизу.
💡 Скрипт, который завершает все сеансы подряд, опасен. Фильтруйте по имени пользователя и по приложению, чтобы не снять фоновое задание или регламентную обработку.
Сеансы в файловой базе: нет консоли, есть процессы
В файловом варианте нет кластера, а значит нет и ветки «Сеансы». Каждый пользователь работает со своей копией 1С на рабочем месте и напрямую открывает файл 1Cv8.1CD. Узнать, кто сидит в базе, можно в самой программе или в Конфигураторе.
Где посмотреть активных:
- в Конфигураторе:
Администрирование → Активные пользователи; - в самой конфигурации с правами администратора: раздел
Администрирование, пункт про поддержку и обслуживание, в нём список активных пользователей (название зависит от конфигурации).
Список покажет имя, компьютер и приложение. Завершить работу такого пользователя штатными средствами базы нельзя: нужно закрыть программу на его компьютере.
Способы по нарастанию жёсткости:
- Позвонить пользователю и попросить закрыть 1С.
- Зайти на его компьютер или по RDP на терминальный сервер и закрыть окно программы.
- Если окно не отвечает, открыть диспетчер задач, найти процесс
1cv8.exeили1cv8c.exeнужного пользователя и снять задачу. - Если люди работают на терминальном сервере, смотрите процессы по столбцу «Пользователь». Снимайте только процесс нужного человека, иначе закроете чужие сеансы.
Не завершайте процесс 1cv8.exe во время записи или проведения большого документа. Файловая база при аварийном закрытии в момент записи может получить повреждение. Если есть сомнения, подождите и сделайте копию файла базы.
Похожая проблема в файловой базе: в каталоге базы остаются служебные файлы блокировок, в частности файл 1Cv8.1CL. Не удаляйте их, пока в базе работает хоть кто-то. Если все сеансы закрыты, а программа продолжает считать базу занятой, сначала проверьте, не остался ли чей-то процесс 1cv8.exe, в том числе в чужой сессии на терминальном сервере.
Как не дать зайти снова: блокировка сеансов
Сбросить сеанс мало, если пользователь тут же запустит программу заново. Перед обновлением, загрузкой выгрузки или тестированием и исправлением базу блокируют.
В консоли откройте свойства информационной базы и включите блокировку начала сеансов. Можно указать период блокировки, сообщение для пользователей и код доступа. Тем, кто знает код, база откроется, если запустить 1С с параметром /UC и этим кодом. Так администратор заходит в заблокированную базу, а остальные получают понятное сообщение.
Блокировка заданий (регламентных) включается рядом и нужна, если фоновые задания мешают операции.
В файловой базе то же делается из Конфигуратора и самой конфигурации: список активных пользователей и режим «Блокировка работы пользователей» (раздел администрирования в конфигурации). После этого дождитесь, пока все закроются.
Когда сеанс не удаляется: радикальные методы
Бывает, что в консоли сеанс удаляется, но через минуту появляется снова или остаётся в статусе, который не меняется. Тогда включайте тяжёлую артиллерию, но по порядку.
| Метод | Когда применять | Что рискуете |
|---|---|---|
| Удаление соединения (ветка «Соединения») | Сеанс снят, а соединение осталось | Обрыв только этого соединения |
Завершение рабочего процесса rphost | Сеанс завис внутри вызова, не снимается | Обрыв ВСЕХ сеансов этого процесса |
| Перезапуск службы агента сервера | Консоль и кластер не отвечают | Обрыв всех сеансов всех баз кластера |
| Завершение сессии в СУБД | Висит блокировка на уровне SQL | Откат незавершённой транзакции |
Каждое из этих действий сбрасывает работу пользователей. Делайте их вне рабочего времени или после предупреждения в чате. Перезапуск службы агента сервера и завершение процессов — крайняя мера, когда остальное не помогло.
Завершение рабочего процесса
В консоли у рабочего сервера есть ветка Рабочие процессы. Узнайте, какие сеансы обслуживает процесс, и только потом удаляйте его. Службе кластера ничего не будет, она создаст новый процесс. Все сеансы на нём пропадут, а работающие вызовы откатятся.
Через диспетчер задач сделать то же самое можно, но рискованнее: вы увидите десяток одинаковых rphost.exe без понятных различий. Сопоставляйте идентификатор процесса из консоли (колонка PID) и диспетчера.
Сессии в СУБД
Если блокировку держит запрос в базе данных, а не сам сеанс 1С, сбросить её можно со стороны СУБД. Выполняйте это, только если уверены, что запрос завис. Откат длинной транзакции может идти дольше, чем её выполнение.
- Для Microsoft SQL Server найдите идентификатор процесса (spid) заблокировавшего запроса в мониторе активности и завершите его командой
KILL. - Для PostgreSQL найдите нужный процесс в представлении
pg_stat_activityи завершите его функциейpg_terminate_backend, передав ей идентификатор процесса.
После завершения запроса сеанс 1С обычно сам исчезает или легко снимается из консоли.
Профилактика: чтобы сеансы не зависали
Зависание чаще всего вызвано не «магией», а понятными причинами.
- 🔸 Обрывы связи. Пользователь на нестабильном Wi-Fi или VPN теряет соединение, а сеанс на сервере остаётся.
- 🔸 Тяжёлые отчёты без отбора. Один запрос на минуты занимает рабочий процесс и держит чужие блокировки.
- 🔸 Старые версии платформы с ошибками, исправленными в последующих релизах.
- 🔸 Утечка памяти рабочего процесса. Она постепенно замедляет все сеансы на нём.
Что настроить в кластере:
- В свойствах кластера задайте интервал перезапуска рабочих процессов и допустимый объём памяти, чтобы процессы перезапускались до того, как начнут тормозить. Значения подбирают по нагрузке, универсальных нет.
- Включите принудительное завершение проблемных процессов, когда они превышают лимит памяти и не отдают её.
- На уровне терминального сервера ограничьте время простаивающих сеансов: отключённые сессии должны завершаться по таймеру, иначе процесс 1С живёт сутками.
- Регулярно ставьте актуальные релизы платформы и конфигурации.
Ещё одна привычка, которая избавляет от половины обращений: объясните пользователям, что закрывать 1С нужно кнопкой выхода, а не крестиком браузера или выключением питания. Тогда сеанс закроется корректно.