Выгнать всех из базы 1С, когда пользователи не выходят сами

· 9 мин

Содержание

Принудительно завершить сеансы всех пользователей в 1С проще всего штатной блокировкой: Администрирование → Обслуживание → Блокировка работы пользователей, флажок «Установить блокировку» и кнопка Записать. Программа предупредит людей и через несколько минут закроет их сеансы. Если база клиент-серверная, а сеансы «зависли», их удаляют в консоли кластера или командой rac session terminate. В файловой базе завершают процессы 1cv8c.exe и закрывают открытые файлы базы на сервере.

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

Почему пользователи остаются в базе после блокировки

Сеанс в 1С держится не только живым человеком за компьютером. Он может остаться по нескольким причинам:

  • 💤 Компьютер уснул или потерял сеть. Клиент не получает сигнал о блокировке, а сервер ещё какое-то время считает сеанс активным.
  • 📝 Открыто модальное окно или незаписанный документ. Клиентское приложение ждёт ответа пользователя и не закрывается само.
  • ⚙️ Фоновые и регламентные задания. Обмен, загрузка курсов, полнотекстовый индекс запускаются снова и снова, пока их не запретить.
  • 🔌 COM-соединения и внешние программы. Сайт, обработка обмена, отчётная система подключаются к базе как отдельный сеанс.
  • 👻 «Призрачные» сеансы. Клиент давно закрыт, а запись о сеансе осталась в кластере. Бывает после аварийного выключения сервера или сбоя сети.
  • 🗂 Файловая база открыта по сети. Даже после закрытия 1С сетевой ресурс может держать дескриптор файла 1Cv8.1CD.

Отсюда простое правило: сначала запретить новые входы и фоновые задания, затем закрыть то, что осталось, и только потом проверять, не осталось ли хвостов.

СпособГде работаетКогда применятьРиск
Блокировка в программефайловая и сервернаяплановые работыминимальный
Параметр запуска /Cфайловая и сервернаяночные скриптыминимальный
Консоль кластера или racтолько сервернаязависшие сеансытеряются несохранённые данные
Завершение процессов и сетевых файловфайловаяблокировка не помоглавозможна порча базы
Отключение на стороне СУБДсервернаякрайний случайоткат транзакций, ошибки у всех

Способ 1. Штатная блокировка и параметр запуска /C

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, КА, ERP) есть встроенный механизм. Он одинаков для файловой и клиент-серверной базы.

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

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

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

Рядом в том же разделе есть список Активные пользователи. В нём видно, кто сидит в базе, в каком приложении и с какого компьютера. Выделите строку и завершите сеанс командой из панели формы — это точечное отключение одного человека.

Без интерфейса: ключи командной строки

Ключа /DisconnectAll у платформы нет. Ту же блокировку запускают параметром /C, который типовая конфигурация понимает при входе:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Администратор" /P"пароль" /C"ЗавершитьРаботуПользователей" /UC"12345"
  • /C"ЗавершитьРаботуПользователей" — ставит блокировку и выгоняет всех;
  • /UC"12345" — код разрешения, с которым войдёт сам администратор;
  • для серверной базы вместо /F пишут /S"server\base".

Снять блокировку после работ:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /N"Администратор" /P"пароль" /C"РазрешитьРаботуПользователей" /UC"12345"

Если базу заблокировали, а код разрешения забыли, в файловой базе блокировку можно снять, удалив файл 1Cv8.cdn в каталоге базы. В серверной — снимите флажок «Блокировка начала сеансов включена» в свойствах базы в консоли кластера.

Способ 2. Отключение пользователей в клиент-серверной базе через кластер

Когда штатная блокировка не справилась, работают на уровне сервера 1С. Нужны права администратора кластера.

Консоль администрирования серверов

  1. Запустите «Администрирование серверов 1С Предприятия».
  2. Раскройте Central 1C:Enterprise 8.3 servers → имя сервера → Кластеры → кластер → Информационные базы → нужная база → Сеансы.
  3. Выделите все строки (Ctrl+A), щёлкните правой кнопкой и выберите Удалить.
  4. Откройте свойства базы и включите «Блокировка начала сеансов включена» и «Блокировка регламентных заданий включена». Иначе через минуту появятся новые сеансы.

Если в списке видны сеансы с приложением «Фоновое задание», они исчезнут только после запрета регламентных заданий.

Командная строка rac

