Завершение зависших и лишних сеансов в 1С:Предприятии 8.3: консоль, rac, код и файловая база

· 10 мин

Содержание

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

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

Подготовка: что проверить перед завершением чужого сеанса

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

Перед тем как жать «Удалить», выясните три вещи:

  • 👤 Чей сеанс. В списке сеансов видно имя пользователя, компьютер и приложение. Позвоните или напишите человеку, если он в офисе.
  • ⚙️ Что это за приложение. Тонкий клиент, толстый клиент, веб-клиент, Конфигуратор, COM-соединение, фоновое задание. Сеанс фонового задания может оказаться обменом с сайтом или закрытием месяца.
  • ⏱ Работает ли сеанс прямо сейчас. Если у сеанса растёт время текущего вызова, он что-то выполняет на сервере. Прервать длинное проведение партии документов посреди работы — значит потом разбираться, что успело записаться.

Сеанс Конфигуратора с открытой на редактирование конфигурацией лучше не обрывать без разговора с разработчиком. Несохранённые правки конфигурации пропадут, а захваченные в хранилище объекты останутся захваченными.

Права тоже понадобятся. Для консоли кластера нужен логин и пароль администратора кластера, если он задан. Для блокировки из режима Предприятия — пользователь с полными правами в базе.

Принудительное завершение сеансов в консоли администрирования кластера

Консоль администрирования серверов 1С:Предприятия ставится вместе с платформой (компонент «Администрирование сервера 1С:Предприятия»). В меню «Пуск» она называется «Администрирование серверов 1С Предприятия».

Шаг за шагом

  1. Откройте консоль. Если сервер ещё не добавлен, правой кнопкой по узлу Central 1C:Enterprise 8.3 servers → Создать → Центральный сервер 1С:Предприятия 8.3, укажите имя сервера и порт агента 1540.
  2. Раскройте Кластеры → Локальный кластер (или кластер с вашим именем). При запросе введите учётку администратора кластера.
  3. Раскройте Информационные базы → <имя базы> и выберите узел Сеансы.
  4. Справа появится таблица. Колонки «Пользователь», «Компьютер», «Приложение», «Начало работы», «Последняя активность» помогут найти нужную строку.
  5. Правый клик по сеансу → Удалить. Можно выделить несколько строк с Ctrl или Shift.
  6. Подтвердите. Через несколько секунд строка исчезнет, а у пользователя клиент покажет сообщение о разрыве соединения.

Если нужно закрыть все сеансы сразу, удобнее выбрать узел Сеансы на уровне всего кластера, а не базы. Там видны сеансы всех баз, и легко по ошибке выбить бухгалтерию соседней организации. Для одной базы работайте через её собственный узел.

Консоль не открывается

Самая частая беда — консоль пишет, что не может загрузить оснастку, после установки новой версии платформы. Лечится перерегистрацией библиотеки 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 та же команда находится в разделе НСИ и администрирование, в группе обслуживания.

В форме блокировки:

  1. Задайте текст сообщения, например: «База закрыта на обновление до 20:30».
  2. Укажите время начала и окончания блокировки.
  3. Задайте код разрешения — с ним администратор сможет войти в закрытую базу.
  4. Нажмите Установить блокировку.

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

Чтобы зайти в заблокированную базу самому, добавьте к строке запуска параметр /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 секунд (час). Пользователь, у которого ноутбук ушёл в сон на обед, вернётся и продолжит работу. Сеанс, брошенный на ночь, к утру исчезнет.

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

Регламент перед обновлением

Чек-лист, который избавляет от вечерней охоты за сеансами:

Перед ночным обновлением базы
Выполнено: 0 / 7

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

Порядок в рабочем дне

  • 📌 Попросите сотрудников закрывать 1С при уходе, а не только сворачивать.
  • 📌 На терминальном сервере задайте групповой политикой завершение отключённых сеансов Windows через несколько часов — вместе с ними закроется и 1С.
  • 📌 Внешние обмены, которые подключаются через COM, должны сами закрывать соединение после работы. Если скрипт падает с открытым соединением, сеанс будет висеть до тайм-аута.

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

Пропадут ли данные пользователя, если удалить его сеанс?
Пропадёт всё, что не было записано. Уже проведённые и записанные документы останутся. Документ, который проводился в момент удаления, не запишется — транзакция откатится.
Можно ли завершить сеанс, если нет пароля администратора кластера?
Через консоль и rac — нет. Остаётся блокировка из режима Предприятия или завершение процесса на компьютере пользователя. Потерянный пароль восстанавливают из резервной копии настроек кластера или через администратора сервера.
Удалённый сеанс сразу освобождает лицензию?
Да, как только сеанс исчезает из списка, лицензия возвращается в пул. Проверить можно командой rac session list --licenses.
Можно ли из Конфигуратора посмотреть, кто в базе?
Да, Администрирование → Активные пользователи в Конфигураторе показывает список сеансов. Завершать сеансы оттуда нельзя, только смотреть.
Как закрыть свой собственный зависший сеанс?
Свой зависший сеанс удаляют так же, через консоль кластера, найдя его по имени компьютера. Если клиент на вашем ПК не отвечает, сначала снимите процесс 1cv8c.exe в Диспетчере задач.