Принудительное завершение сеанса пользователя в 1С 8.3
Содержание
Быстрее всего зависший сеанс убирается через консоль администрирования серверов 1С: откройте ветку своего кластера, раздел Сеансы, найдите нужную строку и нажмите Удалить. Это и есть принудительный способ вывести пользователя из 1С в клиент-серверной базе. В файловой базе отдельной кнопки нет — там работают через блокировку соединений и завершение процесса.
Дальше разберу все рабочие варианты: от аккуратной блокировки входа до жёсткого обрыва соединения на уровне СУБД. Каждый способ — со своими рисками, поэтому важно выбрать минимально травматичный для данных. Начнём с того, как понять, какой у вас режим работы, — от этого зависит набор инструментов.
Любое принудительное завершение чужого сеанса обрывает несохранённые данные пользователя: наполовину проведённый документ, незакрытую обработку. Делайте это, только когда человек недоступен, а база нужна для обновления или блокирует работу остальных.
Клиентская или серверная база: с чего начать
Набор доступных методов полностью зависит от того, как развёрнута база.
Файловая база (один каталог с файлом 1Cv8.1CD) не имеет кластера серверов. Управлять чужими сеансами по сети нельзя: нет службы, которая бы их завершала. Остаётся попросить пользователя выйти, поставить блокировку новых соединений или в крайнем случае завершить процесс 1cv8.exe на его машине.
Клиент-серверная база
(кластер серверов
1С + СУБД) даёт полный арсенал: консоль администрирования, утилиту rac, встроенный язык и доступ к СУБД. Сеансом здесь управляет менеджер кластера, и завершить можно любой из них.
rac session terminate.Активные пользователи и завершите только его.1cv8.exe на его компьютере (данные сеанса потеряются).KILL в MS SQL или pg_terminate_backend в PostgreSQL). Только после блокировки входа.Через консоль администрирования серверов
Это основной штатный инструмент для серверных баз. Консоль (оснастка MMC) ставится вместе с сервером 1С или отдельным компонентом «Администрирование сервера 1С».
Порядок действий:
- Запустите консоль:
Пуск → 1С Предприятие → Администрирование серверов 1С Предприятия. - Разверните ветку:
Central 1C:Enterprise … Servers → <ваш сервер> → Кластеры → <имя кластера>. - Откройте узел
Сеансы. В списке видны пользователь, приложение (толстый/тонкий клиент, фоновое задание), компьютер, время начала. - Выделите строку нужного сеанса, вызовите контекстное меню правой кнопкой и нажмите
Удалить.
Сеанс закроется в течение нескольких секунд. Если у пользователя шёл процесс записи, 1С откатит незавершённую транзакцию — потерянным окажется только то, что он не успел сохранить.
Рядом есть узел Соединения. Сеанс — это пользователь в базе, соединение — технический канал к рабочему процессу. Обычно хватает удаления сеанса; соединение закрывать отдельно не нужно.
Если консоль не видит кластер — проверьте, что запущена служба 1C:Enterprise 8.x Server Agent и в консоль добавлен нужный центральный сервер (по умолчанию порт агента — 1540).
Утилита rac: управление из командной строки
Когда консоли под рукой нет или действие нужно повторять скриптом, используют консольную утилиту администрирования rac. Она подключается к серверу через агента администрирования ras (служба, по умолчанию слушает порт 1545). Обе лежат в каталоге bin установленной платформы.
Сначала узнаём идентификатор кластера:
rac cluster list
В выводе берём значение cluster : <uuid>. Теперь смотрим сеансы:
rac session list --cluster=<uuid-кластера>
Каждая строка содержит session : <uuid>, имя пользователя и приложение. Завершаем нужный сеанс по его идентификатору:
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>
Если кластер защищён паролем администратора, добавьте параметры --cluster-user и --cluster-pwd. Полный список параметров всегда смотрите в rac help и rac session help — состав команд зависит от версии платформы, выдумывать ключи не стоит.
Когда сеанс завершился, а пользователь на самом деле остался в базе, смотрят в сторону соединений: rac connection list --cluster=<uuid> показывает открытые каналы, а rac connection help подскажет, как закрыть зависшее соединение. Но обычно до этого уровня не доходит — удаления сеанса хватает.
Перед массовым завершением сеансов из скрипта сначала включите блокировку соединений — иначе клиенты будут переподключаться, и список сеансов не опустеет.
Блокировка входа и штатное завершение работы
Чаще админу нужно не «выбить» одного человека, а освободить базу целиком: перед обновлением конфигурации, загрузкой .dt, тестированием и исправлением. Для этого есть блокировка соединений.
В Конфигураторе: меню Администрирование → Блокировка соединений с информационной базой. В диалоге задаётся период блокировки, текст сообщения пользователям и код разрешения — строка, которую подставляют в параметр запуска /UC, чтобы самому зайти в заблокированную базу. Монопольный доступ нужен именно для перечисленных операций — для обновления структуры базы, загрузки дампа, теста и исправления; для обычной работы его требовать не надо.
В режиме Предприятия (конфигурации на Библиотеке стандартных подсистем — БП 3.0, ЗУП 3.1, УТ 11) есть более мягкий механизм «Блокировка работы пользователей». Он выводит всем предупреждение, даёт время сохранить данные и по таймауту завершает сеансы. Открывается он из раздела администрирования, в блоке обслуживания базы; точное название пункта в разных конфигурациях чуть отличается, ищите формулировку «Блокировка работы пользователей» или «Завершение работы пользователей».
Важно понимать разницу: блокировка запрещает новые входы, но уже открытые сеансы сама по себе не рвёт мгновенно (кроме механизма БСП с таймаутом). Поэтому схема такая: ставим блокировку → ждём, пока люди выйдут → добиваем оставшиеся сеансы консолью или rac.
Завершение сеанса встроенным языком
В клиент-серверной базе сеансы можно перебрать и закрыть прямо из кода — удобно для регламентного задания или служебной обработки. Платформа отдаёт список серверными методами:
Сеансы = ПолучитьСеансыИнформационнойБазы();
Для Каждого Сеанс Из Сеансы Цикл
Если Сеанс.Пользователь.Имя = "Иванов" Тогда
УдалитьСеансИнформационнойБазы(Сеанс);
КонецЕсли;
КонецЦикла;
ПолучитьСеансыИнформационнойБазы() возвращает массив объектов сеансов с данными о пользователе, приложении и времени начала. УдалитьСеансИнформационнойБазы() завершает конкретный сеанс. Код выполняется на сервере и только в клиент-серверном варианте — в файловой базе эти методы работать не будут.
Не завершайте в таком цикле собственный сеанс и сеансы фоновых заданий без разбора — можно оборвать служебные процессы. Фильтруйте по имени пользователя или приложению.
Журнал регистрации: найти, кто держит базу
Прежде чем кого-то отключать, полезно понять, кто именно мешает и почему. Для этого служит журнал регистрации — он фиксирует входы, выходы и действия пользователей.
Открыть его можно двумя путями:
- В Конфигураторе:
Администрирование → Журнал регистрации. - В режиме Предприятия: через меню
Все функции → Стандартные → Журнал регистрации(командаВсе функциивключается в настройках параметров).
Отберите события по типу «Сеанс. Начало» за нужный период — увидите имя пользователя, компьютер и время. Так вы отличите живого бухгалтера, который просто ушёл на обед с открытой базой, от зависшего фонового задания или брошенной RDP-сессии. Само завершение журнал не выполняет — это инструмент диагностики, но без него легко отключить не того.
Отдельно обратите внимание на сеансы приложения «Фоновое задание»: это не человек, а служебный процесс (обмен данными, переиндексация полнотекстового поиска, обновление агрегатов). Если такое задание зависло и держит базу, его тоже видно в списке сеансов, и завершается оно так же. Но прежде стоит понять, почему оно не завершилось само, — иначе после перезапуска оно повиснет снова.
Крайняя мера: обрыв соединения на уровне СУБД
Если сеанс не убирается ни консолью, ни rac (бывает при сбое рабочего процесса), остаётся закрыть соединение прямо в СУБД. Это самый грубый способ.
MS SQL Server. Найдите идентификатор процесса и закройте его:
KILL 54;
Номер (SPID) смотрят в sys.dm_exec_sessions или через Activity Monitor. Исторически для этого применяли утилиту osql, но она устарела — пользуйтесь sqlcmd или SQL Server Management Studio.
PostgreSQL. Оборвать все бэкенды нужной базы:
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'имя_базы';
Запускается через psql или pgAdmin.
Обрыв на уровне СУБД опаснее всего: 1С не успевает корректно завершить сеанс, его запись может ещё какое-то время висеть в кластере, а незавершённая транзакция откатывается силами самой СУБД. Делайте это только после блокировки входа и только когда штатные методы бессильны. Не удаляйте базу, не пересоздавайте кластер и не трогайте служебные файлы «на всякий случай» — так проблему не решают.
Автоматизация: регламентные задания и скрипты
Рутину с отключением стоит автоматизировать — особенно если каждую ночь базу освобождают под регламентное обслуживание.
- Регламентное задание на встроенном языке. Процедура с
ПолучитьСеансыИнформационнойБазы()ставится в расписание и, например, в 23:00 закрывает оставшиеся пользовательские сеансы перед бэкапом. Фоновые задания из выборки исключайте. - Скрипт на
rac. Командыrac session listиrac session terminateоформляются в.cmd-файл и запускаются Планировщиком задач Windows. Так можно по расписанию выгонять всех перед обновлением. - Механизм БСП «Завершение работы пользователей». В типовых конфигурациях он уже встроен: задаёте время завершения, пользователи получают предупреждение заранее. Ничего программировать не нужно.
Чем отличается файловая база и старые версии
В клиент-серверных базах всё описанное выше работает одинаково на платформе 8.3 с интерфейсом «Такси». Разница — в файловом режиме и в деталях установки.
В файловой базе нет кластера, поэтому недоступны ни консоль администрирования, ни rac, ни серверные методы работы с сеансами. Остаются: просьба выйти, блокировка работы пользователей средствами БСП и, как крайность, завершение процесса 1cv8.exe на машине пользователя через Диспетчер задач. Последнее теряет все несохранённые данные сеанса, поэтому применяется, только когда человек недоступен.
Консоль администрирования и ras/rac появляются только при установке серверной части 1С и соответствующего компонента администрирования. Если их нет — значит, компонент не установлен, а не «не работает
». Проверяйте номер версии однозначно: оснастка и утилита должны быть не ниже версии вашей платформы, иначе часть команд будет недоступна.
Типичные ошибки при отключении пользователей
ras или закрыт порт 1545. Запустите службу и проверьте доступность порта.Частые вопросы
Можно ли вывести одного пользователя, не трогая остальных?
Активные пользователи выделяете только его сеанс и завершаете. Остальные продолжают работать.Где взять код разрешения, чтобы самому зайти в заблокированную базу?
/UC<код> в строке подключения к базе.Чем сеанс отличается от соединения?
Останутся ли данные пользователя, если завершить его сеанс?
Как выгнать всех разом перед обновлением конфигурации?
rac session terminate по списку. Для типовых конфигураций есть встроенный механизм «Завершение работы пользователей».