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

· 10 мин

Содержание

Чтобы удалить активных пользователей в 1С 8.3, установите блокировку сеансов через Администрирование → Обслуживание → Корректировка данных → Блокировка работы пользователей, а оставшиеся сеансы завершите в консоли кластера серверов: правой кнопкой по сеансу → Удалить. В файловой базе консоли нет, там закрывают процесс 1cv8.exe или 1cv8c.exe на компьютере пользователя либо открытый файл 1Cv8.1CD на сервере, где лежит каталог базы.

Частое заблуждение — что пользователя можно «удалить» из списка в Конфигураторе. Окно Администрирование → Активные пользователи в Конфигураторе только показывает, кто сейчас в базе. Кнопки «выгнать» там нет. Сеанс живёт до тех пор, пока жив процесс клиента или пока его не оборвёт сервер.

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

Какая у вас база?

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

Сначала поймите, кого выгоняете. В пользовательском режиме список открывается так:

  1. Включите пункт Функции для технического специалиста в настройках главного меню (меню с тремя полосками → Сервис → Параметры).
  2. Откройте Все функции → Стандартные → Активные пользователи.

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

Что смотреть в списке:

  • 👤 Пользователь — под кем открыт сеанс. Несколько строк с одним именем — обычное дело: человек открыл два окна.
  • 💻 Компьютер — где запущен клиент. По нему ищете процесс для принудительного закрытия.
  • 🧩 Приложение — тонкий клиент, толстый клиент, Конфигуратор, фоновое задание, COM-соединение, веб-клиент. Фоновые задания создаёт сама программа, их бессмысленно выгонять, пока не заблокированы регламентные задания.
  • 🕐 Начало работы — сеанс, открытый трое суток назад, почти наверняка забытый или зависший.

Свой собственный сеанс в списке тоже есть. Не завершайте его по ошибке, если работаете с той же машины.

Монопольный режим: блокировка базы и мягкое завершение сеансов средствами 1С

Это самый безопасный способ. Программа сама предупреждает людей, ждёт и закрывает сеансы корректно.

Блокировка в типовых конфигурациях

Путь в типовых конфигурациях на БСП:

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

В форме блокировки заполните:

  1. Сообщение — что увидят пользователи, например «Обновление базы с 19:00 до 20:00».
  2. Время начала и окончания блокировки.
  3. Код разрешения — любая строка. С ней вы сами войдёте в заблокированную базу.
  4. Нажмите Установить блокировку.

Пользователи получат предупреждение. Ближе к началу блокировки программа завершит их сеансы. В клиент-серверной базе форма при необходимости спросит пароль администратора кластера — без него она не может обрывать чужие сеансы.

Вход в заблокированную базу

Добавьте к параметрам запуска ключ /UC с кодом разрешения:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /N"Администратор" /P"пароль" /UC"Обновление2"

Его же можно вписать в поле «Дополнительные параметры запуска» в свойствах базы в списке информационных баз.

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

Запуск с ключом завершения работы

Конфигурации на БСП понимают параметр запуска /C"ЗавершитьРаботуПользователей". Программа стартует, ставит блокировку и ждёт, пока все выйдут. Обратная команда — /C"РазрешитьРаботуПользователей":

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

Этим пользуются в сценариях ночного обслуживания вместе с пакетным запуском Конфигуратора.

Как удалить сеансы пользователей в консоли кластера серверов 1С

В клиент-серверном варианте главный инструмент — «Администрирование серверов 1С Предприятия», оснастка MMC. Она ставится вместе с сервером 1С или отдельно из дистрибутива платформы.

Если консоль не открывается

Оснастке нужна зарегистрированная библиотека radmin.dll той же версии, что и сервер. После обновления платформы консоль часто перестаёт подключаться. Лечится перерегистрацией из командной строки от имени администратора:

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

Номер версии в пути подставьте свой, совпадающий с версией сервера.

Удаление сеансов

  1. Раскройте Central 1C:Enterprise 8.3 servers → ваш сервер → Кластеры → кластер → Информационные базы → нужная база → Сеансы.
  2. Выделите сеансы (Shift или Ctrl для группы).
  3. Правая кнопка → Удалить.

Через несколько секунд пользователь увидит сообщение о том, что сеанс завершён администратором.

Блокировка начала сеансов

Чтобы удалённые пользователи не зашли снова, откройте свойства информационной базы (правая кнопка по базе → Свойства) и включите:

  • 🔒 Блокировка начала сеансов включена — плюс время начала и конца, сообщение и код разрешения;
  • ⏸ Блокировка регламентных заданий включена — иначе фоновые задания будут снова и снова открывать сеансы.

Окно свойств попросит логин и пароль администратора информационной базы — это пользователь 1С с полными правами.

То же самое через rac

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

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

Если на кластере заданы администраторы, добавьте --cluster-user= и --cluster-pwd=. Полный список ключей выдаёт rac help session.

Принудительное закрытие процессов 1С через Диспетчер задач

Метод грубый. Применяйте его, когда мягкие способы не сработали.

Файловая база и терминальный сервер

  • 🖥 На компьютере пользователя или на терминальном сервере откройте Диспетчер задач → вкладка Подробности → завершите 1cv8c.exe (тонкий клиент) или 1cv8.exe (толстый клиент и Конфигуратор). На терминальном сервере смотрите колонку «Имя пользователя», чтобы не убить чужой сеанс.
  • 📂 Если до компьютера не добраться, на сервере с каталогом базы откройте Управление компьютером → Общие папки → Открытые файлы. Найдите 1Cv8.1CD нужного пользователя, правая кнопка → Закрыть открытый файл.

