Завершение зависших и лишних сеансов в 1С:Предприятии 8.3: консоль, rac, код и файловая база
Содержание
В клиент-серверной базе 1С 8.3 принудительно закрыть сеанс пользователя проще всего в консоли администрирования кластера: Информационные базы → нужная база → Сеансы, правый клик по строке сеанса и команда Удалить. Без графической консоли то же делает утилита rac командой rac session terminate. В файловой базе кластера нет, и сеанс закрывают либо блокировкой входа из режима Предприятия, либо завершением процесса 1С на компьютере пользователя.
Типичная ситуация: вечером нужно обновить конфигурацию , а в базе висят три сеанса. Двое ушли домой с открытой программой, у третьего ноутбук ушёл в сон посреди проведения документа. Обновление требует монопольного режима и не начнётся, пока эти сеансы живы.
Подготовка: что проверить перед завершением чужого сеанса
Принудительное завершение — это обрыв. Всё, что пользователь не записал, пропадёт. Транзакция, которую выполнял сеанс, откатится целиком.
Перед тем как жать «Удалить», выясните три вещи:
- 👤 Чей сеанс. В списке сеансов видно имя пользователя, компьютер и приложение. Позвоните или напишите человеку, если он в офисе.
- ⚙️ Что это за приложение. Тонкий клиент, толстый клиент, веб-клиент, Конфигуратор, COM-соединение, фоновое задание. Сеанс фонового задания может оказаться обменом с сайтом или закрытием месяца.
- ⏱ Работает ли сеанс прямо сейчас. Если у сеанса растёт время текущего вызова, он что-то выполняет на сервере. Прервать длинное проведение партии документов посреди работы — значит потом разбираться, что успело записаться.
Сеанс Конфигуратора с открытой на редактирование конфигурацией лучше не обрывать без разговора с разработчиком. Несохранённые правки конфигурации пропадут, а захваченные в хранилище объекты останутся захваченными.
Права тоже понадобятся. Для консоли кластера нужен логин и пароль администратора кластера, если он задан. Для блокировки из режима Предприятия — пользователь с полными правами в базе.
Принудительное завершение сеансов в консоли администрирования кластера
Консоль администрирования серверов 1С:Предприятия ставится вместе с платформой (компонент «Администрирование сервера 1С:Предприятия»). В меню «Пуск» она называется «Администрирование серверов 1С Предприятия».
Шаг за шагом
- Откройте консоль. Если сервер ещё не добавлен, правой кнопкой по узлу
Central 1C:Enterprise 8.3 servers→Создать → Центральный сервер 1С:Предприятия 8.3, укажите имя сервера и порт агента1540. - Раскройте
Кластеры → Локальный кластер(или кластер с вашим именем). При запросе введите учётку администратора кластера. - Раскройте
Информационные базы → <имя базы>и выберите узелСеансы. - Справа появится таблица. Колонки «Пользователь», «Компьютер», «Приложение», «Начало работы», «Последняя активность» помогут найти нужную строку.
- Правый клик по сеансу →
Удалить. Можно выделить несколько строк с Ctrl или Shift. - Подтвердите. Через несколько секунд строка исчезнет, а у пользователя клиент покажет сообщение о разрыве соединения.
Если нужно закрыть все сеансы сразу, удобнее выбрать узел Сеансы на уровне всего кластера, а не базы. Там видны сеансы всех баз, и легко по ошибке выбить бухгалтерию соседней организации. Для одной базы работайте через её собственный узел.
Консоль не открывается
Самая частая беда — консоль пишет, что не может загрузить оснастку, после установки новой версии платформы. Лечится перерегистрацией библиотеки radmin.dll той версии платформы, что стоит на сервере. Командная строка от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1342\bin\radmin.dll"
Номер версии в пути подставьте свой. После регистрации консоль откроется, но подключаться она умеет только к серверу той же версии платформы.
Завершение сеансов из командной строки через rac
Утилита rac — консольная замена оснастки. Работает в Windows и Linux и нужна, когда графической консоли нет или завершение сеансов надо встроить в скрипт ночного обновления.
rac подключается не к агенту напрямую, а к серверу администрирования ras. Его запускают отдельно, по умолчанию он слушает порт 1545. В Windows ras обычно регистрируют службой, в Linux — запускают демоном.
Порядок команд:
rem 1. Узнать идентификатор кластера
rac cluster list
rem 2. Узнать идентификатор базы
rac infobase summary list --cluster=<uuid_кластера>
rem 3. Список сеансов этой базы
rac session list --cluster=<uuid_кластера> --infobase=<uuid_базы>
rem 4. Завершить конкретный сеанс
rac session terminate --cluster=<uuid_кластера> --session=<uuid_сеанса>
Если у кластера задан администратор, к каждой команде добавляйте --cluster-user=<логин> --cluster-pwd=<пароль>. Когда ras запущен на другой машине, адрес пишут в конце команды: rac cluster list srv1c:1545.
В выводе session list у каждого сеанса есть поля user-name, host, app-id и session. По ним выбирают, что гасить. Остальные параметры и фильтры смотрите в справке rac help session.
Для ночного регламента связка такая: включить блокировку начала сеансов, подождать 5–10 минут, затем пройтись rac session terminate по оставшимся сеансам и только после этого запускать обновление.
Блокировка входа и закрытие сеансов из режима Предприятия
Если доступа к серверу нет или база файловая, выручает механизм Библиотеки стандартных подсистем. Он есть в БП 3.0, ЗУП 3.1, УТ 11 и других типовых конфигурациях на БСП.
Путь в БП 3.0 и ЗУП 3.1: Администрирование → Обслуживание → Блокировка работы пользователей. В УТ 11 та же команда находится в разделе НСИ и администрирование, в группе обслуживания.
В форме блокировки:
- Задайте текст сообщения, например: «База закрыта на обновление до 20:30».
- Укажите время начала и окончания блокировки.
- Задайте код разрешения — с ним администратор сможет войти в закрытую базу.
- Нажмите
Установить блокировку.
Дальше программа сама предупреждает открытые клиенты и через несколько минут завершает их работу. Новые входы запрещаются до окончания блокировки.
Чтобы зайти в заблокированную базу самому, добавьте к строке запуска параметр /UC с кодом разрешения:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Base\Buh" /UCupdate2030
Посмотреть, кто сейчас в базе, можно здесь же: в разделе Администрирование → Обслуживание есть список активных пользователей. В клиент-серверной базе из этого списка можно завершить выбранный сеанс, если программа знает параметры администрирования кластера (она спросит их при первом обращении).
Блокировка не выгонит клиента, который завис намертво: зависший процесс не обрабатывает оповещения. Такие сеансы добивают через консоль кластера или rac, а в файловой базе — завершением процесса.
В клиент-серверной базе есть и платформенная блокировка без БСП. В консоли кластера откройте свойства информационной базы и включите флажок «Блокировка начала сеансов включена». Там же задаются время начала и окончания, сообщение и код разрешения.
Управление сеансами через код встроенного языка
Из встроенного языка платформа позволяет получить список сеансов и запретить новые входы. Завершить чужой сеанс напрямую методом языка нельзя — для этого обращаются к серверу через COM-соединитель.
Список сеансов
// Выполняется на сервере
Сеансы = ПолучитьСеансыИнформационнойБазы();
МойНомер = НомерСеансаИнформационнойБазы();
Для Каждого Сеанс Из Сеансы Цикл
Если Сеанс.НомерСеанса = МойНомер Тогда
Продолжить;
КонецЕсли;
Сообщить(СтрШаблон("%1 | %2 | %3 | %4",
Сеанс.Пользователь, Сеанс.ИмяКомпьютера,
Сеанс.ИмяПриложения, Сеанс.НачалоСеанса));
КонецЦикла;
Запрет новых входов
Блокировка = Новый БлокировкаСеансов;
Блокировка.Установлена = Истина;
Блокировка.Начало = ТекущаяДатаСеанса();
Блокировка.Конец = ТекущаяДатаСеанса() + 3600;
Блокировка.Сообщение = "Обновление базы, вход закрыт на час";
Блокировка.КодРазрешения = "update2030";
УстановитьБлокировкуСеансов(Блокировка);
Для снятия запишите блокировку с Установлена = Ложь. Уже открытые сеансы этот код не трогает.
Завершение сеанса через COM-соединитель
Работает только в Windows, на машине, где зарегистрирован comcntr.dll той же версии, что и сервер:
regsvr32 "C:\Program Files\1cv8\8.3.24.1342\bin\comcntr.dll"
Пример: закрыть все сеансы пользователя «Иванова» в базе buh.
Коннектор = Новый COMОбъект("V83.COMConnector");
Агент = Коннектор.ConnectAgent("tcp://srv1c:1540");
Кластер = Агент.GetClusters()[0];
Агент.Authenticate(Кластер, "", ""); // логин и пароль администратора кластера
Сеансы = Агент.GetSessions(Кластер);
Для Каждого Сеанс Из Сеансы Цикл
Если НРег(Сеанс.infoBase.Name) = "buh"
И Сеанс.userName = "Иванова" Тогда
Агент.TerminateSession(Кластер, Сеанс);
КонецЕсли;
КонецЦикла;
Если на сервере несколько кластеров, не берите первый наугад: переберите GetClusters() и сравните порт или имя кластера. Именно так устроено завершение сеансов в типовых конфигурациях — механизм БСП под капотом обращается к кластеру тем же способом.
Файловая база: как выгнать пользователя без кластера
В файловом варианте нет менеджера кластера и нет команды «удалить сеанс». Каждый клиент сам открывает файл 1Cv8.1CD, и выгнать его можно только с его же стороны.
Варианты по нарастанию жёсткости:
| Способ | Когда подходит | Риск |
|---|---|---|
| Попросить выйти | Пользователь на связи | Нет |
| Блокировка работы пользователей (БСП) | Клиент живой, база на типовой конфигурации | Несохранённые данные, но с предупреждением |
| Завершить процесс на ПК пользователя | Клиент завис или человек ушёл | Обрыв без предупреждения |
| Закрыть сеансы на терминальном сервере | Все работают через RDP | Обрыв у выбранных пользователей |
| Перезапустить веб-сервер | База опубликована на IIS или Apache | Вылетят все веб-клиенты разом |
На компьютере пользователя процессы 1С называются 1cv8c.exe (тонкий клиент) и 1cv8.exe (толстый клиент и Конфигуратор). Завершить удалённо можно из командной строки администратора домена:
taskkill /S PC-BUH03 /IM 1cv8c.exe /F
На терминальном сервере удобнее Диспетчер задач, вкладка «Пользователи»: разверните пользователя и снимите его процесс 1С, а не всю сессию Windows.
Не удаляйте файл 1Cv8.1CL рядом с базой, пока кто-то в ней работает. Он появляется, когда базу открывают, и сам исчезает после выхода последнего пользователя. Если все процессы 1С закрыты, а файл остался, — его можно удалить. Если удалить при живом подключении, следующий вход может повредить данные.
Перед тем как снимать процесс у человека, который проводит документы, сделайте копию базы
через выгрузку или копированием папки после закрытия всех клиентов. Обрыв записи в файловой базе чаще заканчивается ошибками в 1Cv8.1CD, чем в клиент-серверной.
Почему сеанс зависает и как найти виновника
Удалить сеанс — полдела. Если он повис снова через день, ищите причину.
Узел «Блокировки» в консоли
У каждой базы в консоли кластера есть узел «Блокировки». В нём видно, какой сеанс какие данные заблокировал. Если сеанс А ждёт, пока сеанс Б отпустит запись, завершать нужно не А, а Б — того, кто держит.
Перезапуск рабочего процесса — крайняя мера
В узле Рабочие процессы можно найти процесс rphost, обслуживающий зависший сеанс, и завершить его. Вместе с ним оборвутся все сеансы всех баз, которые этот процесс обслуживал. Перезапуск службы «Агент сервера 1С:Предприятия 8.3» выбивает вообще всех.
Делайте это вне рабочего времени или после предупреждения пользователей. Днём сначала попробуйте дождаться завершения вызова или удалить сеанс повторно через 2–3 минуты.
Тайм-ауты и профилактика брошенных сеансов
Чтобы не гасить сеансы руками каждый вечер, настройте автоматическое засыпание и завершение.
Тайм-ауты спящих сеансов в свойствах базы
В консоли кластера: правый клик по базе → Свойства. Там есть два параметра:
- 🕒 Время засыпания пассивного сеанса — через сколько секунд клиент, потерявший связь с сервером, переводится в спящий режим. Спящий сеанс перестаёт занимать лицензию.
- 🗑 Время завершения спящего сеанса — через сколько секунд спящий сеанс удаляется совсем.
Рабочий вариант для офиса: засыпание через 300 секунд, завершение через 3600 секунд (час). Пользователь, у которого ноутбук ушёл в сон на обед, вернётся и продолжит работу. Сеанс, брошенный на ночь, к утру исчезнет.
Это касается сеансов, у которых оборвалась связь. Клиент, открытый на работающем компьютере, считается активным, даже если человек ушёл. С такими справляется только блокировка или регламент.
Регламент перед обновлением
Чек-лист, который избавляет от вечерней охоты за сеансами:
Регламентные задания отключаются в свойствах базы в консоли флажком «Блокировка регламентных заданий включена». Без этого фоновые сеансы будут появляться снова, пока идёт обновление.
Порядок в рабочем дне
- 📌 Попросите сотрудников закрывать 1С при уходе, а не только сворачивать.
- 📌 На терминальном сервере задайте групповой политикой завершение отключённых сеансов Windows через несколько часов — вместе с ними закроется и 1С.
- 📌 Внешние обмены, которые подключаются через COM, должны сами закрывать соединение после работы. Если скрипт падает с открытым соединением, сеанс будет висеть до тайм-аута.
Частые вопросы
Пропадут ли данные пользователя, если удалить его сеанс?
Можно ли завершить сеанс, если нет пароля администратора кластера?
Удалённый сеанс сразу освобождает лицензию?
rac session list --licenses.Можно ли из Конфигуратора посмотреть, кто в базе?
Администрирование → Активные пользователи в Конфигураторе показывает список сеансов. Завершать сеансы оттуда нельзя, только смотреть.