Выгнать всех из базы 1С, когда пользователи не выходят сами
Содержание
Принудительно завершить сеансы всех пользователей в 1С проще всего штатной блокировкой: Администрирование → Обслуживание → Блокировка работы пользователей, флажок «Установить блокировку» и кнопка Записать. Программа предупредит людей и через несколько минут закроет их сеансы. Если база клиент-серверная, а сеансы «зависли», их удаляют в консоли кластера или командой rac session terminate. В файловой базе завершают процессы 1cv8c.exe и закрывают открытые файлы базы на сервере.
Типичная ситуация: вечер, нужно накатить обновление, а в списке активных пользователей висят шесть человек. Двое ушли домой с открытым документом, у одного ноутбук уснул, ещё два сеанса — фоновые задания. Обычное «попросить выйти» не работает , и нужна последовательность действий от мягкой к жёсткой.
Почему пользователи остаются в базе после блокировки
Сеанс в 1С держится не только живым человеком за компьютером. Он может остаться по нескольким причинам:
- 💤 Компьютер уснул или потерял сеть. Клиент не получает сигнал о блокировке, а сервер ещё какое-то время считает сеанс активным.
- 📝 Открыто модальное окно или незаписанный документ. Клиентское приложение ждёт ответа пользователя и не закрывается само.
- ⚙️ Фоновые и регламентные задания. Обмен, загрузка курсов, полнотекстовый индекс запускаются снова и снова, пока их не запретить.
- 🔌 COM-соединения и внешние программы. Сайт, обработка обмена, отчётная система подключаются к базе как отдельный сеанс.
- 👻 «Призрачные» сеансы. Клиент давно закрыт, а запись о сеансе осталась в кластере. Бывает после аварийного выключения сервера или сбоя сети.
- 🗂 Файловая база открыта по сети. Даже после закрытия 1С сетевой ресурс может держать дескриптор файла
1Cv8.1CD.
Отсюда простое правило: сначала запретить новые входы и фоновые задания, затем закрыть то, что осталось, и только потом проверять, не осталось ли хвостов.
| Способ | Где работает | Когда применять | Риск |
|---|---|---|---|
| Блокировка в программе | файловая и серверная | плановые работы | минимальный |
Параметр запуска /C | файловая и серверная | ночные скрипты | минимальный |
Консоль кластера или rac | только серверная | зависшие сеансы | теряются несохранённые данные |
| Завершение процессов и сетевых файлов | файловая | блокировка не помогла | возможна порча базы |
| Отключение на стороне СУБД | серверная | крайний случай | откат транзакций, ошибки у всех |
Способ 1. Штатная блокировка и параметр запуска /C
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, КА, ERP) есть встроенный механизм. Он одинаков для файловой и клиент-серверной базы.
Блокировка из интерфейса
- Откройте
Администрирование → Обслуживание. - В группе «Обслуживание» выберите
Блокировка работы пользователей. - Заполните текст сообщения, например: «Обновление базы, вход запрещён до 21:00».
- Укажите время начала и окончания блокировки.
- Задайте код разрешения — по нему администратор сможет войти в заблокированную базу.
- Поставьте флажок «Установить блокировку» и нажмите
Записать.
Пользователи увидят предупреждение, а по истечении срока их сеансы закроются. Для серверной базы программа попросит пароль администратора кластера, если он задан.
Рядом в том же разделе есть список Активные пользователи. В нём видно, кто сидит в базе, в каком приложении и с какого компьютера. Выделите строку и завершите сеанс командой из панели формы — это точечное отключение одного человека.
Без интерфейса: ключи командной строки
Ключа /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С Предприятия».
- Раскройте
Central 1C:Enterprise 8.3 servers → имя сервера → Кластеры → кластер → Информационные базы → нужная база → Сеансы. - Выделите все строки (
Ctrl+A), щёлкните правой кнопкой и выберитеУдалить. - Откройте свойства базы и включите «Блокировка начала сеансов включена» и «Блокировка регламентных заданий включена». Иначе через минуту появятся новые сеансы.
Если в списке видны сеансы с приложением «Фоновое задание», они исчезнут только после запрета регламентных заданий.
Командная строка 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С на компьютере пользователя или на терминальном сервере. Порядок от мягкого к жёсткому:
На терминальном сервере
- Откройте «Диспетчер задач» → вкладка «Пользователи».
- Раскройте каждого пользователя и найдите процессы
1cv8c.exe(тонкий клиент) и1cv8.exe(толстый клиент и Конфигуратор). - Выберите процесс и нажмите «Снять задачу». Если человек не нужен в системе совсем — «Выйти из системы» для его сессии Windows.
То же из командной строки от администратора:
taskkill /F /IM 1cv8c.exe
taskkill /F /IM 1cv8.exe
Команда завершит процессы у всех пользователей сервера, включая ваш Конфигуратор, если он открыт.
Если база лежит в сетевой папке
Пользователи работают со своих компьютеров, и до их процессов не дотянуться. Закройте файл на стороне сервера, где лежит база:
- Откройте «Управление компьютером» (
compmgmt.msc). - Перейдите в
Общие папки → Открытые файлы. - Найдите строки с путём к
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С:Предприятия 8.3» (имя службы зависит от установки).
- В каталоге
srvinfo\reg_1541удалите папкиsnccntx*. - Запустите службу снова.
Остановка службы обрывает сеансы во всех базах кластера, а не только в одной. Делайте это вне рабочего времени. Файлы 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.
- Убедитесь, что в базе нет ни одного пользователя. Утилите нужен монопольный доступ.
- Сделайте копию файла
1Cv8.1CD. - Запустите
chdbfl.exe, укажите путь к1Cv8.1CD. - Сначала выполните проверку без флажка «Исправлять обнаруженные ошибки».
- Если ошибки найдены, включите флажок и запустите повторно — на копии или после копирования.
Утилита проверяет физическую структуру файла. Логические ошибки (битые ссылки, неверные движения) она не ищет — для них в Конфигураторе есть Администрирование → Тестирование и исправление.
Для серверной базы chdbfl не применяется: целостность проверяют средствами СУБД и тем же тестированием в Конфигураторе.
Ошибки при отключении пользователей и что с ними делать
/UC или снимите блокировку в консоли кластера.rac не получили пароль администратора кластера. Укажите его в параметрах администрирования или ключами --cluster-user и --cluster-pwd.ras или порт 1545 закрыт брандмауэром. Запустите сервер администрирования и проверьте порт.Открытые файлы в «Управлении компьютером» и процессы на терминальном сервере.Частые вопросы
Сохранятся ли данные, которые пользователь не записал?
Можно ли отключить только одного пользователя?
rac session terminate.Почему в Конфигураторе видно активных пользователей, но выгнать их нельзя?
Администрирование → Активные пользователи только для просмотра. Завершение сеансов делают в пользовательском режиме, в консоли кластера или через rac.Блокировка мешает войти самому администратору. Что делать?
/UC и кодом разрешения, который указали при установке блокировки. Без кода снимите блокировку в свойствах базы в консоли кластера или удалите файл 1Cv8.cdn в файловой базе.Освобождаются ли лицензии после удаления сеанса?
rac session list --licenses.