Завершаем зависшие сеансы и соединения пользователей 1С 8.3

· 9 мин

Содержание

Быстрее всего закрыть соединение в 1С через консоль администрирования серверов: Кластер → Информационные базы → <ваша база> → Сеансы, правый клик по сеансу и «Удалить». Пользователь сразу теряет связь с базой, лицензия освобождается. Для файловой базы консоли нет: там сеанс закрывают блокировкой работы пользователей или завершением процесса на компьютере сотрудника.

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

Сеанс и соединение: что именно вы закрываете

В клиент-серверной 1С 8.3 это два разных объекта, и путать их не стоит.

  • 👤 Сеанс — логический вход пользователя в базу. У него есть имя пользователя, приложение («Тонкий клиент», «Конфигуратор», «Фоновое задание»), занятая лицензия, время начала.
  • 🔌 Соединение — сетевой канал между клиентом и рабочим процессом rphost. Сеанс может жить без соединения (спящий сеанс), а соединение может висеть без активного сеанса.

Отсюда практическое правило: чтобы освободить лицензию и снять блокировку базы, удаляют сеанс. Соединение закрывают отдельно, когда в списке остались «сироты», которые мешают монопольному доступу.

Что видитеЧто удалятьГде
Пользователь висит в списке, лицензия занятаСеансУзел «Сеансы» базы
Сеансов нет, а монопольный режим не включаетсяСоединениеУзел «Соединения» базы
Висит фоновое заданиеСеанс с приложением «Фоновое задание»Узел «Сеансы»
Всё зависло на одном рабочем процессеРабочий процессПерезапуск rphost или службы

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

Закрыть соединение в консоли управления кластером

Консоль администрирования серверов 1С:Предприятия ставится вместе с платформой (компонент «Администрирование сервера 1С:Предприятия»). Она подключается к агенту сервера по порту 1540.

Пошагово

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

Чтобы закрыть сеансы всех пользователей сразу, выделите строки с Shift или Ctrl и удалите их одним действием. Сеансы фоновых заданий удаляйте последними: они перезапустятся, если не заблокировать регламентные задания.

Если нужно закрыть именно соединение

В той же базе откройте соседний узел «Соединения». Там видно приложение, компьютер и номер рабочего процесса. Правый клик → «Разорвать соединение» (в разных версиях консоли пункт называется «Удалить» или «Разорвать»). Соединения конкретного rphost также видны в узле Рабочие процессы → <процесс> → Соединения.

💡 Если консоль не открывается и пишет, что оснастка не зарегистрирована, перерегистрируйте библиотеку от имени администратора. Путь зависит от версии платформы:

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

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

Запретить новые входы на время работ

Удалённый пользователь может тут же зайти снова. Поэтому перед массовым закрытием откройте свойства базы в консоли и включите «Блокировка начала сеансов включена». Заполните сообщение и «Код разрешения». Тогда в базу пустят только того, кто запустит её с параметром /UC <код>. Там же есть флажок «Блокировка регламентных заданий включена».

Как завершить сеанс пользователя из 1С:Предприятия

Если доступа к серверу нет, а права администратора в базе есть, сеансы закрывают прямо из программы. Это работает в типовых конфигурациях на БСП: Бухгалтерии 3.0, ЗУП 3.1, УТ 11, КА, ERP.

Активные пользователи

  1. Откройте Администрирование → Обслуживание.
  2. В группе мониторинга пользователей откройте «Активные пользователи».
  3. Выделите сеанс и нажмите «Завершить сеанс».

Для клиент-серверной базы программа запросит пароль администратора кластера, если он задан. Без БСП, через Главное меню → Функции для технического специалиста → Стандартные → Активные пользователи, список можно только посмотреть, завершить сеанс оттуда нельзя.

Блокировка работы пользователей

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

  1. Администрирование → Обслуживание → Блокировка работы пользователей.
  2. Задайте время начала и окончания, текст сообщения.
  3. Укажите код разрешения, чтобы зайти самому.
  4. Нажмите «Установить блокировку».

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

Ещё вариант для администратора: запустить базу с параметрами командной строки. Типовые конфигурации понимают их через БСП:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /N"Администратор" /P"пароль" /C"ЗавершитьРаботуПользователей" /UC"12345"

После работ блокировку снимают параметром /C"РазрешитьРаботуПользователей" с тем же кодом /UC.

Принудительное завершение соединений через SQL

К этому способу приходят, когда в консоли 1С чисто, а СУБД всё равно держит блокировку или базу нельзя перевести в однопользовательский режим.

Удаление соединения в СУБД не закрывает сеанс 1С. Рабочий процесс получит ошибку, у пользователя вылетит сообщение об ошибке СУБД. Лицензия при этом остаётся занятой, пока сеанс не удалят в консоли.

MS SQL Server

Посмотреть, кто подключён к базе:

SELECT session_id, login_name, host_name, program_name, status
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('buh');

Закрыть одно соединение по номеру session_id:

KILL 57;

