Принудительное завершение сеансов пользователей в 1С

· 9 мин

Содержание

Быстрее всего живой сеанс обрывается из консоли администрирования сервера: раздел Сеансы → правой кнопкой по строке → Удалить. В файловой базе своего аналога нет — там либо блокируют новые подключения и ждут выхода, либо снимают процесс 1cv8.exe в диспетчере задач. Из командной строки то же самое делает утилита rac session terminate.

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

Любое принудительное завершение обрывает работу пользователя без сохранения. Несохранённые данные в открытых формах пропадут, а незавершённая транзакция откатится. Поэтому сначала предупреждаем людей и блокируем новые входы, а завершаем — только тех, кто завис или не вышел.

Какой способ выбрать под вашу ситуацию

Способ зависит от того, как развёрнута база и что именно происходит. Ориентиры:

  • 🖥️ Клиент-серверная база — консоль администрирования сервера или утилита rac.
  • 📁 Файловая база — блокировка соединений из Конфигуратора плюс, при зависании, диспетчер задач.
  • ⏳ Нужен монопольный доступ под обновление — сначала блокировка начала сеансов, затем завершение оставшихся.
  • 🔁 Регулярная очистка перед ночными работами — скрипт на rac.
Как закрыть сеансы в вашем случае?

Блокировка новых подключений перед завершением

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

В файловой и серверной базе блокировку удобно ставить из Конфигуратора: Администрирование → Блокировка установки соединений с информационной базой. В форме задают:

  • дату и время начала блокировки;
  • код разрешения — пароль, с которым администратор сам сможет войти в заблокированную базу (параметр запуска /UC <код>);
  • текст сообщения, который увидят пользователи при попытке входа.

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

Для планового обслуживания в прикладных конфигурациях (БП 3.0, ЗУП 3.1, УТ 11) есть отдельный механизм блокировки работы пользователей с предупреждением и обратным отсчётом. Его найдёте в разделе администрирования конфигурации, в группе обслуживания базы. Он мягче платформенного: даёт людям время сохраниться.

Посмотреть, кто сейчас в базе, можно там же в Конфигураторе: Администрирование → Активные пользователи. Список показывает имя пользователя, компьютер, время начала работы и приложение (толстый клиент, тонкий клиент, веб-клиент, фоновое задание). Завершить отсюда сеанс нельзя — список информационный, он только помогает понять, кого ещё нужно выгнать.

Завершение сеансов в консоли администрирования сервера

Для клиент-серверной базы основной инструмент — оснастка Администрирование серверов 1С Предприятия (консоль MMC). Порядок такой:

  1. Откройте консоль, разверните узел кластера → ваша информационная база → Сеансы.
  2. В списке найдите нужные строки: по колонке «Пользователь», «Приложение» или «Компьютер». Зависший сеанс обычно виден по большому значению в колонках захваченных ресурсов или по тому, что время последней активности давно не менялось.
  3. Выделите строку (или несколько с Ctrl), нажмите правую кнопку → Удалить.

Сеанс закрывается в течение нескольких секунд. Рядом полезно заглянуть в узел Соединения: иногда сеанс уже удалён, а фоновое соединение фонового задания или COM ещё висит — его завершают так же.

Если консоль пустая или не видит кластер. Частая причина на новой машине — не зарегистрирована библиотека администрирования. Закройте консоль и выполните от имени администратора:

regsvr32 "C:\Program Files\1cv8\<версия>\bin\radmin.dll"

Путь подставьте свой — номер версии платформы смотрите в каталоге 1cv8. После регистрации консоль подключится к агенту сервера.

Клиент подключается к агенту кластера (ragent) по порту 1540, менеджер кластера слушает 1541, рабочие процессы rphost — диапазон портов из свойств рабочего сервера. Консоль всегда идёт через агент, поэтому если она «не видит» сервер — проверьте доступность порта 1540 и что служба агента запущена.

Как понять, какой именно сеанс завершать

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

