Принудительное отключение сеансов 1С: от вежливой блокировки до rac и СУБД
Содержание
Выгнать пользователя из
базы 1С 8.3 проще всего так: в клиент-серверном варианте откройте «Консоль администрирования серверов 1С Предприятия», найдите базу, раскройте ветку Сеансы, щёлкните по сеансу правой кнопкой и выберите Удалить. Пользователь получит сообщение о разрыве соединения, его несохранённые данные пропадут. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) то же самое делается из самой программы — через обработку «Активные пользователи» и команду Завершить сеанс.
Для файловой базы консоли нет. Там принудительно разорвать сеанс можно только блокировкой входа или закрытием процесса 1cv8.exe на компьютере пользователя. Ниже — все способы по порядку: от мягкого к жёсткому.
Сначала выясните, кто и чем держит базу
Не завершайте сеансы вслепую. Сначала посмотрите, кто подключён и что делает. Это займёт минуту, а сохранит чужой недопроведённый документ.
Где увидеть список подключённых:
- 👥 В пользовательском режиме. В конфигурациях на БСП откройте
Администрирование → Обслуживаниеи найдите там список активных пользователей. Если раздела не видно, включите в настройках «Функции для технического специалиста», затемГлавное меню → Все функции → Обработки → Активные пользователи. - 🛠 В Конфигураторе. Пункт
Администрирование → Активные пользователипоказывает пользователя, компьютер, приложение и время начала работы. Завершить сеанс отсюда нельзя — только посмотреть. - 🖥 В консоли кластера. Ветка
Сеансыу конкретной базы. Это самый подробный список: номер сеанса, приложение, компьютер, рабочий процесс, время последней активности, время вызовов к СУБД.
На что смотреть, прежде чем отключать:
| Что видите | Что это значит | Что делать |
|---|---|---|
| Сеанс давно без активности | Пользователь ушёл и оставил программу открытой | Можно завершать, предупредив человека |
| Тип приложения «Конфигуратор» | Кто-то правит конфигурацию | Сначала свяжитесь: можно потерять несохранённые изменения |
| «Фоновое задание» | Работает регламентное задание или длительная операция | Выясните, что за задание; закрытие месяца лучше дождаться |
| Сеанс с большим временем вызова СУБД | Идёт тяжёлый запрос или он завис на блокировке | Разбирайтесь по разделу про СУБД ниже |
| Несколько сеансов одного пользователя с одного компьютера | Программа «упала», а сеанс на сервере остался | Безопасно завершать старые |
Сеанс Конфигуратора можно завершить, как любой другой. Сохранённые в конфигурации изменения останутся, но несохранённая работа разработчика пропадёт.
Отключение пользователей из самой программы
В типовых конфигурациях на БСП обработка «Активные пользователи» умеет не только показывать список. В командной панели есть кнопка Завершить сеанс.
Порядок действий:
- Откройте список активных пользователей (путь — в разделе выше).
- Выделите строку нужного сеанса. Можно выделить несколько.
- Нажмите
Завершить сеанс. - В клиент-серверной базе программа запросит имя и пароль администратора кластера. Если кластер без администратора, оставьте поля пустыми.
- Обновите список и убедитесь, что сеанс пропал.
В файловой базе этой кнопки нет или она не сработает: управлять чужими сеансами там нечем. Единственный «программный» вариант для файла — блокировка, о ней ниже.
Блокировка входа с предупреждением
Этот способ не выбивает людей мгновенно, а выпроваживает их вежливо. Он нужен перед обновлением, когда надо освободить базу для монопольного режима.
Найдите в Администрирование → Обслуживание команду блокировки работы пользователей. В открывшейся форме:
- ✅ поставьте флажок установки блокировки;
- 🕒 укажите время начала и окончания;
- 💬 напишите сообщение, которое увидят пользователи, например «Обновление программы с 19:00 до 20:00»;
- 🔑 задайте код разрешения — с ним вы сами сможете войти, несмотря на блокировку.
Подключённые пользователи заранее получат предупреждение, а к началу периода программа сама завершит их сеансы. Новые входы будут запрещены до конца периода.
Чтобы войти в заблокированную базу, добавьте в параметры запуска ключ /UC с кодом разрешения без пробела. Например, код obnov превращается в /UCobnov. Ключ можно вписать в поле «Дополнительные параметры запуска» в настройках базы в окне запуска.
Не забудьте снять блокировку после работ. Если время окончания не указано, база останется закрытой для всех, кто не знает кода, и утром бухгалтерия не сможет войти.
Как выгнать пользователя через консоль кластера 1С
Это основной инструмент администратора в клиент-серверном варианте. Консоль подключается к агенту сервера 1С (по умолчанию порт 1540) и показывает все базы и сеансы кластера.
Если консоль не открывается
На свежем компьютере ярлык консоли часто выдаёт ошибку о незарегистрированном классе. Причина — не зарегистрирована библиотека radmin.dll нужной версии платформы. Откройте командную строку от имени администратора и выполните:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"
Номер версии подставьте свой: он должен совпадать с версией сервера 1С. Если на компьютере несколько версий платформы, зарегистрируйте библиотеку той, что совпадает с сервером, иначе консоль подключится с ошибкой несовпадения версий.
Завершение сеанса
- Запустите «Консоль администрирования серверов 1С Предприятия».
- Раскройте
Центральные серверы 1С:Предприятия → <имя сервера> → Кластеры → <кластер> → Информационные базы → <база>. - Если появится запрос, введите логин и пароль администратора кластера и администратора базы.
- Откройте ветку
Сеансы. В правой части появится таблица сеансов. - Выделите нужные строки. Удобно отсортировать по колонке пользователя или компьютера.
- Правой кнопкой —
Удалить. Подтвердите.
Пользователь увидит сообщение о том, что сеанс завершён администратором, и программа закроется. Документ, который он не записал, будет потерян.
Разрыв соединения вместо сеанса
Рядом с сеансами есть ветка Соединения. Иногда сеанс уже удалён, а соединение висит, и база всё равно считается занятой. Тогда найдите соединение того же компьютера и приложения и удалите его так же, через контекстное меню.
Блокировка в свойствах базы
В консоли есть свой аналог блокировки, работающий и для конфигураций без БСП. Откройте свойства информационной базы (правая кнопка по базе → Свойства):
- Блокировка начала сеансов включена — запрещает новые входы;
- Начало и конец — период блокировки;
- Сообщение — текст для пользователей;
- Код разрешения — тот же принцип, что и
/UC; - Блокировка регламентных заданий включена — останавливает фоновые задания, которые иначе снова займут базу через минуту.
Блокировка в консоли не выкидывает уже подключённых. Схема такая: включить блокировку, затем удалить текущие сеансы. Тогда никто не успеет зайти снова.
Если консоли нет: утилита rac
На Linux-сервере или когда нужен скрипт, используют консольную утилиту rac. Она работает через сервер администрирования ras, который нужно запустить на сервере 1С (по умолчанию слушает порт 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.
Файловая база: что делать, если консоли нет
У файловой базы нет сервера, а значит, нет и списка сеансов, которым можно управлять со стороны. Сеанс «живёт» в процессе 1cv8.exe на компьютере пользователя и держит открытым файл 1Cv8.1CD.
Варианты от мягкого к жёсткому:
- Блокировка из программы (если конфигурация на БСП) — описана выше. Клиенты сами закроются к началу периода.
- Попросить пользователя выйти — звучит банально, но список активных пользователей в Конфигураторе как раз подскажет имя компьютера.
- Закрыть процесс на рабочем месте или терминальном сервере. На терминальном сервере: «Диспетчер задач» → вкладка «Пользователи» → нужный пользователь → снять задачу
1cv8.exeили выйти из системы за него. - Закрыть открытый файл на файловом сервере. Если база лежит в общей папке, откройте на сервере
compmgmt.msc → Общие папки → Открытые файлы, найдите1Cv8.1CDи закройте его для нужного пользователя.
Пункты 3 и 4 — аварийные. Если пользователь в этот момент записывал документ, файловая база может получить повреждение. После такого отключения проверьте базу через «Тестирование и исправление» в Конфигураторе, предварительно сделав копию каталога базы.
Если пользователей нет, а база всё равно пишет, что занята, проверьте процессы 1cv8.exe и 1cv8c.exe на всех компьютерах, где она открывалась, и зависшие сеансы на терминальном сервере. Часто «призраком» оказывается свёрнутый сеанс RDP, из которого человек не вышел.
Блокировки на уровне СУБД: MS SQL и PostgreSQL
Бывает, что сеанс в консоли уже удалён, а пользователи по-прежнему ждут: висит тяжёлый запрос, который держит блокировки в базе данных. Рабочий процесс 1С продолжает ждать ответа от СУБД. Тогда смотрят на сторону SQL.
Прерывать соединения в СУБД — крайняя мера. Сеанс 1С при этом получит ошибку обращения к базе данных, транзакция откатится. Это безопасно для данных, но пользователь потеряет результат операции.
MS SQL Server
В SQL Server Management Studio выполните запрос к нужной базе:
SELECT r.session_id, r.blocking_session_id, r.wait_type, r.wait_time,
s.host_name, s.program_name, t.text
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON s.session_id = r.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.database_id = DB_ID('ИмяБазы');
Колонка blocking_session_id показывает, кто держит блокировку. Найдите «голову» цепочки — сеанс, который блокирует других, а сам не заблокирован. Прервать его:
KILL 57; -- номер session_id из запроса выше
Быстрый обзор без запроса — системная процедура sp_who2, колонка BlkBy.
PostgreSQL
Список активных запросов и блокирующих их процессов:
SELECT pid, usename, client_addr, state, now() - query_start AS dlit,
pg_blocking_pids(pid) AS blokiruyut, left(query, 120) AS zapros
FROM pg_stat_activity
WHERE datname = 'imya_bazy' AND state <> 'idle'
ORDER BY query_start;
Сначала попробуйте отменить только запрос — pg_cancel_backend, соединение останется. Если не помогло, завершите процесс целиком:
SELECT pg_cancel_backend(12345);
SELECT pg_terminate_backend(12345);
Соединения с СУБД открывает рабочий процесс rphost, а не пользователь. Поэтому в host_name или client_addr вы увидите сервер 1С, а не компьютер бухгалтера. Сопоставить сеанс 1С с соединением СУБД помогает консоль кластера: у сеанса отображается занятое соединение и время вызова СУБД.
Как автоматизировать отключение пользователей по расписанию
Типичная задача — каждую ночь освобождать базу для обновления или выгрузки. Делать это руками не нужно.
Встроенные средства
- 🕒 Блокировка с периодом. В обработке блокировки (БСП) и в свойствах базы в консоли задаются время начала и окончания. Если обновление разовое, этого достаточно.
- ⚙️ Регламентное задание в конфигурации. Можно написать своё задание, которое через объект
COMConnectorили программный интерфейс администрирования кластера завершает сеансы. Это доработка конфигурации, её делает программист. Для типовой базы надёжнее внешний скрипт — он не мешает обновлениям.
Скрипт на rac и Планировщик заданий
Пример bat-файла: включает блокировку входа и завершает все сеансы одной базы. UUID кластера и базы возьмите из rac cluster list и rac infobase summary list.
@echo off
set RAC="C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
set CL=<UUID кластера>
set IB=<UUID базы>
%RAC% infobase update --cluster=%CL% --infobase=%IB% ^
--infobase-user=Администратор --infobase-pwd=Пароль ^
--sessions-deny=on --scheduled-jobs-deny=on ^
--denied-message="Плановое обслуживание" --permission-code=service
for /f "tokens=2 delims=: " %%s in ('%RAC% session list --cluster=%CL% --infobase=%IB% ^| findstr /b /c:"session "') do (
%RAC% session terminate --cluster=%CL% --session=%%s
)
Запустите файл через Планировщик заданий Windows под учётной записью, которой доступен сервер ras. После обслуживания второй скрипт должен снять блокировку тем же infobase update с параметрами --sessions-deny=off --scheduled-jobs-deny=off.
Пароль в открытом виде в bat-файле — риск. Храните скрипт в папке, доступной только администраторам, и заведите для обслуживания отдельного пользователя базы с нужными правами.
Проверьте скрипт днём на тестовой базе. Если findstr ничего не находит, выполните rac session list вручную и посмотрите, как выглядит вывод вашей версии.
Частые ошибки при отключении пользователей
Отдельно о перезапуске службы «Агент сервера 1С:Предприятия». Это действительно выгонит всех и сразу, но из всех баз кластера, а не из одной. Делайте это только в нерабочее время и после предупреждения пользователей всех баз.