Закрытие файла посреди записи способно повредить базу. После такого обрыва зайдите в Конфигуратор и запустите Администрирование → Тестирование и исправление с флажком только на проверке логической целостности — без исправлений, чтобы оценить ситуацию.

Клиент-серверная база

На сервере 1С работают три вида процессов:

ПроцессЧто делаетЧто будет, если завершить
ragent.exeАгент сервераРушится весь сервер 1С
rmngr.exeМенеджер кластераРушится кластер, все базы
rphost.exeРабочий процессОбрываются все сеансы, которые он обслуживает, во всех базах

Завершение rphost.exe выкидывает не одного пользователя, а всех, кого обслуживает этот процесс, включая другие базы на кластере. Делайте это только в нерабочее время. Удобнее перезапустить службу «Агент сервера 1С:Предприятия 8.3» в оснастке services.msc — эффект тот же, но корректнее.

Обрыв соединений на уровне СУБД: MS SQL и PostgreSQL

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

Сначала остановите сеансы в 1С и включите блокировку начала сеансов (раздел выше). Затем добивайте хвосты в СУБД.

MS SQL Server

Посмотреть соединения и закрыть конкретное:

EXEC sp_who2;
KILL 57;  -- номер SPID из вывода sp_who2

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

ALTER DATABASE [buh] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- восстановление, обслуживание
ALTER DATABASE [buh] SET MULTI_USER;

Если забыть вернуть MULTI_USER, база в 1С не откроется: единственное разрешённое соединение займёт кто-то другой.

PostgreSQL

SELECT pid, usename, client_addr, state, backend_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();

Чтобы новые соединения не появлялись, временно запретите их: ALTER DATABASE buh ALLOW_CONNECTIONS false;. Обратно — true.

Автоматическое отключение пользователей: скрипты и обработки

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

PowerShell и rac

Скрипт находит кластер, базу по имени и завершает все её сеансы:

$rac  = "C:\Program Files\1cv8\8.3.24.1467\bin\rac.exe"
$base = "buh"

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

$ib = (& $rac infobase summary list --cluster=$cluster) -join "`n" -split "`n`n" |
      Where-Object { $_ -match "name\s*:\s*$base\b" } |
      ForEach-Object { ([regex]'infobase\s*:\s*(\S+)').Match($_).Groups[1].Value }

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

foreach ($s in $sessions) {
    & $rac session terminate --cluster=$cluster --session=$s
}

Добавьте --cluster-user и --cluster-pwd, если кластер защищён паролем. Запускайте через Планировщик заданий Windows за 5–10 минут до начала регламента.

Внешняя обработка через COM-соединение

Тот же результат из кода 1С. Обработка запускается на компьютере, где зарегистрирован comcntr.dll той же версии, что и сервер:

Коннектор = Новый COMОбъект("V83.COMConnector");
Агент = Коннектор.ConnectAgent("tcp://srv1c:1540");
Кластеры = Агент.GetClusters();

Для Каждого Кластер Из Кластеры Цикл
    Агент.Authenticate(Кластер, "", "");  // логин и пароль администратора кластера
    Сеансы = Агент.GetSessions(Кластер);
    Для Каждого Сеанс Из Сеансы Цикл
        Если НРег(Сеанс.infoBase.Name) = "buh" И Сеанс.AppID <> "SrvrConsole" Тогда
            Агент.TerminateSession(Кластер, Сеанс);
        КонецЕсли;
    КонецЦикла;
КонецЦикла;

Условие по AppID не трогает сеансы самой консоли администрирования. По тому же признаку можно оставить живыми фоновые задания (BackgroundJob) или, наоборот, гасить только забытые Конфигураторы (Designer).

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

Как не допускать зависших сеансов и лишних блокировок

Зависшие сеансы почти всегда появляются по одной из причин:

  • 🔌 у пользователя оборвалась сеть или ноутбук ушёл в сон с открытой 1С;
  • 🪟 на терминальном сервере человек закрыл окно RDP крестиком, а не вышел из системы — его 1С продолжает работать в отключённом сеансе Windows;
  • 🛠 разработчик оставил открытым Конфигуратор на ночь;
  • ⚙️ регламентное задание выполняется часами и держит сеанс.

Что помогает:

  1. Лимиты сеансов RDP. В групповых политиках терминального сервера задайте время, после которого отключённый сеанс Windows завершается (раздел политик служб удалённых рабочих столов, ограничение по времени для сеансов). Вместе с сеансом Windows закроется и 1С.
  2. Таймаут пассивного сеанса. В Конфигураторе Администрирование → Параметры информационной базы в свежих версиях платформы есть таймауты пассивного сеанса: через заданное время бездействия пользователь получит предупреждение, а затем сеанс завершится.
  3. Регламент обслуживания. Обновления и выгрузку .dt проводите в фиксированное окно, о котором знают все. Сообщение блокировки работает лучше любых звонков.
  4. Контроль лицензий. Забытые сеансы занимают лицензии. Проверить, сколько их реально выдано, можно командой rac session list --cluster=<uuid> --licenses.

Монопольный доступ к базе нужен не для всего. Он требуется для обновления конфигурации с изменением структуры, загрузки .dt, тестирования и исправления. Для повседневных правок и отчётов выгонять людей не нужно.

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

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