На что смотреть в консоли кластера (узел Сеансы):

  • Приложение. Отличайте людей от служебного: 1CV8 и 1CV8C — это толстый и тонкий клиент пользователя, BackgroundJob — фоновое задание, WebClient — работа через браузер, COMConnection — внешнее подключение. Зависшее фоновое задание часто и держит блокировку, а пользователь тут ни при чём.
  • Захваченные СУБД-вызовы и память. Колонки с объёмом вызовов и занятой памятью подсказывают сеанс, который «ушёл в себя»: цифры у него на порядок больше, чем у соседей.
  • Время последней активности. Если оно давно не менялось, а сеанс числится активным — это кандидат на завершение.
  • Заблокировано. Сеанс, удерживающий транзакционную блокировку, виден по соответствующим счётчикам; именно он мешает остальным записывать данные.

Для разбора сложных случаев включают технологический журнал (logcfg.xml): по нему видно, какой сеанс открыл длинную транзакцию и что он делает. Это аккуратнее, чем завершать наугад: обрыв не того сеанса вернёт проблему через минуту.

Прежде чем удалять, попробуйте связаться с пользователем зависшего сеанса. Иногда у него просто открыт модальный вопрос («Провести документ?»), на который он не ответил, — и достаточно попросить нажать кнопку, чтобы блокировка снялась сама.

Завершение сеансов в файловой базе

В файловом варианте нет кластера и консоли, поэтому и «удалить сеанс» в один клик нельзя. Логика другая: закрыть доступ и дождаться выхода, а зависшего — снять на уровне операционной системы.

Рабочий порядок:

  1. Включите блокировку соединений из Конфигуратора (см. выше) и предупредите людей в чате или по телефону.
  2. Дождитесь, пока корректно выйдут все, кто может.
  3. Для тех, у кого 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 остаётся низкоуровневый путь — через саму СУБД. Это крайняя мера, к ней прибегают, когда штатные способы не сработали.

Порядок осторожный:

  1. Сначала попробуйте завершить соединение в консоли кластера и через rac — в 9 случаях из 10 этого достаточно.
  2. Если не помогло, посмотрите активные соединения СУБД: в SQL Server это делается запросом sp_who2 или через системные представления (sys.dm_exec_sessions, sys.dm_exec_requests).
  3. Найдите соединение к базе 1С, которое давно блокирует другие, и снимите его по идентификатору процесса командой KILL <spid>.

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

Удалять что-либо в таблицах 1С напрямую через SQL нельзя — это ломает логическую целостность базы. Речь только о завершении зависшего соединения средствами СУБД, не о правке данных.

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

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

Что помогает:

  • ⏱️ Ограничение времени жизни сеанса и неактивности. В свойствах рабочего сервера и информационной базы задают тайм-ауты, после которых неактивный сеанс завершается сам.
  • 🔄 Перезапуск рабочих процессов по расписанию. В свойствах рабочего сервера включают перезапуск rphost по времени работы или по объёму занятой памяти — это чистит накопившиеся «подвисшие» соединения ночью.
  • 🧱 Требования назначения функциональности. Фоновые задания и регламентные операции выносят на отдельный рабочий процесс, чтобы они не висли вместе с клиентскими сеансами.
  • 📉 Контроль блокировок. Длинные транзакции и эскалация блокировок — частая причина «зависших» сеансов; их видно в технологическом журнале и в консоли по захваченным ресурсам.

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

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

Можно ли завершить чужой сеанс, не будучи администратором кластера?
Нет. Удаление сеансов в консоли и через rac требует прав администратора кластера, если они заданы. В файловой базе снять чужой процесс можно только с доступом к компьютеру пользователя.
Почему после удаления сеанса база всё равно не даёт монопольный доступ?
Скорее всего, остались фоновые соединения: регламентные задания, веб-сервисы или COM-подключения. Проверьте узел «Соединения» в консоли и завершите их, а на время работ отключите выполнение регламентных заданий.
Удалил сеанс — пользователь потерял данные. Это нормально?
Да, принудительное завершение не сохраняет открытые формы и откатывает незавершённую запись. Поэтому сначала блокируют вход и дают людям выйти самим, а завершают только зависшие сеансы.
Сеанс не завершается из консоли — висит и не удаляется. Что делать?
Попробуйте завершить соответствующее соединение, затем — рабочий процесс rphost, в котором он выполняется (с пониманием, что оборвутся и другие сеансы этого процесса). Если и это не помогло — остаётся снятие соединения средствами СУБД.
Как выгнать всех пользователей одной командой?
Единой кнопки «завершить все» нет, но эффект тот же: включите блокировку начала сеансов, затем завершите оставшиеся сеансы — вручную в консоли или скриптом на rac. Новые уже не зайдут.