Для работы rac должен быть запущен сервер администрирования ras (по умолчанию порт 1545). Порядок такой:

cd "C:\Program Files\1cv8\8.3.24.1548\bin"
rac.exe localhost:1545 cluster list
rac.exe localhost:1545 infobase summary list --cluster=<uuid_кластера>
rac.exe localhost:1545 session list --cluster=<uuid_кластера> --infobase=<uuid_базы>
rac.exe localhost:1545 session terminate --cluster=<uuid_кластера> --session=<uuid_сеанса>

Номер версии в пути подставьте свой. Если у кластера есть администратор, добавьте --cluster-user и --cluster-pwd.

Запрет новых сеансов на базе:

rac.exe localhost:1545 infobase update --cluster=<uuid_кластера> --infobase=<uuid_базы> --infobase-user="Администратор" --infobase-pwd="пароль" --sessions-deny=on --scheduled-jobs-deny=on --denied-message="Регламентные работы" --permission-code=12345

После работ то же самое с --sessions-deny=off --scheduled-jobs-deny=off. Полный список ключей покажет rac help infobase.

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

Способ 3. Как принудительно отключить пользователей от файловой базы

У файловой базы нет кластера, и сеанс — это процесс 1С на компьютере пользователя или на терминальном сервере. Порядок от мягкого к жёсткому:

На терминальном сервере

  1. Откройте «Диспетчер задач» → вкладка «Пользователи».
  2. Раскройте каждого пользователя и найдите процессы 1cv8c.exe (тонкий клиент) и 1cv8.exe (толстый клиент и Конфигуратор).
  3. Выберите процесс и нажмите «Снять задачу». Если человек не нужен в системе совсем — «Выйти из системы» для его сессии Windows.

То же из командной строки от администратора:

taskkill /F /IM 1cv8c.exe
taskkill /F /IM 1cv8.exe

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

Если база лежит в сетевой папке

Пользователи работают со своих компьютеров, и до их процессов не дотянуться. Закройте файл на стороне сервера, где лежит база:

  1. Откройте «Управление компьютером» (compmgmt.msc).
  2. Перейдите в Общие папки → Открытые файлы.
  3. Найдите строки с путём к 1Cv8.1CD и выберите «Закрыть открытый файл».

После этого у пользователей появится ошибка соединения, и 1С закроется.

Закрытие файла во время записи может повредить базу. Перед этим сделайте копию каталога базы, если это возможно, и выбирайте момент, когда никто не проводит документы.

Способ 4. Завершение подключений на стороне SQL-сервера

Это крайняя мера для клиент-серверной базы, когда сервер 1С не отвечает или консоль не может удалить сеанс. СУБД рвёт соединения рабочих процессов rphost, незавершённые транзакции откатываются, у пользователей появляется ошибка.

Ничего не удаляйте из таблиц базы 1С вручную. Записи о сеансах хранятся не в SQL, и правка таблиц только испортит данные.

MS SQL Server — перевести базу в однопользовательский режим, оборвав соединения:

ALTER DATABASE [buh] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- работы с базой средствами СУБД
ALTER DATABASE [buh] SET MULTI_USER;

PostgreSQL — завершить все подключения к базе, кроме своего:

SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'buh'
  AND pid <> pg_backend_pid();

После этого сервер 1С сам переподключится к базе, если не включена блокировка сеансов. Поэтому сначала ставьте блокировку в кластере, а потом рвите соединения.

Если сеансы-призраки остались после сбоя

Бывает, что база пуста, а консоль показывает старые сеансы и не даёт их удалить. Тогда чистят кэш кластера:

  1. Остановите службу «Агент сервера 1С:Предприятия 8.3» (имя службы зависит от установки).
  2. В каталоге srvinfo\reg_1541 удалите папки snccntx*.
  3. Запустите службу снова.

Остановка службы обрывает сеансы во всех базах кластера, а не только в одной. Делайте это вне рабочего времени. Файлы 1CV8Clst.lst и папки баз не трогайте.

Способ 5. Скрипты PowerShell и Bash для ночного отключения

Если обновление или выгрузка идут по расписанию, отключение пользователей встраивают в скрипт.

PowerShell для Windows-сервера

$rac = "C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
$srv = "localhost:1545"
$baseName = "buh"

$cluster = (& $rac $srv cluster list | Select-String "^cluster\s+:").ToString().Split(":")[1].Trim()

