Пользователи не выходят из базы: шесть способов выгнать всех и не сломать данные
Содержание
В клиент-серверной базе 1С 8.3 сеанс пользователя закрывают в консоли администрирования серверов: Кластер → Информационные базы → <база> → Сеансы, правый клик по строке → Удалить. В файловой базе консоли нет. Там сеансы закрывают блокировкой из самой программы (Администрирование → Обслуживание → Блокировка работы пользователей) или, в крайнем случае, завершением процесса на компьютере пользователя.
Частое заблуждение: «просто снять задачу в диспетчере на сервере, и все выйдут». На сервере 1С так обрывают сразу всех, кто работает в рабочем процессе, включая бухгалтера, который проводит закрытие месяца . Сначала идут мягкие способы, грубые — только когда мягкие не сработали.
С чего начать: кто сейчас в базе и что он делает
Прежде чем выгонять людей, посмотрите, кто реально подключён. Часто «висящий» сеанс — это фоновое задание или забытый ночью Конфигуратор у программиста.
Список активных пользователей. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) он есть в разделе Администрирование → Обслуживание. Универсальный путь для любой конфигурации — Главное меню (☰) → Все функции → Стандартные → Активные пользователи. Если пункта «Все функции» нет, включите его: Главное меню → Сервис и настройки → Параметры → Отображать команду «Все функции».
Журнал регистрации показывает историю: кто и когда вошёл, с какого компьютера, в каком приложении. Откройте его рядом с активными пользователями и поставьте отбор по событиям:
- 🔹
Сеанс. Начало— вход в базу; - 🔹
Сеанс. Завершение— штатный выход; - 🔹
Сеанс. Аутентификация— проверка пароля, полезна при подозрении на чужой вход.
Сеанс, у которого есть «Начало», но нет «Завершения» уже несколько часов, — первый кандидат на принудительное закрытие. По колонке «Компьютер» видно, куда звонить, чтобы человек сам вышел без потерь.
В списке активных пользователей смотрите на колонку «Приложение». «Конфигуратор» и «Фоновое задание» — не люди. Фоновые задания закрывайте последними, иначе оборвётся обмен или загрузка банка посередине.
Удаление сеансов в консоли администрирования серверов 1С
Это основной способ для клиент-серверной базы. Консоль ставится вместе с платформой как компонент «Администрирование сервера 1С:Предприятия».
Если консоль не открывается
Консоль работает через библиотеку radmin.dll. После установки новой версии платформы её нужно зарегистрировать от имени администратора, иначе консоль выдаёт ошибку при открытии:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"
Номер версии в пути подставьте свой. Он должен совпадать с версией сервера, к которому подключаетесь.
Пошагово
- Запустите «Администрирование серверов 1С Предприятия».
- Раскройте
Центральные серверы 1С:Предприятия 8.3 → <имя сервера> → Кластеры → <кластер>. - Если кластер защищён паролем, консоль запросит логин и пароль администратора кластера.
- Откройте
Информационные базы → <нужная база> → Сеансы. Для этой базы консоль спросит логин и пароль администратора информационной базы. - Выделите один или несколько сеансов (Ctrl или Shift) и выберите в контекстном меню
Удалить.
Пользователь получит сообщение о разрыве соединения. Несохранённые данные в открытой форме пропадут, а проведённые документы останутся.
Удалённый сеанс в режиме тонкого клиента пытается переподключиться. Если человек нажмёт «Перезапустить», он снова окажется в базе. Чтобы этого не произошло, сначала включите блокировку начала сеансов (о ней ниже), а потом удаляйте.
То же самое из командной строки: rac
Для скриптов и ночных регламентов удобнее утилита rac. Ей нужна запущенная служба ras (сервер администрирования, по умолчанию порт 1545):
ras cluster --port=1545 localhost:1540
Дальше последовательность такая:
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.
Блокировка работы пользователей прямо из программы
Это самый «вежливый» способ и единственный штатный для файловой базы. В конфигурациях на БСП он находится в Администрирование → Обслуживание → Блокировка работы пользователей.
Что настраивается в форме:
| Поле | Зачем |
|---|---|
| Флажок запрета работы | Включает блокировку |
| Начало и окончание | Период, на который база закрыта |
| Сообщение | Текст, который увидят пользователи, например «Обновление до 21:00» |
| Код разрешения | Пароль-ключ для входа администратора при включённой блокировке |
После установки блокировки программа предупреждает всех пользователей и через несколько минут завершает их сеансы. Новые входы запрещены, пока блокировка не снята.
Сами войти в заблокированную базу вы сможете с параметром запуска /UC<код разрешения>. Например, если код — upd2024, в строку запуска добавьте /UCupd2024.
Для клиент-серверной базы форма блокировки попросит пароль администратора кластера: она закрывает сеансы через сервер. В файловой базе каждый клиент закрывается сам, получив сигнал о блокировке. Если клиент «завис» и сигнал не обрабатывает, придётся переходить к способам ниже.
Пакетный запуск для регламентов: в БСП есть параметры /C"ЗавершитьРаботуПользователей" и /C"РазрешитьРаботуПользователей". Их используют в bat-файлах ночного обновления вместе с /UC.
Блокировка начала сеансов на уровне кластера
В клиент-серверной базе то же можно сделать без входа в программу. В консоли откройте свойства информационной базы и включите Блокировка начала сеансов включена. Укажите время начала и окончания, сообщение и код разрешения. Удобно, если сама конфигурация не открывается или в ней нет БСП.
Там же есть флажок Блокировка регламентных заданий включена. Включайте его перед обновлением, чтобы регламентные задания не запускали новые фоновые сеансы.
Монопольный режим: когда без него нельзя
Монопольный доступ нужен не всегда. Он требуется для обновления структуры базы (при «Обновить конфигурацию
базы данных» с реструктуризацией), загрузки .dt, тестирования и исправления. Обычная правка расширения или выгрузка конфигурации в файл без монопольного режима работают.
Если в базе остался хоть один сеанс, Конфигуратор сообщит, что установить монопольный режим не удалось. Типичный текст — Ошибка установки монопольного режима. Порядок действий тогда такой:
- Включите блокировку из предыдущего раздела.
- Дождитесь, пока сеансы закроются, или удалите оставшиеся через консоль.
- Проверьте, что в списке сеансов нет фоновых заданий и «зависших» сеансов от вашего же Конфигуратора, запущенного ранее.
- Только после этого повторите операцию в Конфигураторе.
Если монопольный режим не ставится, а в консоли сеансов нет, проверьте «Соединения» той же базы. Соединение без сеанса бывает у внешних систем через COM или веб-сервис.
Освобождение лицензий в менеджере HASP
Иногда задача не в том, чтобы выгнать человека из базы, а в том, чтобы вернуть лицензию. Например, сетевой ключ на 5 мест, все заняты, а шестой бухгалтер войти не может.
Сетевые ключи HASP обслуживает Sentinel License Manager. Его веб-панель открывается на компьютере с ключом по адресу:
http://localhost:1947
В разделе Sessions видно, какие компьютеры держат лицензию. Сессию можно отключить кнопкой Disconnect.
Что важно понимать про этот способ:
- 🔸 Отключение в панели HASP освобождает место в ключе, но не закрывает базу у пользователя мгновенно. Клиент обнаружит потерю лицензии при очередной проверке и выдаст ошибку о ключе защиты.
- 🔸 В клиент-серверном варианте лицензии клиентов получает сервер 1С. Сессию в HASP тогда держит сервер, а не компьютер пользователя, и отключать её бессмысленно: сначала закройте сеанс в консоли.
- 🔸 Программные (не аппаратные) лицензии через эту панель не освобождаются. Их отдаёт закрытый сеанс.
Какие лицензии заняты в кластере, покажет команда:
rac session list --cluster=<uuid кластера> --licenses
Аварийное завершение процессов в Windows
Это крайняя мера. Используйте её, если сеанс не удаляется из консоли, а клиент на компьютере пользователя не отвечает.
Файловая база
Здесь каждый пользователь сам открывает файл 1Cv8.1CD по сети. Варианты:
- На компьютере или терминальном сервере пользователя завершите процесс клиента. Тонкий клиент —
1cv8c.exe, толстый клиент и Конфигуратор —1cv8.exe:
taskkill /IM 1cv8c.exe /F /FI "USERNAME eq ivanova"
Фильтр по пользователю обязателен на терминальном сервере. Без него вы закроете 1С у всех.
- На сервере с сетевой папкой закройте открытый файл базы. Через интерфейс:
Управление компьютером → Общие папки → Открытые файлы, найти1Cv8.1CD, закрыть. Через PowerShell:
Get-SmbOpenFile | Where-Object Path -like "*1Cv8.1CD" | Close-SmbOpenFile -Force
Обрыв файла 1Cv8.1CD во время записи может повредить базу. Перед этим сделайте копию каталога базы, если это возможно, и убедитесь, что никто не проводит документы.
Клиент-серверная база
На сервере 1С сеансы живут внутри рабочих процессов rphost.exe. Один процесс обслуживает сразу многих пользователей, часто разных баз. Снять rphost в диспетчере задач — значит оборвать сеансы всех, кто в нём работал.
Порядок от мягкого к жёсткому:
| Действие | Когда применять | Кого затронет |
|---|---|---|
| Удалить сеанс в консоли | Обычная ситуация | Одного пользователя |
| Выключить рабочий процесс в консоли (свойства процесса) | Сеанс «завис» и не удаляется | Всех в этом процессе, кластер запустит новый |
Завершить rphost.exe в диспетчере | Консоль не отвечает | Всех в этом процессе |
| Перезапустить службу «Агент сервера 1С:Предприятия 8.3» | Не помогло ничего | Всех пользователей всех баз сервера |
Перезапуск службы агента и завершение rphost делайте вне рабочего времени или после предупреждения всех пользователей. Незаписанные данные в открытых формах пропадут у каждого.
Закрытие сеансов из внешней обработки через COM
Встроенный язык 1С не умеет завершить чужой сеанс напрямую. Метод ПолучитьСеансыИнформационнойБазы() только показывает их. Для завершения нужен административный интерфейс сервера: COM-объект V83.COMConnector (Windows) или вызов rac из кода.
Пример процедуры для внешней обработки. Она подключается к агенту кластера, находит базу по имени и завершает все сеансы, кроме сеансов указанного пользователя:
&НаСервере
Процедура ЗавершитьСеансыНаСервере(ИмяСервера, ИмяБазы, АдминКластера, ПарольКластера, Исключение)
Коннектор = Новый COMОбъект("V83.COMConnector");
Агент = Коннектор.ConnectAgent("tcp://" + ИмяСервера + ":1540");
Кластеры = Агент.GetClusters();
Для Каждого Кластер Из Кластеры Цикл
Агент.Authenticate(Кластер, АдминКластера, ПарольКластера);
Базы = Агент.GetInfoBases(Кластер);
Для Каждого База Из Базы Цикл
Если НРег(База.Name) <> НРег(ИмяБазы) Тогда
Продолжить;
КонецЕсли;
Сеансы = Агент.GetInfoBaseSessions(Кластер, База);
Для Каждого Сеанс Из Сеансы Цикл
Если Сеанс.UserName = Исключение Тогда
Продолжить;
КонецЕсли;
Сообщить("Завершаю: " + Сеанс.UserName + ", " + Сеанс.AppID);
Агент.TerminateSession(Кластер, Сеанс);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Что нужно для работы:
- 🔹 На сервере 1С должен быть зарегистрирован
comcntr.dllтой же версии, что и платформа. - 🔹 Код выполняется на сервере, значит, у учётной записи службы 1С должен быть доступ к агенту кластера.
- 🔹 В
Исключениепередайте своё имя пользователя, иначе обработка закроет и ваш сеанс.
Если нужно закрывать только «зависшие» сеансы, добавьте проверку по свойству Сеанс.LastActiveAt и сравнивайте его с текущей датой. Сеанс без активности дольше часа — хороший кандидат.
Порядок действий перед вечерним обновлением
Типичная ситуация: в 19:00 нужно обновить Бухгалтерию с изменением структуры, а в базе ещё 12 сеансов. Рабочая последовательность для клиент-серверной базы выглядит так:
- 18:30 — включите блокировку работы пользователей с сообщением «В 19:00 база закрывается на обновление». Люди успеют дописать документы.
- 18:55 — в свойствах базы в консоли включите блокировку регламентных заданий.
- 19:00 — проверьте список сеансов. Оставшиеся удалите в консоли или командой
rac session terminate. - 19:05 — сделайте резервную копию и запускайте Конфигуратор с параметром
/UC<код разрешения>. - После обновления — снимите обе блокировки и проверьте, что пользователи входят.
Для файловой базы шаги 2 и 3 заменяются проверкой открытых файлов на сервере с сетевой папкой: в списке не должно остаться 1Cv8.1CD, открытого с чужих компьютеров.
Частые вопросы
Потеряются ли проведённые документы при принудительном закрытии сеанса?
Почему после удаления в консоли сеанс появляется снова через минуту?
Можно ли закрыть сеансы в файловой базе без доступа к компьютерам пользователей?
1Cv8.1CD на сервере с сетевой папкой.