Принудительное отключение пользователя от базы 1С 8.3: консоль, rac, код и что делать с файловой базой
Содержание
Завершить сеанс другого пользователя в 1С 8.3 быстрее всего так: Администрирование → Обслуживание → Активные пользователи, выделить строку с пользователем и нажать «Завершить сеанс». Для клиент-серверной базы надёжнее консоль администрирования серверов: Кластер → Информационные базы → <база> → Сеансы, правой кнопкой по сеансу — «Удалить».
Способ зависит от того, где лежит база. В клиент-серверном варианте сеанс принудительно завершает кластер серверов 1С. В файловой базе кластера нет, и «выбить» конкретного человека из программы нельзя — только закрыть его клиент или включить блокировку входа. Всё, что ниже, относится к платформе 8.3 и конфигурациям на БСП: Бухгалтерии 3.0, ЗУП 3.1, УТ 11, КА 2.
Зачем отключать чужой сеанс и что при этом теряется
Чаще всего чужой сеанс мешает в четырёх ситуациях:
- 🔧 обновление конфигурации — для изменения структуры базы нужен монопольный режим, а кто-то не вышел;
- 🔑 нехватка лицензий — сотрудник ушёл домой с открытой 1С, и его сеанс держит лицензию;
- 🔒 зависшие блокировки — пользователь начал долгую операцию, и остальные ловят ожидание на блокировке;
- 📦 загрузка .dt и тестирование базы — тоже требуют, чтобы в базе никого не было.
Что происходит при принудительном завершении:
| Что было у пользователя | Что с этим будет |
|---|---|
| Записанные и проведённые документы | Остаются в базе без изменений |
| Открытая форма с несохранёнными правками | Правки теряются |
| Незавершённая транзакция (проведение, закрытие месяца) | Откатывается целиком, как будто операция не начиналась |
| Сеанс Конфигуратора с несохранённой конфигурацией | Изменения конфигурации теряются |
Испортить данные корректное завершение сеанса не может: платформа откатывает транзакцию, а не обрывает её посередине. Проблема в другом — человек теряет то, что не успел записать.
Позвоните или напишите пользователю за 5–10 минут. В rac и в БСП можно передать текст, который он увидит при отключении.
Способы завершить сеанс пользователя: сравнение
| Способ | Тип базы | Нужны права | Когда выбирать |
|---|---|---|---|
| «Активные пользователи» в программе | Клиент-серверная | Администратор базы + администратор кластера, если он задан | Нужно отключить одного-двух человек, консоли под рукой нет |
| Консоль администрирования серверов | Клиент-серверная | Администратор кластера | Основной способ для сисадмина |
Утилита rac | Клиент-серверная | Администратор кластера, запущенный ras | Linux-сервер, скрипты, ночные регламенты |
| COM-соединение из кода | Клиент-серверная, Windows | Администратор кластера | Своя обработка или регламентное задание |
| Блокировка начала сеансов | Любая | Администратор базы или кластера | Нужно освободить базу целиком и не пустить людей обратно |
| Закрыть процесс 1cv8 на компьютере пользователя | Файловая | Доступ к его ПК или терминальному серверу | Файловая база, другого способа нет |
Как завершить сеанс через «Активные пользователи»
Список активных пользователей есть и в самой платформе (Главное меню → Все функции → Стандартные → Активные пользователи), но эта форма только показывает сеансы. Кнопка завершения есть в одноимённой обработке БСП, которая встроена в типовые конфигурации.
Пошагово в Бухгалтерии 3.0, ЗУП 3.1, УТ 11
- Откройте
Администрирование → Обслуживание. - Найдите на панели ссылку «Активные пользователи» (она в группе со ссылкой на журнал регистрации) и откройте её.
- Найдите сеанс. В списке видны пользователь, компьютер, приложение (тонкий клиент, Конфигуратор, фоновое задание) и время начала.
- Выделите строку и нажмите «Завершить сеанс».
- Если на кластере задан администратор, программа спросит его имя и пароль. Это учётная запись кластера, а не пользователь базы.
После этого у отключённого пользователя появится сообщение, что сеанс завершён, и клиент закроется.
Свой сеанс в списке выделен отдельно. Не завершайте его: вы выйдете из программы сами.
Если команды «Завершить сеанс» нет
- 👤 У вас нет роли «Полные права» — кнопка доступна только администратору.
- 🗂️ База файловая — в файловом режиме кнопка не работает , переходите к блокировке входа (раздел про зависшие сеансы ниже).
- 🧩 Конфигурация нетиповая или старая, без обработки БСП — используйте консоль кластера.
Консоль администрирования серверов 1С
Консоль ставится вместе с сервером 1С (компонент «Администрирование сервера 1С:Предприятия»). Она подключается к агенту сервера по порту 1540.
- Запустите «Администрирование серверов 1С Предприятия».
- Раскройте
Центральные серверы 1С:Предприятия → <имя сервера> → Кластеры → <кластер>. - Откройте
Информационные базы → <нужная база> → Сеансы. Справа появится таблица сеансов этой базы. - Найдите строку по колонкам «Пользователь», «Компьютер» и «Приложение».
- Правой кнопкой — «Удалить», подтвердите.
Если нужно посмотреть сеансы всех баз сразу, откройте ветку «Сеансы» непосредственно в кластере. Там же удобно искать «мёртвые» сеансы: у них давно не меняется время последней активности.
Когда консоль не открывается после переустановки платформы, обычно не зарегистрирована библиотека radmin.dll нужной версии. Регистрируют её командой regsvr32 от имени администратора, указав файл из папки bin той версии платформы, что стоит на сервере.
regsvr32 "C:\Program Files\1cv8\8.3.24.1586\bin\radmin.dll"
Путь с номером версии в примере замените на свой каталог платформы.
Отключение пользователя командой rac
rac — консольный клиент сервера администрирования ras. Он работает и на Windows, и на Linux и подходит для скриптов. Сначала должен быть запущен ras, по умолчанию он слушает порт 1545.
Порядок команд
rem 1. Узнать идентификатор кластера
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-сеанса> --error-message="База закрыта на обновление до 20:00"
В выводе session list ищите поля user-name, host и app-id, а идентификатор берите из поля session. Если у кластера есть администратор, к каждой команде после cluster list добавьте --cluster-user=<имя> --cluster-pwd=<пароль>.
Параметр --error-message выводит пользователю ваш текст вместо безликого «сеанс завершён». Мелочь, но звонков в поддержку становится меньше.
Полный список подкоманд и параметров для вашей версии платформы показывает rac help session.
Отключить всех пользователей базы одним скриптом
Перед ночным обновлением удобно не выбирать сеансы по одному, а завершить все сеансы
конкретной базы. На Linux-сервере rac и ras лежат в каталоге платформы, например /opt/1cv8/x86_64/<версия>/. Если ras ещё не запущен, его стартуют командой ras cluster --daemon.
#!/bin/bash
# идентификатор базы возьмите из infobase summary list
IB="<uuid-базы>"
CL=$(rac localhost:1545 cluster list | awk '/^cluster /{print $3; exit}')
for S in $(rac localhost:1545 session list --cluster=$CL --infobase=$IB | awk '/^session /{print $3}'); do
rac localhost:1545 session terminate --cluster=$CL --session=$S \
--error-message="Плановое обновление базы, вход откроется в 06:00"
done
Скрипт берёт первый кластер на сервере. Если кластеров несколько, впишите нужный идентификатор вручную. Шаблон /^session / с пробелом важен: он отсекает соседнее поле session-id с номером сеанса.
Запускайте такой скрипт только вместе с блокировкой начала сеансов, иначе через минуту в базе снова будут люди. Пользователи, у которых в момент запуска шло проведение, потеряют незаписанные правки — предупредите их заранее.
Завершение сеансов из кода 1С
Готового метода вроде РазорватьСоединение() во встроенном языке нет. Сам код 1С умеет только получить список сеансов (ПолучитьСеансыИнформационнойБазы()) и завершить собственный сеанс (ЗавершитьРаботуСистемы()). Чужой сеанс завершают через COM-соединение с агентом сервера — это та же логика, что у консоли.
Условия: Windows, зарегистрированный comcntr.dll той же версии и разрядности, что и платформа, код выполняется на сервере или в толстом клиенте.
&НаСервере
Процедура ЗавершитьСеансыПользователя(ИмяПользователя, ИмяБазы)
Коннектор = Новый COMОбъект("V83.COMConnector");
Агент = Коннектор.ConnectAgent("tcp://srv1c:1540");
Для Каждого Кластер Из Агент.GetClusters() Цикл
// пустые строки, если администратор кластера не задан
Агент.Authenticate(Кластер, "", "");
Для Каждого Сеанс Из Агент.GetSessions(Кластер) Цикл
Если НРег(Сеанс.infoBase.Name) = НРег(ИмяБазы)
И Сеанс.UserName = ИмяПользователя
И Сеанс.SessionID <> НомерСеансаИнформационнойБазы() Тогда
Агент.TerminateSession(Кластер, Сеанс);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Проверка SessionID нужна, чтобы обработка не отключила саму себя, если её запустил тот же пользователь. Имя сервера srv1c, порт и данные администратора кластера замените на свои.
В типовых конфигурациях ту же задачу решает механизм БСП, который стоит за кнопкой «Завершить сеанс». Если пишете доработку для типовой базы, сначала посмотрите общие модули БСП, связанные с администрированием кластера, — не придётся писать COM-код с нуля.
Почему SQL-запросом сеанс 1С не завершить
Иногда советуют «убить сессию в SQL». Это работает не так, как ожидают.
Пользователь 1С не подключается к СУБД напрямую. Соединения с базой данных держит рабочий процесс rphost, и одно такое соединение обслуживает разных пользователей по очереди. Поэтому:
- ❌ сеанс 1С после
KILLв SQL Server илиpg_terminate_backend()в PostgreSQL остаётся в кластере; - ❌ оборванное соединение может уронить чужую операцию, которая шла через тот же процесс;
- ✅ SQL полезен только для диагностики: увидеть, какая транзакция держит блокировку и сколько она уже идёт.
Для диагностики в MS SQL Server подойдёт такой запрос:
SELECT session_id, blocking_session_id, wait_type, wait_time, command
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
В PostgreSQL то же самое показывает представление pg_stat_activity (колонки state, wait_event, xact_start).
Обрывать соединение на стороне СУБД допустимо только как крайняя мера, когда транзакция повисла, а сеанс 1С из консоли не удаляется. После этого всё равно удалите сеанс в консоли кластера и проверьте, что база открывается.
Сеанс не завершается или появляется снова
Блокировка начала сеансов
Чтобы освободить базу целиком и не пустить людей обратно, удаления отдельных сеансов мало. Нужна блокировка.
- В консоли кластера. Свойства информационной базы → флажок «Блокировка начала сеансов включена», время начала и окончания, сообщение и «Код разрешения». Новые сеансы не создаются, а войти может только тот, кто запускает 1С с параметром
/UC<код разрешения>. - В типовой конфигурации. На панели
Администрирование → Обслуживаниеесть «Блокировка работы пользователей». Она предупреждает пользователей заранее и через несколько минут сама завершает их сеансы. В файловой базе это единственный штатный способ разом освободить базу.
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /UC"obnovlenie"
После работ снимите блокировку. Забытый флажок — частая причина утренних звонков «база не пускает».
Частые вопросы об отключении пользователей
Сколько ждать, пока сеанс исчезнет из списка?
Освобождается ли лицензия после завершения сеанса?
Можно ли отключить пользователя веб-клиента или мобильного клиента?
Увидит ли пользователь, кто его отключил?
--error-message. Имя администратора не показывается.Можно ли завершать сеансы по расписанию, например ночью?
rac в планировщике Windows или cron. Для обновлений удобнее блокировка начала сеансов с заданным временем.