$infobase = $null
foreach ($line in (& $rac $srv infobase summary list --cluster=$cluster)) {
    if ($line -match "^infobase\s+:\s+(\S+)") { $id = $Matches[1] }
    if ($line -match "^name\s+:\s+(\S+)" -and $Matches[1] -eq $baseName) { $infobase = $id }
}

$sessions = & $rac $srv session list --cluster=$cluster --infobase=$infobase |
    Select-String "^session\s+:" |
    ForEach-Object { $_.ToString().Split(":")[1].Trim() }

foreach ($s in $sessions) {
    & $rac $srv session terminate --cluster=$cluster --session=$s
}
Write-Output ("Завершено сеансов: " + $sessions.Count)

Для файловой базы в сетевой папке вместо rac закрывают открытые файлы штатными командлетами Windows Server:

Get-SmbOpenFile | Where-Object { $_.Path -like "*\Buh\1Cv8.1CD" } | Close-SmbOpenFile -Force

Bash для сервера 1С на Linux

#!/bin/bash
RAC=/opt/1cv8/x86_64/8.3.24.1548/rac
SRV=localhost:1545
BASE=buh

CLUSTER=$($RAC $SRV cluster list | awk -F': ' '/^cluster /{print $2; exit}')
INFOBASE=$($RAC $SRV infobase summary list --cluster=$CLUSTER \
  | awk -F': ' -v b="$BASE" '/^infobase /{id=$2} /^name /{if($2==b){print id; exit}}')

for S in $($RAC $SRV session list --cluster=$CLUSTER --infobase=$INFOBASE \
  | awk -F': ' '/^session /{print $2}'); do
  $RAC $SRV session terminate --cluster=$CLUSTER --session=$S
done

Сервер администрирования на Linux запускают так: ras cluster --daemon. Проверьте путь к версии платформы и добавьте ключи --cluster-user и --cluster-pwd, если кластер защищён паролем.

В скрипте сначала ставьте --sessions-deny=on, потом завершайте сеансы. Иначе фоновые задания и обмены запустятся снова, пока скрипт идёт к следующему шагу.

Проверка файловой базы chdbfl после жёсткого отключения

После снятия задач, закрытия сетевых файлов или выключения сервера файловую базу стоит проверить. Для этого есть утилита chdbfl.exe — она лежит в каталоге bin установленной платформы, например C:\Program Files\1cv8\8.3.24.1548\bin\chdbfl.exe.

  1. Убедитесь, что в базе нет ни одного пользователя. Утилите нужен монопольный доступ.
  2. Сделайте копию файла 1Cv8.1CD.
  3. Запустите chdbfl.exe, укажите путь к 1Cv8.1CD.
  4. Сначала выполните проверку без флажка «Исправлять обнаруженные ошибки».
  5. Если ошибки найдены, включите флажок и запустите повторно — на копии или после копирования.

Утилита проверяет физическую структуру файла. Логические ошибки (битые ссылки, неверные движения) она не ищет — для них в Конфигураторе есть Администрирование → Тестирование и исправление.

Для серверной базы chdbfl не применяется: целостность проверяют средствами СУБД и тем же тестированием в Конфигураторе.

Перед принудительным отключением
Выполнено: 0 / 6

Ошибки при отключении пользователей и что с ними делать

Диагностика: выберите симптом

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

Сохранятся ли данные, которые пользователь не записал?
Нет. Незаписанный документ или справочник пропадёт. Всё, что уже записано и проведено, останется в базе.
Можно ли отключить только одного пользователя?
Да. В программе откройте список активных пользователей и завершите его сеанс, в серверной базе — удалите один сеанс в консоли кластера или командой rac session terminate.
Почему в Конфигураторе видно активных пользователей, но выгнать их нельзя?
В Конфигураторе список Администрирование → Активные пользователи только для просмотра. Завершение сеансов делают в пользовательском режиме, в консоли кластера или через rac.
Блокировка мешает войти самому администратору. Что делать?
Запустите 1С с параметром /UC и кодом разрешения, который указали при установке блокировки. Без кода снимите блокировку в свойствах базы в консоли кластера или удалите файл 1Cv8.cdn в файловой базе.
Освобождаются ли лицензии после удаления сеанса?
Да, лицензия возвращается после закрытия сеанса. Проверить занятые лицензии можно командой rac session list --licenses.