Отключаем зависшего или лишнего пользователя: Конфигуратор, консоль, rac и код

· 9 мин

Содержание

Конфигуратор показывает, кто сидит в базе, но завершить чужой сеанс в клиент-серверном варианте он не умеет. Принудительно отключают пользователя в консоли администрирования серверов 1С, утилитой rac или программно через COM. В файловой базе завершить сеанс удалённо нельзя: пользователя просят выйти или закрывают его процесс на его компьютере.

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

Кто сейчас в базе: смотрим активные сеансы

Перед отключением выясните, кого именно вы отключаете. Отрубить бухгалтера посреди проведения документа дороже, чем подождать пять минут.

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

  • имя пользователя и компьютер, с которого он зашёл;
  • тип приложения (толстый клиент, тонкий клиент, веб-клиент, фоновое задание, COM-соединение);
  • время начала сеанса и номер сеанса;
  • сам Конфигуратор тоже числится в списке — не перепутайте его со своими коллегами.

В самой программе. В типовых конфигурациях с БСП список активных пользователей есть в режиме 1С:Предприятие, в разделе Администрирование, подраздел поддержки и обслуживания. Там же настраивается блокировка работы пользователей — о ней ниже.

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

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

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

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

Что делать на практике:

  1. Позвоните или напишите пользователю с просьбой сохранить работу и выйти. Имя компьютера из списка подскажет, кто это.
  2. Если человека нет на месте, а сеанс висит, зайдите на его компьютер удалённо и закройте окно 1С штатно.
  3. Если программа не отвечает, завершите процесс 1cv8.exe (или 1cv8c.exe для тонкого клиента ) в диспетчере задач — на том компьютере, где он запущен.

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

Если база лежит на сетевой папке, сервер файлов может держать блокировку на файл после падения клиента. Тогда помогает закрытие открытого файла на файловом сервере (в оснастке управления общими папками). Подробности зависят от вашей ОС, поэтому здесь только принцип: надо снять именно блокировку файла, а не перезагружать сервер.

Консоль администрирования серверов: штатный способ для клиент-серверной базы

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

Пошагово:

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

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

Узел Соединения показывает физические подключения к серверу, а узел Сеансы — пользовательские сеансы. Для отключения человека нужны именно Сеансы. Соединение, которое вы оборвёте отдельно, клиент нередко восстановит сам.

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

regsvr32 "C:\Program Files\1cv8\8.3.XX.XXXX\bin\radmin.dll"

Номер версии подставьте свой. Эта беда встречается после установки нескольких платформ подряд или при ручной копии каталога bin.

Утилита rac: отключение из командной строки и скрипта

rac — клиент сервера администрирования ras. Нужен, когда консоли под рукой нет или отключение надо вшить в скрипт обновления. Обе утилиты лежат в каталоге bin платформы.

Сначала запустите службу ras, если она ещё не работает . Параметры подключения к главному менеджеру кластера:

ras cluster --port=1545 localhost:1540

Дальше работает сам rac. Если rac и ras запускаются на одном сервере, адрес localhost:1545 подходит как есть; с другого компьютера подставьте имя сервера. Список кластеров и их идентификаторы:

rac localhost:1545 cluster list

Список сеансов выбранного кластера:

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

В выводе найдите нужный сеанс: идентификатор (поле session), имя пользователя и информационную базу. Чтобы увидеть лицензию, которую занял сеанс, добавьте ключ --licenses.

Завершение сеанса:

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

Если на кластер установлен пароль администратора, добавьте параметры --cluster-user и --cluster-pwd. Остальные параметры и их точные имена смотрите в справке: rac help session и rac help infobase. Не надо подбирать их по памяти — разные версии платформы отличаются деталями.

Служба ras по умолчанию не защищена шифрованием и открыта на порту 1545. Не публикуйте этот порт наружу и закройте его фаерволом для всех, кроме администраторов.

Автоматизация: отключаем сеансы кодом через COM-соединение

Встроенный язык 1С сам не умеет завершать чужие сеансы: объект ПользователиИнформационнойБазы управляет списком пользователей, а не соединениями. Зато можно подключиться к агенту сервера по COM и сделать то же, что делает консоль.

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

