Работа с 1С:Предприятие в многопользовательском режиме часто сталкивается с ситуацией, когда один или несколько пользователей «зависнут» в системе, блокируя критические операции. Это может произойти из-за сбоя сети, неправильного завершения работы клиента или длительных транзакций. Администратору требуется принудительно выгнать пользователей, чтобы разблокировать базу, выполнить резервное копирование или обновить конфигурацию. Однако не все методы одинаково безопасны: некоторые могут привести к потере данных или повреждению информационной базы.
В этой статье мы разберём 5 проверенных способов принудительного отключения — от стандартных инструментов платформы до низкоуровневых команд. Особое внимание уделим рискам прерывания активных транзакций и тому, как минимизировать последствия. Материал актуален для 1С:Предприятие 8.3 (включая последние релизы), а также для работы с файловыми и клиент-серверными базами под управлением MS SQL, PostgreSQL и встроенной СУБД.
1. Стандартный способ: через «Администрирование сервера 1С»
Самый очевидный и безопасный метод — использовать встроенные инструменты администрирования. Он подходит для клиент-серверного варианта работы, когда база развернута на сервере 1С:Предприятие (включая облачные решения).
Чтобы принудительно отключить пользователя:
- 🔹 Откройте консоль
Администрирование сервера 1С(пуск → 1С Предприятие → Администрирование сервера). - 🔹 В дереве кластеров выберите нужный сервер и разверните ветку
Информационные базы. - 🔹 Кликните по базе, в которой требуется отключить пользователей, и перейдите на вкладку
Сеансы. - 🔹 В списке активных сеансов найдите проблемного пользователя (по имени, компьютеру или ID сеанса) и нажмите
Завершить сеанс.
Если кнопка Завершить сеанс неактивна, это означает, что у вашей учётной записи недостаточно прав. В таком случае потребуется администратор кластера 1С или права Администрирование сервера в Консоли управления.
Перед отключением проверьте столбец «Блокировки» в списке сеансов. Если там есть записи, пользователь может выполнять критические операции (например, проведение документа). Прерывание такого сеанса может привести к несохранённым данным.
2. Отключение через RDP-сессию (для терминальных серверов)
Если 1С работает на терминальном сервере (например, под Windows Server с Remote Desktop Services), пользователи подключаются через RDP. В этом случае их можно отключить на уровне ОС, не затрагивая саму базу 1С. Этот метод полезен, когда пользователь «завис» в сеансе, но его процесс в 1С не блокирует базу.
Инструкция для Windows Server:
- Откройте
Диспетчер серверов(Server Manager). - Перейдите в раздел
Службы удалённых рабочих столов→Коллекции→ выберите нужную коллекцию. - В списке активных подключений найдите пользователя и выберите
Отключить(неВыход!). - Если сеанс не завершается, используйте команду в
PowerShell:query sessionчтобы увидеть ID сеанса, а затем:
logoff {ID_сеанса} /v
Что делать, если пользователь снова подключается автоматически?
Если на терминальном сервере настроено автоматическое переподключение (например, через Group Policy), отключение через logoff может не сработать. В этом случае временно заблокируйте учётную запись пользователя в Active Directory или отключите его профиль в настройках RDS.
3. Команды для принудительного завершения (rac, ras, oscript)
Для опытных администраторов доступны консольные утилиты, которые позволяют управлять сеансами напрямую. Эти методы работают как для файловых, так и для клиент-серверных баз, но требуют осторожности.
Основные команды:
- 🔧
rac(Remote Administration Console) — входит в комплект поставки 1С:Предприятие:rac session terminate --cluster={ИмяКластера} --session-id={IDСеанса} - 🔧
ras(Remote Administration Server) — для управления сервером 1С:ras cluster-session --cluster={ИмяКластера} list(показывает список сеансов, затем используйте
terminateс ID). - 🔧
oscript— скриптовый язык для 1С, позволяет написать обработку для завершения сеансов:ПодключитьОбработчикОшибки;Сеансы = ПолучитьСеансыИнформационнойБазы();
Для Каждого Сеанс Из Сеансы Цикл
Если Сеанс.Пользователь.Имя = "ИвановИИ" Тогда
ЗавершитьСеанс(Сеанс.ИД);
КонецЕсли;
КонецЦикла;
Убедитесь, что утилиты rac и ras доступны в переменной PATH|Проверьте права на выполнение команд (требуется администратор кластера)|Сделайте резервную копию базы перед массовым отключением|Запишите ID сеансов, которые планируете завершить-->
⚠️ Внимание: Команды rac и ras могут завершить сеанс без сохранения данных. Если пользователь вёл документ или проводил операцию, изменения будут утеряны. Всегда предупреждайте пользователей заранее (например, через уведомление в 1С).
4. Прямое отключение через СУБД (MS SQL, PostgreSQL)
Если стандартные методы не сработали (например, сеанс «завис» на уровне базы данных), можно принудительно закрыть соединение непосредственно в СУБД. Этот способ наиболее рискованный, так как может привести к несохранённым транзакциям или повреждению данных.
Инструкции для разных СУБД:
| СУБД | Команда для просмотра активных соединений | Команда для принудительного отключения |
|---|---|---|
| MS SQL Server | |
|
| PostgreSQL | |
|
| Встроенная СУБД (1С) | Нет прямого доступа. Используйте chdbfl.exe для проверки блокировок файловой базы. |
|
⚠️ Внимание: Перед выполнением KILL или pg_terminate_backend проверьте, нет ли открытых транзакций:
DBCC OPENTRAN (для MS SQL)
или
SELECT * FROM pg_locks WHERE pid = {pid} (для PostgreSQL)
Если транзакция активна, её прерывание может оставить базу в несогласованном состоянии. В этом случае лучше дождаться тайм-аута или перезапустить сервер 1С.
Стандартная консоль администрирования 1С|Команды rac/ras|Отключение через СУБД|Перезагрузка сервера|Другой способ-->
5. Перезагрузка сервера или службы 1С
Крайний метод — перезапуск службы 1С:Предприятие или самого сервера. Это гарантированно разорвёт все соединения, но может занять несколько минут и повлияет на всех пользователей. Используйте его только если:
- 🔸 Сеансы не завершаются другими способами.
- 🔸 Нужно срочно обновить платформу или конфигурацию.
- 🔸 База находится в неработоспособном состоянии из-за блокировок.
Как перезапустить службу 1С:
- Откройте
Службы Windows(services.msc). - Найдите службу
1С:Предприятие 8.3 Сервер(или аналогичную для вашей версии). - Выберите
Перезапустить.
Если служба не отвечает, используйте команду в PowerShell:
Restart-Service -Name "1C:Enterprise 8.3 Server Agent" -Force
Перезагрузка сервера — это «тяжёлая артиллерия». Всегда сначала пытайтесь завершить сеансы через стандартные инструменты 1С или СУБД. Перезапуск может прервать фоновые задачи (например, регламентные операции), что потребует дополнительного восстановления.
6. Автоматизация: скрипты для массового отключения
Если вам регулярно приходится отключать пользователей (например, по ночам для резервного копирования), имеет смысл автоматизировать процесс. Ниже приведён пример PowerShell-скрипта, который завершает все сеансы в указанной базе:
$ClusterName = "MainCluster"
$InfoBaseName = "Бухгалтерия"
$SessionList = & "C:\Program Files\1cv8\8.3.x.x\bin\rac.exe" session list --cluster=$ClusterName --infobase=$InfoBaseName
$Sessions = $SessionList | Where-Object { $_ -match "Сеанс:\s+(\d+)" } | ForEach-Object {
$matches[1]
}
foreach ($SessionID in $Sessions) {
& "C:\Program Files\1cv8\8.3.x.x\bin\rac.exe" session terminate --cluster=$ClusterName --session-id=$SessionID
Write-Host "Завершён сеанс с ID $SessionID"
}
Для Linux-серверов можно использовать аналогичный скрипт на bash:
#!/bin/bash
CLUSTER="MainCluster"
IBNAME="Бухгалтерия"
SESSIONS=$(rac session list --cluster=$CLUSTER --infobase=$IBNAME | grep "Сеанс:" | awk '{print $2}')
for session in $SESSIONS; do
rac session terminate --cluster=$CLUSTER --session-id=$session
echo "Terminated session $session"
done
⚠️ Внимание: Перед запуском скрипта:
- 📌 Проверьте путь к утилите
rac.exe(он может отличаться в зависимости от версии 1С). - 📌 Убедитесь, что у учётной записи достаточно прав для выполнения команд.
- 📌 Протестируйте скрипт на тестовой базе, чтобы избежать случайного отключения рабочих сеансов.
Частые ошибки и их решения
Принудительное отключение пользователей может сопровождаться ошибками. Рассмотрим типичные проблемы и способы их устранения:
| Ошибка | Причина | Решение |
|---|---|---|
Ошибка завершения сеанса: Сеанс не найден |
Сеанс уже завершился самостоятельно, или указан неверный ID. | Обновите список сеансов и проверьте актуальный ID. |
Недостаточно прав для выполнения операции |
У учётной записи нет роли Администратор кластера. |
Запустите консоль от имени администратора или добавьте права в Консоли управления 1С. |
Сеанс заблокирован другой транзакцией |
В базе есть незавершённая транзакция (например, длинная операция). | Используйте KILL в MS SQL с флагом WITH ROLLBACK IMMEDIATE или дождитесь тайм-аута. |
Невозможно подключиться к кластеру серверов |
Служба 1С:Предприятие не запущена или недоступна по сети. | Проверьте статус службы и сетевые настройки (порты 1540-1541, 1560-1591). |
Если после отключения пользователей база ведёт себя нестабильно (например, возникают ошибки блокировок), выполните проверку и восстановление:
- 🛠 Для MS SQL:
DBCC CHECKDB ([ИмяБазы]) WITH NO_INFOMSGS, ALL_ERRORMSGS; - 🛠 Для PostgreSQL:
VACUUM FULL ANALYZE; - 🛠 Для файловой базы: используйте
chdbfl.exeс ключом/F.
Что делать, если после отключения пользователей база не открывается?
Если после принудительного завершения сеансов база перестала запускаться, попробуйте:
1. Перезапустить службу 1С:Предприятие.
2. Проверить логи сервера (%APPDATA%\1C\1Cv8\logs).
3. Восстановить базу из резервной копии, если ошибка связана с повреждением данных.
4. Обратиться в поддержку 1С с логами и дампом базы.
FAQ: Ответы на частые вопросы
Можно ли отключить пользователя, не прерывая его транзакцию?
Нет, принудительное завершение сеанса всегда прерывает текущие операции. Однако в 1С:Предприятие 8.3.20+ появилась возможность отправлять пользователям уведомление о предстоящем отключении через механизм ПлановоеОтключениеСеансов. Это позволяет дать время на сохранение данных.
Почему после отключения пользователя его сеанс снова появляется в списке?
Это может происходить по двум причинам:
- Пользователь автоматически переподключается (например, через Тонкий клиент с опцией
Автовосстановление соединения). - Сеанс «завис» на уровне СУБД, и его нужно завершать через
KILLв MS SQL или PostgreSQL.
Решение: отключите автовосстановление в настройках клиента или завершите сеанс на уровне СУБД.
Как узнать, какой пользователь блокирует проведение документа?
Используйте запрос к СУБД:
- Для MS SQL:
SELECTs.session_id,
s.login_name,
t.text AS [Запрос],
q.start_time
FROM sys.dm_exec_sessions s
JOIN sys.dm_exec_requests r ON s.session_id = r.session_id
JOIN sys.dm_exec_sql_text(r.sql_handle) t ON r.sql_handle = t.sql_handle
WHERE t.text LIKE '%RLock%'
- Для PostgreSQL:
SELECT pid, usename, query, query_startFROM pg_stat_activity
WHERE query ILIKE '%lock%' AND state = 'active';
В результатах ищите запросы с упоминанием RLock или LockTable — они указывают на блокировки.
Можно ли отключить всех пользователей сразу?
Да, но это рискованно. Для массового отключения:
- Используйте скрипт на
rac(см. раздел 6). - Или перезапустите службу 1С:Предприятие (раздел 5).
⚠️ Предварительно убедитесь, что в базе нет длинных операций (например, закрытия месяца или обмена данными).
Что делать, если после отключения пользователя база стала работать медленно?
Вероятные причины и решения:
- 🔸 Незавершённые транзакции: Проверьте СУБД на наличие открытых транзакций и завершите их вручную.
- 🔸 Фрагментация индексов: Выполните реорганизацию индексов в MS SQL или
VACUUMв PostgreSQL. - 🔸 Блокировки на уровне файлов: Для файловой базы запустите
chdbfl.exe /C.