Пользователь держит базу, а обновлять надо сейчас: как отключить его сеанс в 1С 8.3

· 10 мин

Содержание

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

Типичная ситуация: вечер, нужно накатить обновление, а в базе висит «Кладовщик», который ушёл домой и оставил 1С открытой. Дозвониться не получается. Способы идут от мягкого к жёсткому.

С чего начать: кто в базе и через какое приложение

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

  • 👤 имя пользователя информационной базы;
  • 🖥 компьютер, с которого он зашёл;
  • 🧩 приложение: тонкий клиент, толстый клиент, конфигуратор, фоновое задание, COM-соединение, веб-клиент;
  • 🕒 время начала сеанса.

Этот список работает и в файловой, и в клиент-серверной базе. Если в нём «висит» фоновое задание, звонить некому: его остановит только блокировка регламентных заданий или удаление сеанса в кластере.

Свой сеанс конфигуратора в списке тоже есть. Его не трогайте: удалите себя — потеряете несохранённые изменения конфигурации.

Перед любым принудительным отключением помните: человек потеряет несохранённый документ, а открытая транзакция откатится. Если есть время, лучше предупредить пользователей и дать им 5–10 минут.

Способ 1. Завершить сеансы прямо из конфигуратора при обновлении

Это ответ на вопрос «как выкинуть через конфигуратор» в чистом виде. Работает в клиент-серверной базе.

  1. Запустите конфигуратор под администратором базы.
  2. Выполните Конфигурация → Обновить конфигурацию базы данных (или нажмите F7).
  3. Если в базе есть другие сеансы, а изменения требуют монопольного доступа, платформа выведет окно со списком активных сеансов.
  4. Нажмите «Завершить сеансы и повторить».
  5. Если кластер защищён администратором, введите его имя и пароль.

Конфигуратор сам попросит кластер удалить мешающие сеансы и повторит попытку обновить структуру.

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

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

Способ 2. Принудительно завершить сеанс через консоль кластера серверов 1С

Главный инструмент администратора клиент-серверной базы — оснастка «Администрирование серверов 1С Предприятия». Она ставится вместе с сервером 1С и работает через агент сервера (порт 1540).

Удаление одного сеанса

  1. Откройте консоль и разверните Central 1C:Enterprise 8.3 servers → имя сервера → Кластеры → кластер → Информационные базы.
  2. Раскройте нужную базу и выберите ветку Сеансы.
  3. В списке найдите пользователя по колонкам «Пользователь», «Компьютер» и «Приложение».
  4. Щёлкните строку правой кнопкой и выберите «Удалить».
  5. Подтвердите. Сеанс исчезнет из списка, лицензия освободится.

У пользователя появится сообщение о том, что сеанс завершён, и 1С предложит перезапуститься.

Если сеанс не удаляется

Сеанс, который прямо сейчас выполняет долгий запрос к СУБД, может уйти не сразу. Посмотрите в той же строке колонки про время вызова и захват СУБД: если там растущие значения, сеанс ждёт ответа от базы данных. Подождите минуту-две: после окончания вызова он завершится.

Ещё один уровень — ветка Соединения. Она показывает соединения с рабочими процессами. Удаление соединения рвёт связь клиента с сервером, но сеанс при этом может остаться в списке «Сеансы». Поэтому сначала удаляйте сеанс, а соединение — только если сеанс не уходит.

Смотрите сеансы внутри ветки нужной базы, а не общий список кластера: так вы не перепутаете пользователя с тезкой из соседней базы.

Способ 3. Блокировка начала сеансов: выгнать всех и не пустить обратно

Удалённый пользователь часто тут же заходит снова. Чтобы этого не было, ставят блокировку.

Блокировка в консоли кластера

  1. В консоли откройте свойства информационной базы.
  2. Введите логин и пароль администратора базы.
  3. Включите флаг «Блокировка начала сеансов включена».
  4. Заполните «Сообщение блокировки» — его увидит пользователь при попытке входа.
  5. Укажите «Код разрешения». С ним в базу сможет зайти администратор.
  6. При необходимости включите «Блокировка регламентных заданий включена» — так перестанут стартовать фоновые задания.

Блокировка не выбрасывает тех, кто уже вошёл: она только запрещает новые входы. Действующие сеансы удалите вручную, как в способе 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

В файловом варианте нет ни кластера, ни консоли. Порядок действий другой.

  1. Обработка «Блокировка работы пользователей» из типовой конфигурации. Это самый корректный путь: сеансы закроются сами после предупреждения. Блокировка файловой базы хранится в файле 1Cv8.cdn в каталоге базы.
  2. Терминальный сервер . Если пользователи работают по RDP, откройте Диспетчер задач → Пользователи, найдите нужного человека и завершите его процесс 1cv8c.exe или 1cv8.exe. Можно выйти из его сеанса Windows целиком.
  3. Общая папка на сервере. Если база лежит в сетевой папке, откройте на сервере Управление компьютером → Общие папки → Открытые файлы. Найдите файл 1Cv8.1CD, открытый нужным пользователем, и закройте его.
  4. Звонок и просьба выйти. Для файловой базы на 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 минут до начала.
  • 🔁 Регламентные задания под контролем. Тяжёлые фоновые задания (обмены, загрузка курсов, полнотекстовый индекс) не ставьте на время обновлений.
  • 👥 Отдельный администратор кластера. Пароль на кластер не даёт случайному пользователю консоли удалить чужие сеансы.
  • 🧾 Журнал регистрации. После принудительного отключения проверьте в журнале, не оборвалось ли проведение документа, и при необходимости перепроведите его.
Освобождается ли лицензия после удаления сеанса?
Да. Как только сеанс исчезает из списка в консоли кластера, занятая им клиентская лицензия становится свободной для следующего входа.
Можно ли завершить сеанс пользователя из режима 1С:Предприятие, а не из конфигуратора?
Да, в типовых конфигурациях на БСП есть обработка «Активные пользователи» с командой завершения сеанса. В клиент-серверной базе она попросит пароль администратора кластера.
Пропадут ли данные, которые пользователь не успел записать?
Несохранённые изменения в открытых формах пропадут. Уже записанные и проведённые документы останутся, а незавершённая транзакция откатится.
Что будет, если удалить собственный сеанс конфигуратора?
Конфигуратор потеряет связь с базой и предложит перезапуск. Несохранённые изменения конфигурации будут потеряны, поэтому сначала сохраните конфигурацию.
Почему в окне активных пользователей конфигуратора нет кнопки завершения?
Это окно — только монитор. Управление сеансами в клиент-серверном варианте отдано кластеру, поэтому завершают их через консоль, rac или при обновлении базы данных.