Принудительное завершение сеанса пользователя 1С: от кнопки до скрипта
Содержание
Чтобы выкинуть пользователя из 1С в клиент-серверной базе, откройте консоль Администрирование серверов 1С Предприятия, найдите базу, раскройте ветку Сеансы, выделите сеанс и выберите в контекстном меню Удалить. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) то же самое делают без консоли: Администрирование → Обслуживание, ссылка «Активные пользователи», команда завершения сеанса.
Коллега ушёл домой и не закрыл программу, а вам нужно обновить конфигурацию . Или сеанс «завис» и держит лицензию. Ниже — способы принудительно завершить сеанс пользователя в 1С 8.3, от самого мягкого до крайнего, и как сделать так, чтобы база сама освобождалась к ночному обслуживанию.
Принудительное завершение — это обрыв работы человека. Незаписанный документ пропадёт, незавершённая транзакция откатится. Сначала предупредите пользователя или хотя бы проверьте, чем он занят.
Какой способ выбрать: сравнение методов
Способ зависит от двух вещей: какой у вас вариант базы (файловый или клиент-серверный) и есть ли у вас права администратора кластера.
| Способ | Где работает | Что нужно | Риск |
|---|---|---|---|
| «Активные пользователи» в программе | Клиент-сервер, конфигурации на БСП | Полные права в базе, пароль администратора кластера (если задан) | Низкий |
| Блокировка входа с сообщением | Файл и клиент-сервер, БСП | Полные права в базе | Низкий: сеансы закрываются по таймеру |
| Консоль кластера | Только клиент-сервер | Доступ к серверу, права администратора кластера | Низкий для одного сеанса |
Утилита rac | Только клиент-сервер | Запущенная служба ras | Как у консоли |
| Завершение процесса ОС | Файл и клиент-сервер | Права администратора Windows | Высокий: рвутся все сеансы процесса |
💡 В файловой базе нет кластера и нет списка сеансов, которым можно управлять снаружи. Там два рабочих пути: блокировка входа средствами конфигурации или закрытие процесса 1cv8c.exe у конкретного пользователя.
Как завершить сеанс пользователя из самой программы
Самый простой путь для бухгалтера-администратора — не выходить из 1С.
- Откройте раздел
Администрирование → Обслуживание. - Перейдите по ссылке «Активные пользователи». Откроется список: пользователь, компьютер, приложение (тонкий клиент, Конфигуратор, фоновое задание), время начала сеанса.
- Выделите нужную строку и выполните команду завершения сеанса в командной панели формы.
- Если программа запросит параметры администрирования кластера — введите логин и пароль администратора кластера. Если администратор кластера не создан, оставьте поля пустыми.
Команда работает только в клиент-серверном варианте: программа обращается к кластеру через сервер 1С. В файловой базе список виден, но завершить чужой сеанс из него не получится.
⚠️ Не завершайте строки с приложением «Фоновое задание», если не понимаете, что это за задание. Это может быть загрузка выписки, обмен с сайтом или расчёт. Регламентные задания корректнее остановить блокировкой (см. раздел про режим обслуживания).
В Конфигураторе тоже есть пункт Администрирование → Активные пользователи. Он только показывает список — выкинуть кого-то оттуда нельзя.
Управление сеансами в консоли кластера 1С
Консоль администрирования — оснастка MMC, ставится вместе с сервером 1С. Ищите её в меню «Пуск» как «Администрирование серверов 1С Предприятия».
Удаление одного сеанса
- Раскройте дерево:
Центральные серверы 1С:Предприятия → имя сервера → Кластеры → Локальный кластер → Информационные базы → ваша база. - Откройте ветку
Сеансы. В правой панели — все сеансы базы с колонками «Пользователь», «Компьютер», «Приложение», «Начало сеанса», «Рабочий процесс». - Выделите сеанс правой кнопкой мыши и выберите
Удалить. Можно выделить сразу несколько строк через Shift или Ctrl.
Пользователь увидит сообщение о разрыве соединения с сервером, его клиент закроется или предложит перезапуск.
Если консоль просит пароль
Консоль запрашивает две разные пары логин/пароль:
- 🔑 администратор кластера — при входе в кластер;
- 🔑 администратор информационной базы — при входе в ветку конкретной базы (это пользователь 1С с полными правами).
Пароль администратора кластера хранится на стороне сервера. Если его никто не помнит — не пытайтесь пересоздать кластер. Попросите администратора сервера восстановить настройки из резервной копии.
Консоль не открывается вовсе
Типовая беда после установки новой версии платформы: оснастка не видит компоненту и выдаёт ошибку. Лечится перерегистрацией библиотеки radmin.dll из каталога нужной версии, от имени администратора:
"C:\Program Files\1cv8\8.3.24.1548\bin\RegMSC.cmd"
Если этого файла в каталоге нет, зарегистрируйте библиотеку вручную:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"
Номер версии в пути замените на свой. Разрядность консоли должна совпадать с разрядностью установленного сервера.
Утилита rac: завершить сеанс из командной строки
Консоль удобна, когда сервер рядом. Для удалённой работы и скриптов есть rac — клиент сервера администрирования. Ему нужна запущенная служба ras (по умолчанию слушает порт 1545). Если службы нет, её можно запустить так:
ras.exe cluster --daemon
Дальше три шага.
1. Узнать идентификатор кластера:
rac.exe localhost:1545 cluster list
В выводе ищите строку cluster : <uuid>.
2. Получить список сеансов:
rac.exe localhost:1545 session list --cluster=<uuid-кластера>
У каждого сеанса есть строки session : <uuid>, user-name, host, app-id. Чтобы видеть сеансы одной базы, добавьте --infobase=<uuid-базы>. Идентификатор базы покажет команда infobase summary list --cluster=<uuid-кластера>.
3. Завершить сеанс:
rac.exe localhost:1545 session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>
Если у кластера есть администратор, к командам добавляются --cluster-user= и --cluster-pwd=. Полный список параметров для вашей версии покажет rac help session.
Завершение процессов 1С на уровне Windows
Это крайняя мера, когда сеанс не удаляется ни из программы, ни из консоли.
Терминальный сервер или файловая база
Пользователи работают на одном терминальном сервере, база файловая. Закрыть программу конкретного человека можно из «Диспетчера задач» (вкладка «Пользователи») или командой:
taskkill /F /IM 1cv8c.exe /FI "USERNAME eq ivanov"
Для толстого клиента имя процесса — 1cv8.exe. Ключ /F закрывает принудительно, без сохранения.
Если база лежит в сетевой папке, а пользователи сидят на своих компьютерах, полезен приём файлового сервера. Откройте на нём Управление компьютером → Общие папки → Открытые файлы. Найдите файл 1Cv8.1CD, посмотрите, кто его держит, и закройте файл для этого пользователя. Его клиент 1С потеряет доступ к базе.
Сервер 1С: процессы rphost
На сервере 1С работают процессы:
| Процесс | Что делает |
|---|---|
ragent.exe | Агент сервера, принимает подключения (порт 1540) |
rmngr.exe | Менеджер кластера (порт 1541) |
rphost.exe | Рабочий процесс, в нём выполняются сеансы |
В одном rphost.exe живут десятки сеансов разных пользователей и баз. Убийство rphost обрывает работу всех, кто в нём сидит, а не одного человека. Делайте это только вне рабочего времени или когда рабочий процесс уже завис и не отвечает.
Какие сеансы привязаны к какому процессу, видно в консоли: ветка Рабочие процессы, колонка «Рабочий процесс» у сеансов. Номер PID процесса там тоже есть — по нему ищите строку в «Диспетчере задач».
💡 Аккуратнее, чем убивать процесс вручную: в свойствах рабочего сервера задать перезапуск рабочих процессов по интервалу. Кластер сам поднимет новый процесс, переведёт туда новые соединения и погасит старый.
Зависшие сеансы и очистка кэша сервера
Бывает, что сеанс удалили, а он снова в списке. Или пользователь давно вышел, а его сеанс висит, держит лицензию и мешает монопольному режиму.
Действуйте по порядку:
- Удалите сеанс в консоли и подождите минуту — кластер не всегда убирает его мгновенно.
- Проверьте ветку
Соединенияу базы. Если там осталось соединение того же компьютера, разорвите его. - Посмотрите, в каком рабочем процессе сидел сеанс. Если процесс завис — дождитесь вечера и перезапустите его.
- Если не помогло — очистите сеансовые данные сервера.
Последний пункт делают так:
- Предупредите всех: на время процедуры работа с сервером 1С остановится полностью.
- Остановите службу «Агент сервера 1С:Предприятия 8.3».
- Откройте каталог кластера, обычно
C:\Program Files\1cv8\srvinfo\reg_1541\. - Удалите папки, имя которых начинается с
snccntx. Файлы реестра кластера (1CV8Clst.lst) не трогайте. - Запустите службу.
Остановка службы сервера 1С выкинет из всех баз этого сервера всех пользователей и прервёт фоновые задания. Делайте это вечером или в выходной.
Сеансовые данные сервер пересоздаст сам. Чтобы такие «мёртвые» сеансы не копились, задайте в свойствах информационной базы в консоли параметры засыпания пассивного сеанса и завершения спящего сеанса (в секундах). Тогда брошенные сеансы будут закрываться автоматически.
Блокировка входа и режим обслуживания
Выгнать всех по одному — долго, и они тут же зайдут обратно. Для обновления нужен другой инструмент: блокировка начала новых сеансов.
Блокировка в программе (БСП)
В типовых конфигурациях она находится там же, где список пользователей: Администрирование → Обслуживание, ссылка «Блокировка работы пользователей».
- Включите блокировку и задайте время начала и окончания.
- Напишите сообщение: «С 19:00 до 20:00 обновление, сохраните документы».
- Задайте код разрешения, например
upd777. - Отдельной галкой можно заблокировать регламентные задания.
После включения программа показывает работающим пользователям предупреждение, а через несколько минут завершает их сеансы сама. Это работает и в файловом варианте: клиенты периодически проверяют блокировку и закрываются.
Сами вы войдёте в заблокированную базу с ключом /UC и кодом:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Base\Buh" /UC upd777
Блокировка в консоли кластера
В свойствах базы в консоли есть флаг «Блокировка начала сеансов включена», поля начала и конца, сообщение и код разрешения. Там же — «Блокировка регламентных заданий включена». Действует только для клиент-серверной базы. Уже открытые сеансы эта блокировка не закрывает — их удаляют вручную или скриптом.
Через rac то же самое включается командой infobase update с параметрами --sessions-deny=on, --denied-message=, --permission-code= и --scheduled-jobs-deny=on, плюс логин и пароль администратора базы (--infobase-user=, --infobase-pwd=).
Запуск с параметром ЗавершитьРаботуПользователей
Приём, которым пользуются скрипты обновления. Конфигурации на БСП понимают параметр запуска:
1cv8.exe ENTERPRISE /S"srv1c\buh" /N"Администратор" /P"пароль" /C"ЗавершитьРаботуПользователей" /UC upd777
Программа сама включит блокировку, дождётся выхода пользователей и закроет оставшиеся сеансы. Снять блокировку после работ — тот же запуск с /C"РазрешитьРаботуПользователей" и тем же кодом /UC.
Автоматизация: скрипт и COM-соединение
Типичная задача — каждую ночь в 23:00 освобождать базу для архивирования. Её решает скрипт PowerShell с rac, запущенный из «Планировщика заданий» Windows.
$rac = "C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
$srv = "localhost:1545"
$ib = "uuid-информационной-базы"
$cluster = & $rac $srv cluster list |
Where-Object { $_ -match '^cluster\s+:\s+(\S+)' } |
ForEach-Object { $Matches[1] } | Select-Object -First 1
$sessions = & $rac $srv session list --cluster=$cluster --infobase=$ib |
Where-Object { $_ -match '^session\s+:\s+(\S+)' } |
ForEach-Object { $Matches[1] }
foreach ($s in $sessions) {
& $rac $srv session terminate --cluster=$cluster --session=$s
Add-Content "C:\Scripts\kill.log" "$(Get-Date) завершён сеанс $s"
}
Регулярное выражение ^session\s+: берёт именно идентификатор сеанса и пропускает строку session-id с его коротким номером. Перед боевым запуском прогоните скрипт без команды terminate и проверьте, что в списке только сеансы нужной базы.
💡 Хорошая связка: сначала скрипт включает блокировку через infobase update --sessions-deny=on, ждёт 5–10 минут, затем закрывает оставшиеся сеансы. Так люди успевают сохраниться.
Если вы пишете обработку на встроенном языке, учтите: метод ПолучитьСеансыИнформационнойБазы() только возвращает список, завершать сеансы он не умеет. Для завершения используют COM-объект V83.COMConnector: подключение к агенту методом ConnectAgent("tcp://srv1c:1540"), аутентификация в кластере, получение сеансов базы и вызов TerminateSession. Это ровно тот механизм, которым пользуется форма «Активные пользователи» в типовых конфигурациях.