Работа с 1С:Предприятие в многопользовательском режиме часто сталкивается с ситуацией, когда один или несколько пользователей «зависнут» в системе, блокируя критические операции. Это может произойти из-за сбоя сети, неправильного завершения работы клиента или длительных транзакций. Администратору требуется принудительно выгнать пользователей, чтобы разблокировать базу, выполнить резервное копирование или обновить конфигурацию. Однако не все методы одинаково безопасны: некоторые могут привести к потере данных или повреждению информационной базы.

В этой статье мы разберём 5 проверенных способов принудительного отключения — от стандартных инструментов платформы до низкоуровневых команд. Особое внимание уделим рискам прерывания активных транзакций и тому, как минимизировать последствия. Материал актуален для 1С:Предприятие 8.3 (включая последние релизы), а также для работы с файловыми и клиент-серверными базами под управлением MS SQL, PostgreSQL и встроенной СУБД.

1. Стандартный способ: через «Администрирование сервера 1С»

Самый очевидный и безопасный метод — использовать встроенные инструменты администрирования. Он подходит для клиент-серверного варианта работы, когда база развернута на сервере 1С:Предприятие (включая облачные решения).

Чтобы принудительно отключить пользователя:

  • 🔹 Откройте консоль Администрирование сервера 1С (пуск → 1С ПредприятиеАдминистрирование сервера).
  • 🔹 В дереве кластеров выберите нужный сервер и разверните ветку Информационные базы.
  • 🔹 Кликните по базе, в которой требуется отключить пользователей, и перейдите на вкладку Сеансы.
  • 🔹 В списке активных сеансов найдите проблемного пользователя (по имени, компьютеру или ID сеанса) и нажмите Завершить сеанс.

Если кнопка Завершить сеанс неактивна, это означает, что у вашей учётной записи недостаточно прав. В таком случае потребуется администратор кластера 1С или права Администрирование сервера в Консоли управления.

💡

Перед отключением проверьте столбец «Блокировки» в списке сеансов. Если там есть записи, пользователь может выполнять критические операции (например, проведение документа). Прерывание такого сеанса может привести к несохранённым данным.

2. Отключение через RDP-сессию (для терминальных серверов)

Если работает на терминальном сервере (например, под Windows Server с Remote Desktop Services), пользователи подключаются через RDP. В этом случае их можно отключить на уровне ОС, не затрагивая саму базу . Этот метод полезен, когда пользователь «завис» в сеансе, но его процесс в не блокирует базу.

Инструкция для Windows Server:

  1. Откройте Диспетчер серверов (Server Manager).
  2. Перейдите в раздел Службы удалённых рабочих столовКоллекции → выберите нужную коллекцию.
  3. В списке активных подключений найдите пользователя и выберите Отключить (не Выход!).
  4. Если сеанс не завершается, используйте команду в 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 — скриптовый язык для , позволяет написать обработку для завершения сеансов:
    ПодключитьОбработчикОшибки;
    

    Сеансы = ПолучитьСеансыИнформационнойБазы();

    Для Каждого Сеанс Из Сеансы Цикл

    Если Сеанс.Пользователь.Имя = "ИвановИИ" Тогда

    ЗавершитьСеанс(Сеанс.ИД);

    КонецЕсли;

    КонецЦикла;

Убедитесь, что утилиты rac и ras доступны в переменной PATH|Проверьте права на выполнение команд (требуется администратор кластера)|Сделайте резервную копию базы перед массовым отключением|Запишите ID сеансов, которые планируете завершить-->

⚠️ Внимание: Команды rac и ras могут завершить сеанс без сохранения данных. Если пользователь вёл документ или проводил операцию, изменения будут утеряны. Всегда предупреждайте пользователей заранее (например, через уведомление в ).

4. Прямое отключение через СУБД (MS SQL, PostgreSQL)

Если стандартные методы не сработали (например, сеанс «завис» на уровне базы данных), можно принудительно закрыть соединение непосредственно в СУБД. Этот способ наиболее рискованный, так как может привести к несохранённым транзакциям или повреждению данных.

Инструкции для разных СУБД:

СУБД Команда для просмотра активных соединений Команда для принудительного отключения
MS SQL Server
SELECT session_id, login_name, host_name

FROM sys.dm_exec_sessions

WHERE program_name LIKE '%1C%'

KILL {session_id}
PostgreSQL
SELECT pid, usename, application_name