Коннектор = Новый COMОбъект("V83.COMConnector");
Агент = Коннектор.ConnectAgent("tcp://имя-сервера:1540");
Кластеры = Агент.GetClusters();
Кластер = Кластеры[0];
Агент.Authenticate(Кластер, "", "");

ИмяБазы = "buh_prod";
МойНомер = НомерСоединенияИнформационнойБазы();

Для Каждого Сеанс Из Агент.GetSessions(Кластер) Цикл
    Если Сеанс.InfoBase.Name = ИмяБазы И Сеанс.SessionID <> МойНомер Тогда
        Агент.TerminateSession(Кластер, Сеанс);
    КонецЕсли;
КонецЦикла;

Что здесь нужно учесть:

  • В вызове Authenticate подставьте логин и пароль администратора кластера, если они заданы.
  • Номер сеанса в списке агента и значение НомерСоединенияИнформационнойБазы() могут не совпадать. Если код запущен внутри базы, надёжнее исключать собственный сеанс по имени пользователя и типу приложения. Сначала прогоните скрипт на тестовой базе и выведите список вместо TerminateSession.
  • Для внешнего скрипта вне базы условие с МойНомер не нужно: отбирайте сеансы по имени базы и пользователя.
  • Скрипт работает только при установленной на этой машине платформе той же версии, что и сервер, и при открытом порте агента сервера.

Если задача разовая, берите консоль. Код оправдан, когда отключение — часть ночного обновления или выгрузки.

Блокировка новых подключений: чтобы не отключать по кругу

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

Через консоль. В свойствах информационной базы включите блокировку начала сеансов. Задайте время начала и конца, сообщение для пользователей и код разрешения. С этим кодом заходите вы сами: в параметрах запуска 1cv8.exe его передают ключом /UC.

Через rac. Параметры блокировки меняются командой rac infobase update (ключ --sessions-deny=on и сопутствующие). Полный список ключей смотрите в rac help infobase.

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

Сообщение для пользователей напишите заранее и конкретно: «Обновление базы в 18:30, сохраните документы и закройте 1С до 18:25». После такого вы получите меньше звонков, чем после внезапного отключения.

Порядок для планового обновления в рабочие часы: письмо пользователям за день, блокировка новых сеансов за 15-20 минут до окна, отключение оставшихся ровно в начале окна. Так у людей остаётся время закрыть документы, а вам не приходится никого выкидывать посреди проведения.

Когда без монопольного доступа не обойтись

Не всякая работа в Конфигураторе требует выгонять людей. Монопольный доступ нужен для обновления структуры базы данных, загрузки .dt, тестирования и исправления. Для правки модулей и форм в обычном режиме он не нужен.

Если запустить такую операцию при чужих сеансах в базе, платформа её не выполнит и сообщит, что нужен монопольный доступ. Для клиент-серверной базы порядок такой:

  1. Включите блокировку новых сеансов (раздел выше).
  2. Дождитесь, пока пользователи выйдут сами, или отключите их в консоли.
  3. Откройте Конфигуратор с кодом разрешения, если блокировка включена.
  4. Выполните операцию и сразу после неё снимите блокировку.
Как отключить сеанс в вашем случае?

Если сеанс не отключается

Бывает, что Удалить в консоли проходит, а строка в списке остаётся. Причины и действия:

  • Сеанс выполняет тяжёлый серверный вызов. Строка может исчезнуть не сразу. Подождите пару минут и обновите список.
  • Сеанс принадлежит фоновому заданию. Его убирают через регламентные и фоновые задания в самой базе, а не через пользователей.
  • Нет прав на кластер. Консоль работает, но без логина администратора кластера действие не проходит. Войдите под администратором.
  • Клиент пытается восстановить соединение. Тонкий клиент после обрыва может зайти заново за несколько секунд. Сначала заблокируйте новые сеансы.
  • Рабочий процесс завис. Крайняя мера — перезапуск рабочего процесса или службы сервера. Это оборвёт сеансы всех пользователей всех баз, обслуживаемых этим процессом, поэтому делать такое стоит вне рабочего дня и после предупреждения людей.

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

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

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