Зависший сеанс 1С: как завершить его и не потерять данные

· 9 мин

Содержание

Пользователь закрыл окно 1С, а в списке подключений он всё ещё висит. База не обновляется, обработка не стартует, потому что «есть активные сеансы». Снять сеанс в 1С можно тремя способами: из самой программы, из консоли администрирования серверов и командой или кодом. Какой подойдёт, зависит от того, где лежит база: на сервере 1С или в файловом режиме.

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

Сначала разберитесь, что именно висит

Не каждый сеанс в списке — зависший. Бывает, что человек просто ушёл на обед с открытой программой. Бывает, что идёт долгая загрузка или закрытие месяца . Завершать такой сеанс бессмысленно и вредно.

Что смотреть в списке подключений:

  • 👤 Пользователь и компьютер. Позвоните человеку, если знаете, кто это.
  • ⏱ Время начала и последняя активность. Сеанс, начатый вчера вечером и без активности, — кандидат на завершение.
  • 🧩 Тип приложения. «Толстый клиент», «Тонкий клиент», «Веб-клиент», «Конфигуратор», «Фоновое задание», «COM-соединение». Фоновые задания и COM-соединения — не люди, но их снятие тоже влияет на работу базы.
  • 📊 Потребление ресурсов. В консоли сервера видно обращения к серверу и объём памяти. Сеанс, который держит много памяти и ничего не делает, подозрителен.

Если пользователь жив и просто занят, лучше дождаться его или попросить закрыть программу.

Список активных пользователей: самый мягкий способ

Если вы можете зайти в базу сами, начните с этого. Откройте программу под пользователем с правами администратора.

В управляемом интерфейсе обычных конфигураций (БП, ЗУП, УТ) список находится в разделе Администрирование → Поддержка и обслуживание. Ищите там пункт про активных пользователей или блокировку работы. Если не нашли, воспользуйтесь поиском команд на панели функций: введите «активные пользователи».

В Конфигураторе список доступен через меню Администрирование → Активные пользователи. Там видно имя пользователя, компьютер, приложение и время начала сеанса.

Порядок работы:

  1. Откройте список и найдите нужную строку.
  2. Выделите её и нажмите кнопку завершения работы пользователя.
  3. Подтвердите действие.

Свой собственный сеанс завершить из этого списка нельзя: программа закроется сама. И ещё одно ограничение: если сервер 1С не отвечает на команды клиента, сеанс останется в списке. Тогда нужна консоль администрирования.

Этот способ работает как в файловой, так и в клиент-серверной базе, но снимает сеанс «вежливо»: клиенту отправляется команда на завершение. Полностью завис клиент или потерял связь с сервером — команда до него не дойдёт.

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

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

Подключение и поиск сеанса

  1. В дереве консоли разверните Центральные серверы 1С:Предприятия. Если сервера нет, добавьте его через контекстное меню: имя компьютера и порт 1540.
  2. Разверните нужный сервер, затем Кластеры → Локальный кластер. Если у кластера задан администратор, консоль спросит имя и пароль.
  3. Откройте Информационные базы, выберите свою базу и перейдите на вкладку Сеансы. Вкладка с тем же названием есть и на уровне всего кластера, там видны сеансы всех баз.
  4. Отсортируйте по времени последней активности или по пользователю.

Само завершение

Выделите строку сеанса, вызовите контекстное меню и выберите Удалить. Консоль спросит подтверждение. Можно выделить несколько строк сразу.

Рядом есть вкладка Соединения. Сеанс и соединение — не одно и то же. Соединение — это канал связи клиента с сервером, сеанс — рабочая сессия пользователя в базе. Если после удаления сеанса соединение осталось, удалите и его, но только если оно относится к зависшему клиенту.

Если консоль не запускается или ругается на компонент

Типичная проблема на свежей машине: консоль открывается, но подключение к серверу отказывает, или вместо дерева показывается ошибка регистрации компоненты. Помогает перерегистрация библиотеки администрирования radmin.dll. Откройте командную строку от имени администратора, перейдите в каталог bin нужной версии платформы и выполните:

regsvr32 radmin.dll

Версия консоли должна соответствовать версии платформы на сервере: номер не ниже серверного в рамках одной ветки. Если на сервере 8.3.24, а консоль взята от 8.3.18, возможны отказы.

Сеанс снова появляется