FROM pg_stat_activity

WHERE application_name LIKE '%1C%'

SELECT pg_terminate_backend({pid})
Встроенная СУБД () Нет прямого доступа. Используйте chdbfl.exe для проверки блокировок файловой базы.

⚠️ Внимание: Перед выполнением KILL или pg_terminate_backend проверьте, нет ли открытых транзакций:

DBCC OPENTRAN (для MS SQL)

или

SELECT * FROM pg_locks WHERE pid = {pid} (для PostgreSQL)

Если транзакция активна, её прерывание может оставить базу в несогласованном состоянии. В этом случае лучше дождаться тайм-аута или перезапустить сервер .

Стандартная консоль администрирования 1С|Команды rac/ras|Отключение через СУБД|Перезагрузка сервера|Другой способ-->

5. Перезагрузка сервера или службы 1С

Крайний метод — перезапуск службы 1С:Предприятие или самого сервера. Это гарантированно разорвёт все соединения, но может занять несколько минут и повлияет на всех пользователей. Используйте его только если:

  • 🔸 Сеансы не завершаются другими способами.
  • 🔸 Нужно срочно обновить платформу или конфигурацию.
  • 🔸 База находится в неработоспособном состоянии из-за блокировок.

Как перезапустить службу :

  1. Откройте Службы Windows (services.msc).
  2. Найдите службу 1С:Предприятие 8.3 Сервер (или аналогичную для вашей версии).
  3. Выберите Перезапустить.

Если служба не отвечает, используйте команду в PowerShell:

Restart-Service -Name "1C:Enterprise 8.3 Server Agent" -Force
💡

Перезагрузка сервера — это «тяжёлая артиллерия». Всегда сначала пытайтесь завершить сеансы через стандартные инструменты или СУБД. Перезапуск может прервать фоновые задачи (например, регламентные операции), что потребует дополнительного восстановления.

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 (он может отличаться в зависимости от версии ).
  • 📌 Убедитесь, что у учётной записи достаточно прав для выполнения команд.
  • 📌 Протестируйте скрипт на тестовой базе, чтобы избежать случайного отключения рабочих сеансов.

Частые ошибки и их решения

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

Ошибка Причина Решение
Ошибка завершения сеанса: Сеанс не найден Сеанс уже завершился самостоятельно, или указан неверный 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. Обратиться в поддержку с логами и дампом базы.

FAQ: Ответы на частые вопросы

Можно ли отключить пользователя, не прерывая его транзакцию?

Нет, принудительное завершение сеанса всегда прерывает текущие операции. Однако в 1С:Предприятие 8.3.20+ появилась возможность отправлять пользователям уведомление о предстоящем отключении через механизм ПлановоеОтключениеСеансов. Это позволяет дать время на сохранение данных.

Почему после отключения пользователя его сеанс снова появляется в списке?

Это может происходить по двум причинам:

  1. Пользователь автоматически переподключается (например, через Тонкий клиент с опцией Автовосстановление соединения).
  2. Сеанс «завис» на уровне СУБД, и его нужно завершать через KILL в MS SQL или PostgreSQL.

Решение: отключите автовосстановление в настройках клиента или завершите сеанс на уровне СУБД.

Как узнать, какой пользователь блокирует проведение документа?

Используйте запрос к СУБД:

  • Для MS SQL:
    SELECT
    

    s.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_start
    

    FROM pg_stat_activity

    WHERE query ILIKE '%lock%' AND state = 'active';

В результатах ищите запросы с упоминанием RLock или LockTable — они указывают на блокировки.

Можно ли отключить всех пользователей сразу?

Да, но это рискованно. Для массового отключения:

  1. Используйте скрипт на rac (см. раздел 6).
  2. Или перезапустите службу 1С:Предприятие (раздел 5).

⚠️ Предварительно убедитесь, что в базе нет длинных операций (например, закрытия месяца или обмена данными).

Что делать, если после отключения пользователя база стала работать медленно?

Вероятные причины и решения:

  • 🔸 Незавершённые транзакции: Проверьте СУБД на наличие открытых транзакций и завершите их вручную.
  • 🔸 Фрагментация индексов: Выполните реорганизацию индексов в MS SQL или VACUUM в PostgreSQL.
  • 🔸 Блокировки на уровне файлов: Для файловой базы запустите chdbfl.exe /C.