Принудительное отключение сеансов 1С: от вежливой блокировки до rac и СУБД

· 10 мин

Содержание

Выгнать пользователя из базы 1С 8.3 проще всего так: в клиент-серверном варианте откройте «Консоль администрирования серверов 1С Предприятия», найдите базу, раскройте ветку Сеансы, щёлкните по сеансу правой кнопкой и выберите Удалить. Пользователь получит сообщение о разрыве соединения, его несохранённые данные пропадут. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) то же самое делается из самой программы — через обработку «Активные пользователи» и команду Завершить сеанс.

Для файловой базы консоли нет. Там принудительно разорвать сеанс можно только блокировкой входа или закрытием процесса 1cv8.exe на компьютере пользователя. Ниже — все способы по порядку: от мягкого к жёсткому.

Сначала выясните, кто и чем держит базу

Не завершайте сеансы вслепую. Сначала посмотрите, кто подключён и что делает. Это займёт минуту, а сохранит чужой недопроведённый документ.

Где увидеть список подключённых:

  • 👥 В пользовательском режиме. В конфигурациях на БСП откройте Администрирование → Обслуживание и найдите там список активных пользователей. Если раздела не видно, включите в настройках «Функции для технического специалиста», затем Главное меню → Все функции → Обработки → Активные пользователи.
  • 🛠 В Конфигураторе. Пункт Администрирование → Активные пользователи показывает пользователя, компьютер, приложение и время начала работы. Завершить сеанс отсюда нельзя — только посмотреть.
  • 🖥 В консоли кластера. Ветка Сеансы у конкретной базы. Это самый подробный список: номер сеанса, приложение, компьютер, рабочий процесс, время последней активности, время вызовов к СУБД.

На что смотреть, прежде чем отключать:

Что видитеЧто это значитЧто делать
Сеанс давно без активностиПользователь ушёл и оставил программу открытойМожно завершать, предупредив человека
Тип приложения «Конфигуратор»Кто-то правит конфигурациюСначала свяжитесь: можно потерять несохранённые изменения
«Фоновое задание»Работает регламентное задание или длительная операцияВыясните, что за задание; закрытие месяца лучше дождаться
Сеанс с большим временем вызова СУБДИдёт тяжёлый запрос или он завис на блокировкеРазбирайтесь по разделу про СУБД ниже
Несколько сеансов одного пользователя с одного компьютераПрограмма «упала», а сеанс на сервере осталсяБезопасно завершать старые

Сеанс Конфигуратора можно завершить, как любой другой. Сохранённые в конфигурации изменения останутся, но несохранённая работа разработчика пропадёт.

Отключение пользователей из самой программы

В типовых конфигурациях на БСП обработка «Активные пользователи» умеет не только показывать список. В командной панели есть кнопка Завершить сеанс.

Порядок действий:

  1. Откройте список активных пользователей (путь — в разделе выше).
  2. Выделите строку нужного сеанса. Можно выделить несколько.
  3. Нажмите Завершить сеанс.
  4. В клиент-серверной базе программа запросит имя и пароль администратора кластера. Если кластер без администратора, оставьте поля пустыми.
  5. Обновите список и убедитесь, что сеанс пропал.

В файловой базе этой кнопки нет или она не сработает: управлять чужими сеансами там нечем. Единственный «программный» вариант для файла — блокировка, о ней ниже.

Блокировка входа с предупреждением

Этот способ не выбивает людей мгновенно, а выпроваживает их вежливо. Он нужен перед обновлением, когда надо освободить базу для монопольного режима.

Найдите в Администрирование → Обслуживание команду блокировки работы пользователей. В открывшейся форме:

  • ✅ поставьте флажок установки блокировки;
  • 🕒 укажите время начала и окончания;
  • 💬 напишите сообщение, которое увидят пользователи, например «Обновление программы с 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С Предприятия».
  2. Раскройте Центральные серверы 1С:Предприятия → <имя сервера> → Кластеры → <кластер> → Информационные базы → <база>.
  3. Если появится запрос, введите логин и пароль администратора кластера и администратора базы.
  4. Откройте ветку Сеансы. В правой части появится таблица сеансов.
  5. Выделите нужные строки. Удобно отсортировать по колонке пользователя или компьютера.
  6. Правой кнопкой — Удалить. Подтвердите.

Пользователь увидит сообщение о том, что сеанс завершён администратором, и программа закроется. Документ, который он не записал, будет потерян.

Разрыв соединения вместо сеанса

Рядом с сеансами есть ветка Соединения. Иногда сеанс уже удалён, а соединение висит, и база всё равно считается занятой. Тогда найдите соединение того же компьютера и приложения и удалите его так же, через контекстное меню.

Блокировка в свойствах базы

В консоли есть свой аналог блокировки, работающий и для конфигураций без БСП. Откройте свойства информационной базы (правая кнопка по базе → Свойства):

  • Блокировка начала сеансов включена — запрещает новые входы;
  • Начало и конец — период блокировки;
  • Сообщение — текст для пользователей;
  • Код разрешения — тот же принцип, что и /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.

Варианты от мягкого к жёсткому:

  1. Блокировка из программы (если конфигурация на БСП) — описана выше. Клиенты сами закроются к началу периода.
  2. Попросить пользователя выйти — звучит банально, но список активных пользователей в Конфигураторе как раз подскажет имя компьютера.
  3. Закрыть процесс на рабочем месте или терминальном сервере. На терминальном сервере: «Диспетчер задач» → вкладка «Пользователи» → нужный пользователь → снять задачу 1cv8.exe или выйти из системы за него.
  4. Закрыть открытый файл на файловом сервере. Если база лежит в общей папке, откройте на сервере 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С:Предприятия». Это действительно выгонит всех и сразу, но из всех баз кластера, а не из одной. Делайте это только в нерабочее время и после предупреждения пользователей всех баз.

Частые вопросы

Увидит ли пользователь, что его выгнали?
Да. В клиент-серверной базе появится сообщение о том, что сеанс завершён администратором, а программа закроется. При блокировке через БСП он заранее получит предупреждение с вашим текстом.
Освобождается ли лицензия после завершения сеанса?
Да, лицензия возвращается в пул сразу после того, как сеанс удалён на сервере. Если пользователь просто закрыл ноутбук крышкой, сеанс может провисеть, пока сервер не обнаружит разрыв, и держать лицензию.
Можно ли выгнать пользователя, не будучи администратором?
Нет. Для завершения чужих сеансов нужны административные права в базе, а в клиент-серверном варианте ещё и пароль администратора кластера, если он задан.
Потеряются ли проведённые документы?
Нет. Записанные и проведённые документы уже в базе. Пропадает только то, что пользователь не успел записать, и операция, выполнявшаяся в момент разрыва, — её транзакция откатится.
Как выгнать самого себя, если сеанс завис на другом компьютере?
Так же, как чужой: найдите свой сеанс по имени компьютера в списке активных пользователей или в консоли и завершите его из нового сеанса.