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

· 11 мин

Содержание

В клиент-серверной базе сеанс пользователя завершают в консоли администрирования серверов 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\.... После смены версии платформы регистрацию повторяют.

Как найти и удалить сеанс

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

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

Сеансы и соединения: в чём разница

ОбъектЧто этоКогда удалять
СеансРабота пользователя с базой, держит лицензиюПользователь завис, ушёл, нужно освободить лицензию
СоединениеСетевое подключение клиента к рабочему процессуСеанс уже удалён, а соединение осталось висеть

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

Завершение сеанса прямо из программы

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

КонфигурацияГде искать
Бухгалтерия предприятия 3.0, ЗУП 3.1, УТ 11Администрирование → Обслуживание
Любая, если пункта не видноГлавное меню (☰) → Функции для технического специалиста → Обработки → Активные пользователи

Если такой команды в главном меню нет, включите её в Главное меню → Сервис → Параметры.

Порядок такой:

  1. Откройте «Активные пользователи». В списке видны имя, компьютер, приложение и время начала работы.
  2. Выделите строку и нажмите команду завершения сеанса.
  3. Для клиент-серверной базы программа спросит параметры администрирования: логин и пароль администратора кластера (если он задан) и администратора информационной базы.

Свой собственный сеанс обработка завершить не даст, и это правильно.

Стандартная обработка платформы «Активные пользователи» (раздел «Стандартные» в «Функциях для технического специалиста») только показывает список. Кнопка завершения есть в обработке конфигурации на БСП.

Там же, в разделе обслуживания, есть «Блокировка работы пользователей». Она запрещает новые входы и завершает работу всех, кроме вас. Для входа в заблокированную базу задаётся код разрешения, его передают параметром запуска /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-сервере:

  1. На сервере откройте «Управление компьютером» (compmgmt.msc).
  2. Перейдите в Общие папки → Открытые файлы.
  3. Найдите 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 покажет, какой сеанс какую лицензию держит.

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

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