Зависший или лишний сеанс в 1С: как его закрыть и не задеть остальных
Содержание
В клиент-серверной базе сеанс пользователя завершают в консоли администрирования серверов 1С: Кластер → Информационные базы → <база> → Сеансы, правый клик по строке → «Удалить». Пользователь получит сообщение о завершении работы, лицензия освободится сразу. В файловой базе кластера нет, поэтому сеанс закрывают иначе: через обработку «Активные пользователи» в типовой конфигурации или закрытием процесса 1cv8 на компьютере сотрудника.
Главное правило для обоих вариантов: если сеансы закрываются перед регламентными работами, сначала запретите новые входы, а уже потом удаляйте текущие. Иначе вы будете гоняться за одними и теми же пользователями по кругу.
Что проверить до завершения сеанса
Удаление сеанса — это обрыв. Всё, что пользователь не записал, пропадёт. Если в этот момент шло проведение документа, транзакция откатится целиком: документ останется в том виде, в каком был до нажатия кнопки.
Перед тем как жать «Удалить», соберите три факта:
- 👤 Кто это. Имя пользователя и компьютер (колонка «Компьютер» в консоли). Иногда «зависший» сеанс — это бухгалтер, который просто отошёл с открытой формой.
- 🧩 Какое приложение. Тонкий клиент, Конфигуратор, COM-соединение, фоновое задание. Фоновое задание, которое грузит выписку или делает обмен, лучше дождаться.
- ⏱ Когда была последняя активность. Сеанс с активностью две секунды назад, скорее всего, что-то сейчас делает.
Позвоните или напишите человеку, если это возможно. Одна минута на «закройте, пожалуйста, 1С» избавляет от разбирательств, куда делся недописанный документ.
Если вы закрываете сеансы перед обновлением конфигурации, сделайте резервную копию базы до начала обновления, а не после.
Консоль администрирования: просмотр подключений и удаление сеанса
Консоль администрирования серверов 1С:Предприятия ставится вместе с платформой (компонент «Администрирование сервера 1С:Предприятия»). В меню «Пуск» она называется «Администрирование серверов 1С Предприятия».
Если консоль не открывается
Самая частая проблема — консоль пустая или выдаёт ошибку оснастки. Причина почти всегда в том, что не зарегистрирована библиотека radmin.dll нужной версии. Запустите командную строку от имени администратора и выполните:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"
Номер версии подставьте свой: он должен совпадать с версией сервера 1С. Если на компьютере стоит 32-битная платформа, путь будет C:\Program Files (x86)\1cv8\.... После смены версии платформы регистрацию повторяют.
Как найти и удалить сеанс
- В консоли раскройте
Central 1C:Enterprise 8.3 servers. Если сервера нет в списке, добавьте его: правый клик → «Создать» → «Центральный сервер 1С:Предприятия 8.3», укажите имя сервера и порт агента1540. - Раскройте
Кластеры → <кластер>(обычно с портом1541). Если на кластере задан администратор, консоль запросит логин и пароль. - Откройте
Информационные базы → <нужная база> → Сеансы. - Найдите сеанс по колонкам «Пользователь», «Компьютер», «Приложение», «Последняя активность».
- Правый клик по строке → «Удалить». Можно выделить несколько строк с Shift или Ctrl.
Ветка «Сеансы» верхнего уровня (сразу под кластером) показывает сеансы всех баз. Это удобно, когда пользователь жалуется, что «1С занята», а в какой базе — не помнит.
Сеансы и соединения: в чём разница
| Объект | Что это | Когда удалять |
|---|---|---|
| Сеанс | Работа пользователя с базой, держит лицензию | Пользователь завис, ушёл, нужно освободить лицензию |
| Соединение | Сетевое подключение клиента к рабочему процессу | Сеанс уже удалён, а соединение осталось висеть |
В свойствах базы ветка «Соединения» показывает подключения к рабочим процессам. Если после удаления сеанса соединение того же компьютера не пропало, удалите и его.
Завершение сеанса прямо из программы
В конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11 и другие типовые) есть обработка «Активные пользователи» с кнопкой завершения сеанса. Удобно, когда консоли под рукой нет.
| Конфигурация | Где искать |
|---|---|
| Бухгалтерия предприятия 3.0, ЗУП 3.1, УТ 11 | Администрирование → Обслуживание |
| Любая, если пункта не видно | Главное меню (☰) → Функции для технического специалиста → Обработки → Активные пользователи |
Если такой команды в главном меню нет, включите её в Главное меню → Сервис → Параметры.
Порядок такой:
- Откройте «Активные пользователи». В списке видны имя, компьютер, приложение и время начала работы.
- Выделите строку и нажмите команду завершения сеанса.
- Для клиент-серверной базы программа спросит параметры администрирования: логин и пароль администратора кластера (если он задан) и администратора информационной базы.
Свой собственный сеанс обработка завершить не даст, и это правильно.
Стандартная обработка платформы «Активные пользователи» (раздел «Стандартные» в «Функциях для технического специалиста») только показывает список. Кнопка завершения есть в обработке конфигурации на БСП.
Там же, в разделе обслуживания, есть «Блокировка работы пользователей». Она запрещает новые входы и завершает работу всех, кроме вас. Для входа в заблокированную базу задаётся код разрешения, его передают параметром запуска /UC<код>.
Файловая база: как закрыть чужой сеанс
У файловой базы нет сервера, который хранил бы сеансы. Каждый пользователь открывает файл 1Cv8.1CD напрямую. Отсюда три рабочих способа.
Способ 1. Блокировка работы пользователей
Работает и в файловом варианте. Вы включаете блокировку, а программа на каждом рабочем месте периодически проверяет её и закрывает 1С у сотрудника с предупреждением. Это занимает несколько минут: клиенту нужно дождаться очередной проверки.
То же можно запустить из командной строки, без входа в программу. Типовые конфигурации на БСП понимают параметр запуска ЗавершитьРаботуПользователей:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Администратор" /P"пароль" /C"ЗавершитьРаботуПользователей" /UC"12345"
Здесь 12345 — код разрешения, по которому потом можно войти. Снимают блокировку параметром /C"РазрешитьРаботуПользователей" с тем же /UC.
Способ 2. Закрыть файл на сервере, где лежит база
Если база в общей папке на Windows-сервере:
- На сервере откройте «Управление компьютером» (
compmgmt.msc). - Перейдите в
Общие папки → Открытые файлы. - Найдите
1Cv8.1CDу нужного пользователя, правый клик → «Закрыть открытый файл».
У пользователя 1С выдаст ошибку доступа к файлу и закроется. Несохранённые данные пропадут, а закрытие файла в момент записи может повредить базу — делайте это, только когда остальные способы не сработали.
Способ 3. Закрыть процесс на рабочем месте
Узнайте компьютер через «Активные пользователи», затем на этом компьютере (или удалённо) завершите процессы 1cv8.exe / 1cv8c.exe в Диспетчере задач. Удалённо:
taskkill /S PC-BUH02 /IM 1cv8c.exe /F
На терминальном сервере то же делают на вкладке «Пользователи» Диспетчера задач: выйти из системы конкретного пользователя.
Утилита rac: завершение сеансов из командной строки
rac — консольный клиент администрирования кластера. Он работает не с агентом напрямую, а через сервер администрирования ras. Без запущенного ras команды rac не ответят.
Запуск ras
Для разовой проверки запустите на сервере 1С:
"C:\Program Files\1cv8\8.3.24.1548\bin\ras.exe" cluster --port=1545 localhost:1540
Для постоянной работы зарегистрируйте ras службой Windows через sc create с ключом --service. Порт 1545 — стандартный для ras.
Основные команды
cd "C:\Program Files\1cv8\8.3.24.1548\bin"
rem 1. UUID кластера
rac localhost:1545 cluster list
rem 2. Список баз кластера
rac localhost:1545 infobase summary list --cluster=<uuid-кластера>
rem 3. Сеансы конкретной базы
rac localhost:1545 session list --cluster=<uuid-кластера> --infobase=<uuid-базы>
rem 4. Завершить сеанс
rac localhost:1545 session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>
Если на кластере есть администратор, к каждой команде после cluster list добавляйте --cluster-user=<логин> --cluster-pwd=<пароль>.
В выводе session list каждая запись — блок строк вида ключ : значение. Нужны поля session (UUID для удаления), user-name, host, app-id и last-active-at. В app-id видно приложение: 1CV8C — тонкий клиент, 1CV8 — толстый, Designer — Конфигуратор, BackgroundJob — фоновое задание, COMConnection — внешнее соединение.
Подробности по любой команде: rac help session.
Блокировка входа через rac
Перед массовым удалением сеансов закройте вход в базу, иначе пользователи переподключатся:
rac localhost:1545 infobase update --cluster=<uuid-кластера> --infobase=<uuid-базы> --infobase-user="Администратор" --infobase-pwd="пароль" --sessions-deny=on --denied-message="Обновление, вход закрыт до 20:00" --permission-code=12345 --scheduled-jobs-deny=on
После работ то же самое с --sessions-deny=off --scheduled-jobs-deny=off.
Крайние меры: процессы ОС, служба и SQL
Сюда идут, когда сеанс в консоли удаляется, но тут же «воскресает», или консоль сама не отвечает.
| Метод | Когда | Что оборвётся |
|---|---|---|
Завершить процесс rphost.exe | Один рабочий процесс завис, съел память | Все сеансы, которые обслуживает этот процесс (часто разных баз) |
| Перезапустить службу «Агент сервера 1С:Предприятия 8.3» | Кластер не отвечает целиком | Все сеансы всех баз сервера |
KILL соединения в MS SQL | Висит блокировка на стороне СУБД после удаления сеанса 1С | Транзакция откатится, рабочий процесс переподключится |
Перезапуск службы и снятие rphost делайте вне рабочего времени или после предупреждения всех пользователей: работа оборвётся у каждого, кто подключён к серверу.
Чтобы понять, какой rphost обслуживает сеанс, посмотрите в консоли ветку «Рабочие процессы»: там есть PID и число соединений. По PID процесс находится в Диспетчере задач на вкладке «Подробности».
На MS SQL зависшие подключения ищут так:
EXEC sp_who2;
-- найти SPID с долгой блокировкой по базе 1С, затем:
KILL 57;
Число 57 здесь для примера, берите SPID из своего вывода. Убивать соединения SQL без понимания, какой сеанс 1С за ними стоит, не стоит: рабочие процессы держат пул соединений, и вы оборвёте случайного пользователя.
Автоматическое отключение неактивных пользователей
Типичная задача: ночью нужно выгнать всех, кто оставил 1С открытой, чтобы прошло резервное копирование или регламент. Надёжнее всего — скрипт по расписанию.
Вариант 1. PowerShell + rac
Скрипт завершает сеансы тонкого и толстого клиента, неактивные дольше 60 минут. Фоновые задания и Конфигуратор не трогает.
$rac = "C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
$srv = "localhost:1545"
$limit = 60 # минут без активности
$clusterLine = & $rac $srv cluster list | Where-Object { $_ -match '^cluster\s*:' } | Select-Object -First 1
$cluster = ($clusterLine -split ':', 2)[1].Trim()
$sessions = @()
$cur = @{}
foreach ($line in (& $rac $srv session list --cluster=$cluster)) {
if ($line.Trim() -eq '') {
if ($cur.Count) { $sessions += [pscustomobject]$cur; $cur = @{} }
continue
}
$k, $v = $line -split ':', 2
$cur[$k.Trim()] = $v.Trim()
}
if ($cur.Count) { $sessions += [pscustomobject]$cur }
$now = Get-Date
foreach ($s in $sessions) {
if ($s.'app-id' -notin @('1CV8C', '1CV8')) { continue }
$idle = ($now - [datetime]$s.'last-active-at').TotalMinutes
if ($idle -gt $limit) {
& $rac $srv session terminate --cluster=$cluster --session=$s.session
Write-Output "Завершён: $($s.'user-name') с $($s.host), простой $([int]$idle) мин"
}
}
Если у кластера есть администратор, добавьте --cluster-user и --cluster-pwd в вызовы session list и session terminate. Скрипт ставят в Планировщик заданий Windows, например на 22:00, от учётной записи с доступом к серверу 1С.
Вариант 2. Код на встроенном языке через COM
Тот же результат из обработки или внешнего скрипта на сервере, где установлена платформа (нужен зарегистрированный comcntr.dll):
Коннектор = Новый COMОбъект("V83.COMConnector");
Агент = Коннектор.ConnectAgent("tcp://srv1c:1540");
Кластер = Агент.GetClusters()[0];
Агент.Authenticate(Кластер, "", ""); // логин и пароль администратора кластера
ПорогМинут = 60;
Для Каждого Сеанс Из Агент.GetSessions(Кластер) Цикл
Если Сеанс.AppID <> "1CV8C" И Сеанс.AppID <> "1CV8" Тогда
Продолжить;
КонецЕсли;
Простой = (ТекущаяДата() - Сеанс.LastActiveAt) / 60;
Если Простой > ПорогМинут Тогда
Агент.TerminateSession(Кластер, Сеанс);
КонецЕсли;
КонецЦикла;
ТекущаяДата() берёт время компьютера, где выполняется код. Если код работает не на сервере 1С, следите, чтобы часы совпадали, иначе простой посчитается неверно.
Почему сеанс не завершается или возвращается
Отдельный случай — лицензия «занята», а сеансов в консоли нет. Проверьте ветку «Сеансы» верхнего уровня кластера: сеанс может висеть в другой базе того же сервера. Команда rac session list --licenses покажет, какой сеанс какую лицензию держит.