Принудительное завершение сеансов пользователей в 1С
Содержание
Быстрее всего живой сеанс обрывается из консоли администрирования сервера: раздел Сеансы → правой кнопкой по строке → Удалить. В файловой базе своего аналога нет — там либо блокируют новые подключения и ждут выхода, либо снимают процесс 1cv8.exe в диспетчере задач. Из командной строки то же самое делает утилита rac session terminate.
Принудительно завершить сеанс чаще всего нужно перед обновлением конфигурации, тестированием и исправлением базы или перед загрузкой .dt — все эти операции требуют монопольного доступа, а он не включится, пока в базе остаётся хотя бы один пользователь. Вторая частая причина — зависшее соединение, которое держит блокировку и мешает работать остальным.
Любое принудительное завершение обрывает работу пользователя без сохранения. Несохранённые данные в открытых формах пропадут, а незавершённая транзакция откатится. Поэтому сначала предупреждаем людей и блокируем новые входы, а завершаем — только тех, кто завис или не вышел.
Какой способ выбрать под вашу ситуацию
Способ зависит от того, как развёрнута база и что именно происходит. Ориентиры:
- 🖥️ Клиент-серверная база
— консоль администрирования сервера или утилита
rac. - 📁 Файловая база — блокировка соединений из Конфигуратора плюс, при зависании, диспетчер задач.
- ⏳ Нужен монопольный доступ под обновление — сначала блокировка начала сеансов, затем завершение оставшихся.
- 🔁 Регулярная очистка перед ночными работами — скрипт на
rac.
1cv8.exe в диспетчере задач на его компьютере.rac: получить список сеансов и завершить их командой terminate.Блокировка новых подключений перед завершением
Прежде чем выгонять пользователей, перекройте вход — иначе на место завершённого сеанса тут же зайдёт новый, и монопольный доступ не включится.
В файловой и серверной базе блокировку удобно ставить из Конфигуратора: Администрирование → Блокировка установки соединений с информационной базой. В форме задают:
- дату и время начала блокировки;
- код разрешения — пароль, с которым администратор сам сможет войти в заблокированную базу (параметр запуска
/UC <код>); - текст сообщения, который увидят пользователи при попытке входа.
После включения новые сеансы в базу не заходят, а уже работающие продолжают работать до выхода или принудительного завершения. Код разрешения задавайте обязательно — иначе рискуете заблокировать вход в том числе самому себе.
Для планового обслуживания в прикладных конфигурациях (БП 3.0, ЗУП 3.1, УТ 11) есть отдельный механизм блокировки работы пользователей с предупреждением и обратным отсчётом. Его найдёте в разделе администрирования конфигурации, в группе обслуживания базы. Он мягче платформенного: даёт людям время сохраниться.
Посмотреть, кто сейчас в базе, можно там же в Конфигураторе: Администрирование → Активные пользователи. Список показывает имя пользователя, компьютер, время начала работы и приложение (толстый клиент, тонкий клиент, веб-клиент, фоновое задание). Завершить отсюда сеанс нельзя — список информационный, он только помогает понять, кого ещё нужно выгнать.
Завершение сеансов в консоли администрирования сервера
Для клиент-серверной базы основной инструмент — оснастка Администрирование серверов 1С Предприятия (консоль MMC). Порядок такой:
- Откройте консоль, разверните узел кластера → ваша информационная база →
Сеансы. - В списке найдите нужные строки: по колонке «Пользователь», «Приложение» или «Компьютер». Зависший сеанс обычно виден по большому значению в колонках захваченных ресурсов или по тому, что время последней активности давно не менялось.
- Выделите строку (или несколько с
Ctrl), нажмите правую кнопку →Удалить.
Сеанс закрывается в течение нескольких секунд. Рядом полезно заглянуть в узел Соединения: иногда сеанс уже удалён, а фоновое соединение фонового задания или COM ещё висит — его завершают так же.
Если консоль пустая или не видит кластер. Частая причина на новой машине — не зарегистрирована библиотека администрирования. Закройте консоль и выполните от имени администратора:
regsvr32 "C:\Program Files\1cv8\<версия>\bin\radmin.dll"
Путь подставьте свой — номер версии платформы смотрите в каталоге 1cv8. После регистрации консоль подключится к агенту сервера.
Клиент подключается к агенту кластера (ragent) по порту 1540, менеджер кластера слушает 1541, рабочие процессы rphost — диапазон портов из свойств рабочего сервера. Консоль всегда идёт через агент, поэтому если она «не видит» сервер — проверьте доступность порта 1540 и что служба агента запущена.
Как понять, какой именно сеанс завершать
Выгонять всех подряд приходится редко — чаще мешает один-два зависших сеанса, а остальные работают нормально. Прежде чем удалять, стоит понять, кто виноват.
На что смотреть в консоли кластера (узел Сеансы):
- Приложение. Отличайте людей от служебного:
1CV8и1CV8C— это толстый и тонкий клиент пользователя,BackgroundJob— фоновое задание,WebClient— работа через браузер,COMConnection— внешнее подключение. Зависшее фоновое задание часто и держит блокировку, а пользователь тут ни при чём. - Захваченные СУБД-вызовы и память. Колонки с объёмом вызовов и занятой памятью подсказывают сеанс, который «ушёл в себя»: цифры у него на порядок больше, чем у соседей.
- Время последней активности. Если оно давно не менялось, а сеанс числится активным — это кандидат на завершение.
- Заблокировано. Сеанс, удерживающий транзакционную блокировку, виден по соответствующим счётчикам; именно он мешает остальным записывать данные.
Для разбора сложных случаев включают технологический журнал (logcfg.xml): по нему видно, какой сеанс открыл длинную транзакцию и что он делает. Это аккуратнее, чем завершать наугад: обрыв не того сеанса вернёт проблему через минуту.
Прежде чем удалять, попробуйте связаться с пользователем зависшего сеанса. Иногда у него просто открыт модальный вопрос («Провести документ?»), на который он не ответил, — и достаточно попросить нажать кнопку, чтобы блокировка снялась сама.
Завершение сеансов в файловой базе
В файловом варианте нет кластера и консоли, поэтому и «удалить сеанс» в один клик нельзя. Логика другая: закрыть доступ и дождаться выхода, а зависшего — снять на уровне операционной системы.
Рабочий порядок:
- Включите блокировку соединений из Конфигуратора (см. выше) и предупредите людей в чате или по телефону.
- Дождитесь, пока корректно выйдут все, кто может.
- Для тех, у кого 1С зависла и не закрывается, завершите процесс на их компьютере.
Снимают процесс через диспетчер задач (Ctrl+Shift+Esc), вкладка «Подробности». Клиентские процессы называются:
1cv8.exe— толстый клиент и Конфигуратор;1cv8c.exe— тонкий клиент.
Выделите процесс нужного пользователя → Снять задачу.
Снимать процесс нужно именно на машине пользователя, а не на файловом сервере. На сетевой папке с базой процессов 1С нет — там лежит только файл 1Cv8.1CD и служебные файлы блокировки.
После того как все вышли, в каталоге базы может остаться файл блокировки 1Cv8.1CL (сеансовые данные) или .lock. Если все процессы 1cv8 действительно закрыты, а база всё равно считает, что кто-то работает, эти служебные файлы можно удалить — но только убедившись, что ни на одном компьютере 1С с этой базой не запущена, иначе повредите сеансовые данные.
Утилита rac и автоматизация очистки
Когда серверных баз много или завершать сеансы нужно по расписанию, удобнее командная строка. Утилита rac лежит в каталоге bin платформы и работает через сервер администрирования ras (по умолчанию порт 1545), который должен быть запущен.
Сначала узнайте идентификатор кластера:
rac cluster list
В выводе будет строка cluster : <uuid> — это и есть идентификатор. Теперь список сеансов:
rac session list --cluster=<cluster-uuid>
Каждый сеанс выводится блоком со своим session : <uuid>, именем пользователя и приложением. Завершение конкретного сеанса:
rac session terminate --cluster=<cluster-uuid> --session=<session-uuid>
Если на кластере задан администратор, добавьте --cluster-user=<имя> --cluster-pwd=<пароль>. Полный перечень подкоманд всегда под рукой: rac help и rac session --help — опирайтесь на них, а не на память, набор ключей меняется между версиями платформы.
Для планового сброса зависших соединений перед ночными регламентными работами собирают простой скрипт: получить список, отфильтровать нужные сеансы и прогнать terminate по каждому. Такой скрипт ставят в планировщик только на время технологического окна, когда пользователей в базе быть не должно — иначе он оборвёт живую работу.
В консоли MMC можно не удалять сеансы вручную, а задать на кластере автоматическое завершение неактивных: параметр «Принудительно завершать проблемные процессы» и ограничение времени жизни сеанса. Это снимает часть зависаний без ручного вмешательства.
SQL-уровень: крайняя мера при зависшем соединении
Иногда соединение зависает так, что консоль не может его завершить, а rphost не отпускает блокировку. На клиент-серверной базе с СУБД на MS SQL Server остаётся низкоуровневый путь — через саму СУБД. Это крайняя мера, к ней прибегают, когда штатные способы не сработали.
Порядок осторожный:
- Сначала попробуйте завершить соединение в консоли кластера и через
rac— в 9 случаях из 10 этого достаточно. - Если не помогло, посмотрите активные соединения СУБД: в SQL Server это делается запросом
sp_who2или через системные представления (sys.dm_exec_sessions,sys.dm_exec_requests). - Найдите соединение к базе 1С, которое давно блокирует другие, и снимите его по идентификатору процесса командой
KILL <spid>.
KILL на уровне СУБД — это грубый обрыв транзакции. Он откатывает все незавершённые изменения этого соединения, и если под ним шла длинная операция, откат может занять минуты. Выполнять такое должен администратор СУБД, понимающий, какое соединение он закрывает. Перед вмешательством в боевую базу убедитесь, что есть свежая резервная копия.
Удалять что-либо в таблицах 1С напрямую через SQL нельзя — это ломает логическую целостность базы. Речь только о завершении зависшего соединения средствами СУБД, не о правке данных.
Профилактика зависаний и настройка сервера
Чтобы реже выгонять людей вручную, зависания лечат на уровне настроек кластера, а не по факту.
Что помогает:
- ⏱️ Ограничение времени жизни сеанса и неактивности. В свойствах рабочего сервера и информационной базы задают тайм-ауты, после которых неактивный сеанс завершается сам.
- 🔄 Перезапуск рабочих процессов по расписанию. В свойствах рабочего сервера включают перезапуск
rphostпо времени работы или по объёму занятой памяти — это чистит накопившиеся «подвисшие» соединения ночью. - 🧱 Требования назначения функциональности. Фоновые задания и регламентные операции выносят на отдельный рабочий процесс, чтобы они не висли вместе с клиентскими сеансами.
- 📉 Контроль блокировок. Длинные транзакции и эскалация блокировок — частая причина «зависших» сеансов; их видно в технологическом журнале и в консоли по захваченным ресурсам.
Все эти параметры живут в свойствах рабочего сервера и информационной базы в консоли администрирования — там же, где вы завершаете сеансы.
Перезапуск службы агента сервера 1С или рабочих процессов разом обрывает все сеансы кластера. Планируйте такие действия на технологическое окно, а не в рабочее время.
Можно ли завершить чужой сеанс, не будучи администратором кластера?
rac требует прав администратора кластера, если они заданы. В файловой базе снять чужой процесс можно только с доступом к компьютеру пользователя.Почему после удаления сеанса база всё равно не даёт монопольный доступ?
Удалил сеанс — пользователь потерял данные. Это нормально?
Сеанс не завершается из консоли — висит и не удаляется. Что делать?
rphost, в котором он выполняется (с пониманием, что оборвутся и другие сеансы этого процесса). Если и это не помогло — остаётся снятие соединения средствами СУБД.Как выгнать всех пользователей одной командой?
rac. Новые уже не зайдут.