Зависший сеанс 1С: как завершить его и не потерять данные
Содержание
Пользователь закрыл окно 1С, а в списке подключений он всё ещё висит. База не обновляется, обработка не стартует, потому что «есть активные сеансы». Снять сеанс в 1С можно тремя способами: из самой программы, из консоли администрирования серверов и командой или кодом. Какой подойдёт, зависит от того, где лежит база: на сервере 1С или в файловом режиме.
Снятый сеанс обрывает работу человека. Всё, что он не успел записать, пропадёт, а проведённый наполовину документ останется в базе незаписанным. Поэтому сначала выясните, кто в базе и что делает, и только потом завершайте.
Сначала разберитесь, что именно висит
Не каждый сеанс в списке — зависший. Бывает, что человек просто ушёл на обед с открытой программой. Бывает, что идёт долгая загрузка или закрытие месяца . Завершать такой сеанс бессмысленно и вредно.
Что смотреть в списке подключений:
- 👤 Пользователь и компьютер. Позвоните человеку, если знаете, кто это.
- ⏱ Время начала и последняя активность. Сеанс, начатый вчера вечером и без активности, — кандидат на завершение.
- 🧩 Тип приложения. «Толстый клиент», «Тонкий клиент», «Веб-клиент», «Конфигуратор», «Фоновое задание», «COM-соединение». Фоновые задания и COM-соединения — не люди, но их снятие тоже влияет на работу базы.
- 📊 Потребление ресурсов. В консоли сервера видно обращения к серверу и объём памяти. Сеанс, который держит много памяти и ничего не делает, подозрителен.
Если пользователь жив и просто занят, лучше дождаться его или попросить закрыть программу.
Список активных пользователей: самый мягкий способ
Если вы можете зайти в базу сами, начните с этого. Откройте программу под пользователем с правами администратора.
В управляемом интерфейсе обычных конфигураций (БП, ЗУП, УТ) список находится в разделе Администрирование → Поддержка и обслуживание. Ищите там пункт про активных пользователей или блокировку работы. Если не нашли, воспользуйтесь поиском команд на панели функций: введите «активные пользователи».
В Конфигураторе список доступен через меню Администрирование → Активные пользователи. Там видно имя пользователя, компьютер, приложение и время начала сеанса.
Порядок работы:
- Откройте список и найдите нужную строку.
- Выделите её и нажмите кнопку завершения работы пользователя.
- Подтвердите действие.
Свой собственный сеанс завершить из этого списка нельзя: программа закроется сама. И ещё одно ограничение: если сервер 1С не отвечает на команды клиента, сеанс останется в списке. Тогда нужна консоль администрирования.
Этот способ работает как в файловой, так и в клиент-серверной базе, но снимает сеанс «вежливо»: клиенту отправляется команда на завершение. Полностью завис клиент или потерял связь с сервером — команда до него не дойдёт.
Принудительное завершение через консоль серверов 1С
Консоль администрирования серверов (запускается из каталога платформы или из меню «Пуск») подключается к агенту сервера. Агент слушает порт 1540, менеджер кластера — 1541, а рабочие процессы используют диапазон портов, который задан в свойствах рабочего сервера. Консоль обращается через агент, поэтому порт 1540 на сервере должен быть доступен с вашей машины.
Подключение и поиск сеанса
- В дереве консоли разверните
Центральные серверы 1С:Предприятия. Если сервера нет, добавьте его через контекстное меню: имя компьютера и порт 1540. - Разверните нужный сервер, затем
Кластеры → Локальный кластер. Если у кластера задан администратор, консоль спросит имя и пароль. - Откройте
Информационные базы, выберите свою базу и перейдите на вкладкуСеансы. Вкладка с тем же названием есть и на уровне всего кластера, там видны сеансы всех баз. - Отсортируйте по времени последней активности или по пользователю.
Само завершение
Выделите строку сеанса, вызовите контекстное меню и выберите Удалить. Консоль спросит подтверждение. Можно выделить несколько строк
сразу.
Рядом есть вкладка Соединения. Сеанс и соединение — не одно и то же. Соединение — это канал связи клиента с сервером, сеанс — рабочая сессия пользователя в базе. Если после удаления сеанса соединение осталось, удалите и его, но только если оно относится к зависшему клиенту.
Если консоль не запускается или ругается на компонент
Типичная проблема на свежей машине: консоль открывается, но подключение к серверу отказывает, или вместо дерева показывается ошибка регистрации компоненты. Помогает перерегистрация библиотеки администрирования radmin.dll. Откройте командную строку от имени администратора, перейдите в каталог bin нужной версии платформы и выполните:
regsvr32 radmin.dll
Версия консоли должна соответствовать версии платформы на сервере: номер не ниже серверного в рамках одной ветки. Если на сервере 8.3.24, а консоль взята от 8.3.18, возможны отказы.
Сеанс снова появляется
Бывает, что вы удалили сеанс, а он через несколько секунд возвращается. Это не баг: клиент на стороне пользователя ещё жив и переподключается. Нужно закрыть программу на самом компьютере. Или сначала запретить новые сеансы (см. ниже), а потом удалить текущие.
Блокировка начала сеансов: когда нужно обновиться или сделать выгрузку
Если вам нужен монопольный доступ к базе для обновления структуры, загрузки .dt или тестирования и исправления, мало снять сеансы. Пользователи снова подключатся, пока вы работаете. Включите блокировку начала сеансов.
В консоли откройте свойства информационной базы. Там есть флажок блокировки начала сеансов, период действия, сообщение для пользователей и код разрешения. Код разрешения позволяет вам самим подключаться при включённой блокировке: его передают параметром командной строки запуска /UC.
Порядок действий:
- Включите блокировку и задайте понятное сообщение: «Идёт обновление, работа возобновится в 19:00».
- Подождите, пока пользователи закончат работу. Если это не происходит, завершите оставшиеся сеансы.
- Выполните нужную операцию, запустив 1С с кодом разрешения.
- Снимите блокировку. Это легко забыть: в результате утром никто не сможет войти.
Блокировка по расписанию («с 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С или завершить процесс
1cv8.exeв диспетчере задач. - Если компьютер недоступен, проверьте на файловом сервере, кто держит базу открытой: в диспетчере общих папок или через «Управление компьютером» можно закрыть открытые файлы.
- Не удаляйте служебные файлы из каталога базы вручную. Файл блокировки с расширением
.cdnпоказывает, что база занята. Его удаление при живых сеансах может привести к повреждению базы.
Закрытие открытого файла на файловом сервере обрывает работу пользователя так же жёстко, как убийство процесса. Предупредите его заранее, если это возможно.
Если нужен именно монопольный доступ к файловой базе, закройте все клиенты и запустите Конфигуратор: он сам предупредит, что в базе есть другие пользователи.
Журнал регистрации и профилактика зависаний
Разовое завершение сеанса лечит симптом. Чтобы зависания не повторялись, разберитесь с причиной.
Что смотреть в журнале регистрации
Журнал регистрации открывается в Конфигураторе через Администрирование → Журнал регистрации, а в обычном режиме работы — через раздел администрирования. Полезные фильтры:
- 🔎 По пользователю и интервалу времени вокруг зависания.
- 🔎 По важности «Ошибка» и «Предупреждение».
- 🔎 По событиям сеанса: «Сеанс. Начало», «Сеанс. Завершение», «Сеанс. Аутентификация».
Журнал покажет, кто и когда завершил чужой сеанс, если это делали из консоли или кода. Это удобно, когда спрашивают «а кто нас выкинул из базы».
Почему сеансы зависают
- 🌐 Нестабильная сеть. Разрыв связи оставляет на сервере «сироту», который висит до таймаута.
- 💾 Долгие запросы. Отчёт по всей базе без отбора держит сеанс и ресурсы.
- 🔁 Фоновые задания. Регламентное задание, которое не завершилось, остаётся в списке сеансов.
- 🖥 Пользователь выключил компьютер кнопкой. Сервер этого не заметил.
Что настроить
- Работу сервера с «сиротами» регулируют параметры в свойствах кластера и рабочего сервера: периоды ожидания неактивных соединений и сеансов. Значения подбирайте под вашу нагрузку и не ставьте слишком маленькими, иначе будут обрываться живые пользователи.
- Для долгих отчётов используйте фоновое выполнение, чтобы не держать интерфейс.
- Регламентные задания с зависшим состоянием нужно разбирать отдельно: сеанс фонового задания можно завершить, но задание потом перезапустится по расписанию.
Перед любым вмешательством на сервере (остановка службы, перезапуск рабочего процесса, перезагрузка) оповестите пользователей: при остановке оборвутся все сеансы. Делайте такие вещи вне рабочего времени.