Бывает, что вы удалили сеанс, а он через несколько секунд возвращается. Это не баг: клиент на стороне пользователя ещё жив и переподключается. Нужно закрыть программу на самом компьютере. Или сначала запретить новые сеансы (см. ниже), а потом удалить текущие.

Блокировка начала сеансов: когда нужно обновиться или сделать выгрузку

Если вам нужен монопольный доступ к базе для обновления структуры, загрузки .dt или тестирования и исправления, мало снять сеансы. Пользователи снова подключатся, пока вы работаете. Включите блокировку начала сеансов.

В консоли откройте свойства информационной базы. Там есть флажок блокировки начала сеансов, период действия, сообщение для пользователей и код разрешения. Код разрешения позволяет вам самим подключаться при включённой блокировке: его передают параметром командной строки запуска /UC.

Порядок действий:

  1. Включите блокировку и задайте понятное сообщение: «Идёт обновление, работа возобновится в 19:00».
  2. Подождите, пока пользователи закончат работу. Если это не происходит, завершите оставшиеся сеансы.
  3. Выполните нужную операцию, запустив 1С с кодом разрешения.
  4. Снимите блокировку. Это легко забыть: в результате утром никто не сможет войти.

Блокировка по расписанию («с 19:00 до 20:00») выручает, когда работаете ночью и не хотите переключать флажок вручную.

Для баз на БСП есть и встроенная возможность — обработка блокировки работы пользователей в разделе Администрирование → Поддержка и обслуживание. Она сама выставляет блокировку и показывает пользователям сообщение.

Управление сеансами из командной строки и кода

Когда сеансов много или задача повторяется, ручной щелчок в консоли неудобен.

Утилита rac

В каталоге платформы вместе с агентом лежит утилита администрирования rac. Она работает через сервер администрирования (процесс ras). Сначала запустите его, затем обращайтесь к нему из rac. Примеры команд, в которых можно не сомневаться:

rac cluster list
rac session list --cluster=<идентификатор_кластера>
rac session terminate --cluster=<идентификатор_кластера> --session=<идентификатор_сеанса>

Идентификаторы — длинные GUID, которые вы получите из вывода первой и второй команд. Остальные параметры, фильтры и сообщение пользователю смотрите в справке: rac help, rac help session.

Команда terminate обрывает сеанс без вопросов. Проверьте, какой именно идентификатор подставляете.

COM-соединение администрирования

Для автоматизации из 1С или скрипта используют объект V83.COMConnector. Он даёт доступ к агенту сервера: можно получить кластеры, список сеансов и завершить нужные. Ниже пример, который проходит по сеансам одной базы и завершает их все. Пример выполняется на сервере или рабочей станции с установленной платформой.

Процедура ЗавершитьСеансыБазы(АдресСервера, ИмяБазы)
	Коннектор = Новый COMОбъект("V83.COMConnector");
	Агент = Коннектор.ConnectAgent("tcp://" + АдресСервера + ":1540");
	Кластеры = Агент.GetClusters();
	Для Каждого Кластер Из Кластеры Цикл
		Агент.Authenticate(Кластер, "", "");
		Сеансы = Агент.GetSessions(Кластер);
		Для Каждого Сеанс Из Сеансы Цикл
			Если Сеанс.InfoBase.Name = ИмяБазы Тогда
				Агент.TerminateSession(Кластер, Сеанс);
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
КонецПроцедуры

Обратите внимание: в вызове Authenticate пустые имя и пароль подходят только для кластера без администратора. Если администратор задан, подставьте его данные и не храните пароль прямо в коде.

Используйте этот приём осознанно. Свой собственный сеанс и сеанс, из которого запущен код, в цикл попасть не должны, иначе процедура оборвёт сама себя. Добавьте проверку по номеру сеанса.

Завершение работы изнутри конфигурации

Если нужно закрыть пользователей по расписанию, не трогая сервер, подойдёт подход БСП: система показывает сообщение, дает время закончить работу и затем завершает сеансы штатной командой. Это мягче, чем TerminateSession, потому что клиент успевает сохранить данные.

Блокировки данных и регистрации: когда сеанс снимать не нужно

Часто «зависание» — это не сеанс, а блокировка. Один пользователь держит в транзакции объект, второй ждёт. Снятие сеанса помогает, но не всегда нужно.

Что различать:

