Пользователь держит базу, а обновлять надо сейчас: как отключить его сеанс в 1С 8.3
Содержание
Завершить сеанс пользователя
в 1С 8.3 из самого конфигуратора можно в одном случае: при Конфигурация → Обновить конфигурацию базы данных в клиент-серверной базе платформа показывает список мешающих сеансов и кнопку «Завершить сеансы и повторить». Окно Администрирование → Активные пользователи в конфигураторе только показывает, кто сидит в базе, — кнопки «выкинуть» там нет. Принудительно отключают через консоль кластера серверов (сеанс → «Удалить»), утилиту rac или блокировку сеансов.
Типичная ситуация: вечер, нужно накатить обновление, а в базе висит «Кладовщик», который ушёл домой и оставил 1С открытой. Дозвониться не получается. Способы идут от мягкого к жёсткому.
С чего начать: кто в базе и через какое приложение
Сначала выясните, кто именно мешает. В конфигураторе откройте Администрирование → Активные пользователи. Окно покажет:
- 👤 имя пользователя информационной базы;
- 🖥 компьютер, с которого он зашёл;
- 🧩 приложение: тонкий клиент, толстый клиент, конфигуратор, фоновое задание, COM-соединение, веб-клиент;
- 🕒 время начала сеанса.
Этот список работает и в файловой, и в клиент-серверной базе. Если в нём «висит» фоновое задание, звонить некому: его остановит только блокировка регламентных заданий или удаление сеанса в кластере.
Свой сеанс конфигуратора в списке тоже есть. Его не трогайте: удалите себя — потеряете несохранённые изменения конфигурации.
Перед любым принудительным отключением помните: человек потеряет несохранённый документ, а открытая транзакция откатится. Если есть время, лучше предупредить пользователей и дать им 5–10 минут.
Способ 1. Завершить сеансы прямо из конфигуратора при обновлении
Это ответ на вопрос «как выкинуть через конфигуратор» в чистом виде. Работает в клиент-серверной базе.
- Запустите конфигуратор под администратором базы.
- Выполните
Конфигурация → Обновить конфигурацию базы данных(или нажмитеF7). - Если в базе есть другие сеансы, а изменения требуют монопольного доступа, платформа выведет окно со списком активных сеансов.
- Нажмите «Завершить сеансы и повторить».
- Если кластер защищён администратором, введите его имя и пароль.
Конфигуратор сам попросит кластер удалить мешающие сеансы и повторит попытку обновить структуру.
Кнопка закрывает сеансы всех пользователей разом, без предупреждения. Нажимайте её только когда уверены, что в базе не идёт проведение, закрытие месяца или обмен.
В файловой базе такого окна нет: там платформа просто сообщит, что не удалось установить монопольный режим. Для файлового варианта есть отдельные приёмы, о них ниже.
Способ 2. Принудительно завершить сеанс через консоль кластера серверов 1С
Главный инструмент администратора клиент-серверной базы — оснастка «Администрирование серверов 1С Предприятия». Она ставится вместе с сервером 1С и работает через агент сервера (порт 1540).
Удаление одного сеанса
- Откройте консоль и разверните
Central 1C:Enterprise 8.3 servers → имя сервера → Кластеры → кластер → Информационные базы. - Раскройте нужную базу и выберите ветку
Сеансы. - В списке найдите пользователя по колонкам «Пользователь», «Компьютер» и «Приложение».
- Щёлкните строку правой кнопкой и выберите «Удалить».
- Подтвердите. Сеанс исчезнет из списка, лицензия освободится.
У пользователя появится сообщение о том, что сеанс завершён, и 1С предложит перезапуститься.
Если сеанс не удаляется
Сеанс, который прямо сейчас выполняет долгий запрос к СУБД, может уйти не сразу. Посмотрите в той же строке колонки про время вызова и захват СУБД: если там растущие значения, сеанс ждёт ответа от базы данных. Подождите минуту-две: после окончания вызова он завершится.
Ещё один уровень — ветка Соединения. Она показывает соединения с рабочими процессами. Удаление соединения рвёт связь клиента с сервером, но сеанс при этом может остаться в списке «Сеансы». Поэтому сначала удаляйте сеанс, а соединение — только если сеанс не уходит.
Смотрите сеансы внутри ветки нужной базы, а не общий список кластера: так вы не перепутаете пользователя с тезкой из соседней базы.
Способ 3. Блокировка начала сеансов: выгнать всех и не пустить обратно
Удалённый пользователь часто тут же заходит снова. Чтобы этого не было, ставят блокировку.
Блокировка в консоли кластера
- В консоли откройте свойства информационной базы.
- Введите логин и пароль администратора базы.
- Включите флаг «Блокировка начала сеансов включена».
- Заполните «Сообщение блокировки» — его увидит пользователь при попытке входа.
- Укажите «Код разрешения». С ним в базу сможет зайти администратор.
- При необходимости включите «Блокировка регламентных заданий включена» — так перестанут стартовать фоновые задания.
Блокировка не выбрасывает тех, кто уже вошёл: она только запрещает новые входы. Действующие сеансы удалите вручную, как в способе 2.
Чтобы зайти в заблокированную базу, добавьте к строке запуска параметр /UC с кодом разрешения:
1cv8.exe DESIGNER /S "srv1c\buh" /UC 12345
Блокировка средствами типовой конфигурации
В БП 3.0, ЗУП 3.1, УТ 11 и других конфигурациях на БСП есть обработка «Блокировка работы пользователей». Её проще всего найти так: Главное меню → Все функции → Обработки (если пункта «Все функции» нет, включите его в Сервис и настройки → Параметры).
Её плюс — мягкость. Обработка показывает пользователям предупреждение, даёт время сохранить документы и через несколько минут закрывает их сеансы сама. Работает и в файловом, и в клиент-серверном варианте.
Есть и вариант для запуска из командной строки, удобный для ночных регламентов:
1cv8.exe ENTERPRISE /S "srv1c\buh" /N "Администратор" /P "пароль" /C "ЗавершитьРаботуПользователей" /UC 12345
После работ снимите блокировку той же обработкой или запуском с /C "РазрешитьРаботуПользователей".
| Метод | Когда подходит | Риски |
|---|---|---|
| Кнопка в конфигураторе при обновлении | Нужно срочно обновить структуру базы | Закрывает всех без предупреждения |
| Удаление сеанса в консоли | Мешает один-два человека | Пользователь может зайти снова |
| Блокировка начала сеансов | Плановые работы, нельзя пускать новых | Забыли снять — утром никто не войдёт |
| Обработка БСП | Нужно предупредить людей и дать сохраниться | Сеансы без интерфейса закрываются хуже |
rac / скрипт | Регулярные ночные работы | Ошибка в фильтре удалит лишние сеансы |
Сеанс завис на уровне СУБД: что можно, а что нельзя
Иногда сеанс в консоли уже удалён, а базу всё равно держит: таблицы заблокированы, обновление падает с ошибкой блокировки. Это значит, что на стороне SQL Server или PostgreSQL осталась незавершённая транзакция.
Как найти виновника
- 🔎 MS SQL Server. В SQL Server Management Studio выполните
sp_who2или откройте Activity Monitor. Ищите строку с заполненной колонкойBlkBy— это номер сеанса, который блокирует остальных. - 🔎 PostgreSQL. Запрос к представлению
pg_stat_activityпокажет, какие процессы держат транзакцию и сколько она длится.
SELECT pid, usename, state, xact_start, query
FROM pg_stat_activity
WHERE datname = 'buh' AND state <> 'idle'
ORDER BY xact_start;
Как снять
В SQL Server — команда KILL <номер>, в PostgreSQL — SELECT pg_terminate_backend(<pid>);.
Это крайняя мера. Принудительное завершение на стороне СУБД откатывает транзакцию целиком, а рабочий процесс 1С получает ошибку соединения. Пострадать могут сеансы других пользователей, которые обслуживал тот же процесс. Делайте это только после попытки удалить сеанс в консоли кластера и только вне рабочего времени.
Удалять сессии СУБД, принадлежащие процессам rphost без разбора, нельзя: каждый рабочий процесс держит пул соединений и обслуживает сразу много пользователей.
Как отключить пользователя в файловой базе 1С 8.3
В файловом варианте нет ни кластера, ни консоли. Порядок действий другой.
- Обработка «Блокировка работы пользователей» из типовой конфигурации. Это самый корректный путь: сеансы закроются сами после предупреждения. Блокировка файловой базы хранится в файле
1Cv8.cdnв каталоге базы. - Терминальный сервер
. Если пользователи работают по RDP, откройте
Диспетчер задач → Пользователи, найдите нужного человека и завершите его процесс1cv8c.exeили1cv8.exe. Можно выйти из его сеанса Windows целиком. - Общая папка на сервере. Если база лежит в сетевой папке, откройте на сервере
Управление компьютером → Общие папки → Открытые файлы. Найдите файл1Cv8.1CD, открытый нужным пользователем, и закройте его. - Звонок и просьба выйти. Для файловой базы на 3–5 человек часто быстрее всего.
Закрытие файла 1Cv8.1CD или завершение процесса посреди записи — риск повредить файловую базу. Перед этим сделайте копию каталога базы, а после — проверьте её через Администрирование → Тестирование и исправление в конфигураторе.
Не удаляйте вручную файлы из каталога базы, кроме 1Cv8.cdn при зависшей блокировке, и то при закрытых сеансах.
Скрипты для массового завершения сеансов
Если обновление идёт каждую ночь, кликать в консоли неудобно. Для автоматизации есть консольная утилита rac. Она работает через сервер администрирования ras (по умолчанию порт 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.
Пример на PowerShell: завершить все сеансы одной базы, кроме конфигуратора.
$rac = "C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe" # подставьте свою версию
$base = "buh" # имя базы в кластере
$cluster = (& $rac cluster list | Select-String '^cluster\s*:' |
Select-Object -First 1).Line.Split(':')[1].Trim()
$ibId = $null; $curId = $null
foreach ($line in (& $rac infobase summary list --cluster=$cluster)) {
if ($line -match '^infobase\s*:\s*(\S+)') { $curId = $Matches[1] }
if ($line -match '^name\s*:\s*(.+)$' -and $Matches[1].Trim() -eq $base) { $ibId = $curId }
}
if (-not $ibId) { Write-Host "База $base не найдена"; exit 1 }
$sid = $null; $app = $null; $list = @()
foreach ($line in (& $rac session list --cluster=$cluster --infobase=$ibId)) {
if ($line -match '^session\s*:\s*(\S+)') { $sid = $Matches[1] }
if ($line -match '^app-id\s*:\s*(\S+)') { $app = $Matches[1]; $list += [pscustomobject]@{Id=$sid; App=$app} }
}
foreach ($s in $list | Where-Object { $_.App -ne 'Designer' }) {
& $rac session terminate --cluster=$cluster --session=$($s.Id)
Write-Host "Завершён сеанс $($s.Id) ($($s.App))"
}
Связка для ночного регламента обычно такая: включить блокировку начала сеансов (rac infobase update с параметром запрета сеансов — точное имя смотрите в rac help infobase), прогнать скрипт выше, выполнить обновление, снять блокировку.
Прежде чем ставить скрипт в планировщик, запустите его днём на тестовой базе с заменой terminate на вывод списка. Так вы увидите, какие сеансы он бы удалил.
Ошибки при попытке завершить сеанс и что с ними делать
Как сделать, чтобы сеансы не зависали
Сеансы-«призраки» чаще всего оставляют три вещи: обрыв RDP, сон ноутбука и закрытие окна 1С через диспетчер задач. Что помогает:
- ⏱ Лимит на отключённые RDP-сеансы. В групповой политике терминального сервера задайте время, через которое отключённый сеанс Windows завершается. Вместе с ним закроется и 1С.
- 📢 Регламент по времени. Объявите окно обслуживания, например с 22:00 до 23:00, и включайте блокировку с сообщением за 10–15 минут до начала.
- 🔁 Регламентные задания под контролем. Тяжёлые фоновые задания (обмены, загрузка курсов, полнотекстовый индекс) не ставьте на время обновлений.
- 👥 Отдельный администратор кластера. Пароль на кластер не даёт случайному пользователю консоли удалить чужие сеансы.
- 🧾 Журнал регистрации. После принудительного отключения проверьте в журнале, не оборвалось ли проведение документа, и при необходимости перепроведите его.