Выгнать всех и перевести базу в монопольный режим СУБД, например перед восстановлением из бэкапа:

ALTER DATABASE buh SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- работы с базой
ALTER DATABASE buh SET MULTI_USER;

PostgreSQL

SELECT pid, usename, client_addr, state, query_start
FROM pg_stat_activity
WHERE datname = 'buh';

SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'buh' AND pid <> pg_backend_pid();

Команда ROLLBACK IMMEDIATE и массовый pg_terminate_backend откатывают все незавершённые транзакции. Длинное проведение или закрытие месяца придётся запускать заново. Делайте это вне рабочего времени.

Остановка и перезапуск сервера 1С

Если сеансы не удаляются, консоль зависает или рабочий процесс съел всю память, остаётся перезапуск. Это затронет все базы кластера, а не одну.

Перезапуск рабочего процесса

  1. В консоли откройте Рабочие процессы и посмотрите PID проблемного процесса.
  2. В диспетчере задач Windows на вкладке «Подробности» найдите rphost.exe с этим PID.
  3. Завершите процесс. Агент кластера поднимет новый автоматически.

Сеансы на этом процессе оборвутся, на остальных процессах продолжат работу.

Перезапуск службы агента

Имя службы зависит от версии и разрядности. Посмотрите его в services.msc: ищите «Агент сервера 1С:Предприятия 8.3». Перезапуск из командной строки:

net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"

На Linux найдите юнит командой systemctl list-units | grep srv1cv8 и перезапустите его через systemctl restart.

Если после перезапуска сеансы вернулись

Иногда «призраки» снова появляются в консоли после старта службы. Их источник — кэш сеансовых данных в каталоге кластера.

  1. Остановите службу агента.
  2. Откройте каталог srvinfo\reg_1541 (по умолчанию в профиле пользователя службы или в C:\Program Files\1cv8\srvinfo).
  3. Удалите папки, имена которых начинаются с snccntx.
  4. Запустите службу.

Удаляйте только папки snccntx. Файлы 1CV8Clst.lst и 1CV8Reg.lst хранят список баз и настройки кластера. Сделайте копию всего srvinfo перед вмешательством.

Автоматизация закрытия сеансов через скрипты

Каждую ночь перед бэкапом или обновлением удобнее выгонять пользователей скриптом. Для этого используют утилиту rac и сервер администрирования ras.

Подготовка

Служба ras должна работать на сервере 1С. Её можно запустить вручную или зарегистрировать как службу, по умолчанию она слушает порт 1545:

"C:\Program Files\1cv8\8.3.24.1548\bin\ras.exe" cluster --port=1545 localhost:1540

Основные команды

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.

Скрипт PowerShell: закрыть все сеансы базы

$rac = "C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
$ras = "localhost:1545"
$baseName = "buh"

$cluster = (& $rac $ras cluster list | Select-String '^cluster\s+:\s+(\S+)').Matches[0].Groups[1].Value

$ibList = & $rac $ras infobase summary list --cluster=$cluster
$ib = $null
for ($i = 0; $i -lt $ibList.Count; $i++) {
    if ($ibList[$i] -match '^infobase\s+:\s+(\S+)') { $current = $Matches[1] }
    if ($ibList[$i] -match "^name\s+:\s+$baseName\s*$") { $ib = $current }
}
if (-not $ib) { Write-Host "База $baseName не найдена"; exit 1 }

$sessions = & $rac $ras session list --cluster=$cluster --infobase=$ib |
    Select-String '^session\s+:\s+(\S+)' | ForEach-Object { $_.Matches[0].Groups[1].Value }

foreach ($s in $sessions) {
    & $rac $ras session terminate --cluster=$cluster --session=$s
    Write-Host "Завершён сеанс $s"
}

Скрипт берёт первый кластер на сервере, находит базу по имени и закрывает все её сеансы. Поставьте его в планировщик заданий Windows за 10–15 минут до бэкапа. Перед ним разошлите пользователям предупреждение или включите блокировку начала сеансов, иначе кто-то зайдёт обратно.

💡 Альтернатива без ras — COM-объект V83.COMConnector: через него подключаются к агенту, получают список сеансов базы и вызывают TerminateSession. Этот путь удобен, если скрипт уже работает внутри 1С или на VBScript.

Перед ночным закрытием сеансов
Выполнено: 0 / 5

Почему соединения зависают и как это диагностировать

Закрыть сеанс — полдела. Если «висяки» появляются каждый день, ищите причину.

Диагностика: выберите симптом

Что смотреть в первую очередь

  • 🔍 Колонка «Компьютер» в списке сеансов: часто «призраки» идут с одного терминального сервера.
  • 🕒 Время начала и последней активности: сеанс, которому несколько дней, почти наверняка брошен.
  • 📒 Журнал регистрации базы: события начала и конца сеанса, ошибки соединения.
  • 🧠 Память rphost: если процесс растёт без остановки, ограничьте объём памяти рабочих процессов в настройках кластера, чтобы агент перезапускал их сам.

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

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