СитуацияПризнакЧто делать
Ожидание блокировки данныхСообщение о превышении времени ожидания при записиНайти держателя блокировки, дождаться завершения или снять его сеанс
Запрет входаСообщение о блокировке начала сеансовСнять блокировку в свойствах базы
Сеанс без активностиВремя последней активности давно, пользователь ушёлЗавершить сеанс
Долгая операцияСеанс потребляет ресурсы, идёт загрузка или проведениеПодождать, спросить пользователя

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

Файловая база: чем она отличается

В файловом режиме у вас нет сервера 1С и нет консоли кластера. Каждый клиент работает с файлом 1Cv8.1CD напрямую, поэтому сеансов в смысле кластера тоже нет. Есть подключения процессов 1cv8.exe, которые держат файл базы.

Что делать:

  1. Откройте список активных пользователей (способ выше). Сначала попробуйте штатное завершение.
  2. Если пользователь на другом компьютере и не отвечает, попросите его закрыть 1С или завершить процесс 1cv8.exe в диспетчере задач.
  3. Если компьютер недоступен, проверьте на файловом сервере, кто держит базу открытой: в диспетчере общих папок или через «Управление компьютером» можно закрыть открытые файлы.
  4. Не удаляйте служебные файлы из каталога базы вручную. Файл блокировки с расширением .cdn показывает, что база занята. Его удаление при живых сеансах может привести к повреждению базы.

Закрытие открытого файла на файловом сервере обрывает работу пользователя так же жёстко, как убийство процесса. Предупредите его заранее, если это возможно.

Если нужен именно монопольный доступ к файловой базе, закройте все клиенты и запустите Конфигуратор: он сам предупредит, что в базе есть другие пользователи.

Журнал регистрации и профилактика зависаний

Разовое завершение сеанса лечит симптом. Чтобы зависания не повторялись, разберитесь с причиной.

Что смотреть в журнале регистрации

Журнал регистрации открывается в Конфигураторе через Администрирование → Журнал регистрации, а в обычном режиме работы — через раздел администрирования. Полезные фильтры:

  • 🔎 По пользователю и интервалу времени вокруг зависания.
  • 🔎 По важности «Ошибка» и «Предупреждение».
  • 🔎 По событиям сеанса: «Сеанс. Начало», «Сеанс. Завершение», «Сеанс. Аутентификация».

Журнал покажет, кто и когда завершил чужой сеанс, если это делали из консоли или кода. Это удобно, когда спрашивают «а кто нас выкинул из базы».

Почему сеансы зависают

  • 🌐 Нестабильная сеть. Разрыв связи оставляет на сервере «сироту», который висит до таймаута.
  • 💾 Долгие запросы. Отчёт по всей базе без отбора держит сеанс и ресурсы.
  • 🔁 Фоновые задания. Регламентное задание, которое не завершилось, остаётся в списке сеансов.
  • 🖥 Пользователь выключил компьютер кнопкой. Сервер этого не заметил.

Что настроить

  • Работу сервера с «сиротами» регулируют параметры в свойствах кластера и рабочего сервера: периоды ожидания неактивных соединений и сеансов. Значения подбирайте под вашу нагрузку и не ставьте слишком маленькими, иначе будут обрываться живые пользователи.
  • Для долгих отчётов используйте фоновое выполнение, чтобы не держать интерфейс.
  • Регламентные задания с зависшим состоянием нужно разбирать отдельно: сеанс фонового задания можно завершить, но задание потом перезапустится по расписанию.

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

Частые вопросы

Можно ли снять сеанс, не имея прав администратора?
Нет. Завершать чужие сеансы могут только пользователи с административными правами в базе или администратор кластера в консоли.
Что будет с данными, которые пользователь не записал?
Они пропадут. Незаписанные документы и справочники не сохраняются, а открытая транзакция откатывается.
Почему консоль показывает сеанс, а в списке активных пользователей его нет?
В консоли видны все сеансы, включая фоновые задания и COM-соединения. В списке активных пользователей чаще видны интерактивные клиенты.
Нужно ли перезапускать службу сервера, чтобы снять сеанс?
Не нужно. Перезапуск службы обрывает все сеансы сразу и подходит только для аварийной ситуации.
Как узнать, кто завершил мой сеанс?
Откройте журнал регистрации и отберите события сеансов вокруг нужного времени. Если сеанс завершили через консоль или код, запись об этом будет.
Сеанс удаляется и сразу появляется снова. Что делать?
Закройте 1С на компьютере пользователя или включите блокировку начала сеансов, затем повторите удаление.