Завис пользователь в 1С: как отключить его сеанс и освободить базу

· 9 мин

Содержание

Сеанс закрывается в консоли администрирования серверов 1С: кластер, затем информационная база, затем ветка «Сеансы», пункт «Завершить сеанс» в контекстном меню. Для файловой базы консоли нет, там либо «Активные пользователи» в самой 1С, либо снятие процесса 1cv8 у пользователя на его компьютере.

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

Сначала узнайте, кто и где подключён

Прежде чем что-то отключать, посмотрите, что за сеанс. Отключить не того — значит потерять чужой несохранённый документ.

В пользовательском режиме откройте список активных пользователей. Он есть в разделе администрирования (в большинстве типовых конфигураций — «Администрирование», блок поддержки и обслуживания), а также в меню «Все функции». В списке видны:

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

В конфигураторе тот же список открывается через меню «Администрирование — Активные пользователи». Он же показывает, кто держит базу в монопольном режиме и кто мешает его включить.

Фоновые задания и COM-соединения тоже занимают место в списке. Если в строке тип «Фоновое задание», пользователь тут ни при чём — это регламентная операция, и закрывать её нужно, только если она зависла.

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

Консоль администрирования серверов: основной способ

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

Завершить один сеанс

  1. Раскройте «Информационные базы» и выберите свою базу.
  2. Откройте ветку «Сеансы».
  3. Найдите строку по имени пользователя и компьютеру.
  4. Правая кнопка мыши — «Завершить сеанс».

У пользователя 1С закроется с сообщением о потере соединения. Всё, что он не записал, пропадёт.

Соединение или сеанс: в чём разница

Сеанс — это работа пользователя в базе. Соединение — это канал между клиентом и серверным процессом. Одно соединение может держать несколько сеансов, а бывает, что сеанса уже нет, а соединение висит.

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

Закрыть всех перед обслуживанием

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

Порядок такой:

  1. Включите блокировку начала сеансов.
  2. Предупредите людей (сообщением блокировки или лично).
  3. Завершите оставшиеся сеансы выделением всех строк в ветке «Сеансы».
  4. Делайте обновление или копию.

Не закрывайте сеансы, пока в базе идёт проведение или закрытие месяца . Прерванная операция откатится, и вы потеряете часы работы.

Зависший сеанс, который не закрывается

Бывает, что «Завершить сеанс» нажато, а строка остаётся. Так ведёт себя сеанс, который выполняет вызов на сервере и не может его прервать. Подождите минуту-две: платформа ждёт завершения операции.

Если не помогло, действуйте по нарастающей:

  1. Повторите завершение сеанса и проверьте ветку «Соединения».
  2. Отключите соединение этого клиента.
  3. Найдите по времени и пользователю в списке процессов тот rphost, на котором висит вызов, и посмотрите, сколько он занимает памяти и процессора.
  4. Если процесс «съел» ядро и не отвечает, а работа людей важнее, дождитесь перерыва и завершите процесс.

Для длинных вызовов не забывайте про самый безопасный вариант: просто подождать. Групповое перепроведение за год легко идёт 20-40 минут, и принудительное прерывание на 35-й минуте означает откат всего сделанного.

Консоль не нужна: утилита rac из командной строки

Если графической консоли под рукой нет или нужен скрипт, используйте rac — клиент сервера администрирования. Сначала должен работать сам сервер администрирования (ras). Запускают его примерно так:

ras cluster --port=1545

Дальше, из каталога bin платформы:

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

Идентификаторы — длинные GUID, их выводят первые две команды. Если на кластере стоит пароль администратора, добавьте параметры --cluster-user и --cluster-pwd.

Путь к rac зависит от версии платформы и разрядности установки. Не копируйте чужой путь: найдите каталог bin в своей установке.

Программное завершение сеансов из встроенного языка

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

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

Для Каждого Кластер Из Агент.GetClusters() Цикл
    Агент.Authenticate(Кластер, "", "");
    Для Каждого Сеанс Из Агент.GetSessions(Кластер) Цикл
        Если НРег(Сеанс.userName) = "иванов" Тогда
            Агент.TerminateSession(Кластер, Сеанс);
        КонецЕсли;
    КонецЦикла;
КонецЦикла;

Три замечания, которые экономят время:

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

Для фильтра по базе сравнивайте имя базы в сеансе с нужным значением. Получить имя можно у объекта сеанса, там есть соответствующее свойство.

Диспетчер задач: когда ничего другого не помогает

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

Клиентский компьютер

Если зависло рабочее место, а доступа к серверу нет, попросите пользователя (или зайдите на его ПК удалённо) и завершите процесс 1cv8.exe или 1cv8c.exe (тонкий клиент). В Диспетчере задач нужная строка называется «1С:Предприятие».

Сервер

На сервере процессы называются rphost — это рабочие процессы кластера. Один rphost обслуживает много сеансов, поэтому, убив его, вы отключите всех, кто на нём сидел.

Что завершаемКого заденетРиск
Сеанс в консолиОдного пользователяМинимальный
Соединение в консолиОдного клиентаНизкий
Процесс 1cv8.exe на ПКОдного пользователяПотеря несохранённого
Процесс rphostВсех на этом процессеВысокий, возможен откат транзакций
Служба сервера 1СВсю работу в кластереМаксимальный

Убивать rphost или останавливать службу сервера стоит только ночью или при полной остановке работы. Перед этим всё же попробуйте консоль.

Файловая база: нет сервера — нет консоли

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

Что работает:

  • Активные пользователи в самой 1С. Список видно, но принудительно закрыть чужой сеанс обычно нельзя — это делается на компьютере пользователя.
  • Открытые файлы на файловом сервере. Если база лежит на сетевой папке Windows, в оснастке управления компьютером есть список открытых файлов. Закрыв файл базы у конкретного пользователя, вы отцепите его.
  • Завершение процесса на ПК пользователя (см. выше).

Признак «залипшей» блокировки в файловой базе — в каталоге остаётся служебный файл блокировки (его имя начинается с 1Cv8, расширение зависит от версии). Удалять его вручную можно, только когда вы уверены, что никто в базе не работает . Иначе вы рискуете испортить данные.

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

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

Что у вас сейчас?

Почему сеанс завис: разбор по журналу регистрации

Закрыть сеанс — это половина дела. Если зависания повторяются, нужна причина. Открывайте журнал регистрации: в конфигураторе «Администрирование — Журнал регистрации», в пользовательском режиме он находится в настройках администрирования.

Задайте отбор:

  • интервал — за полчаса до зависания и до момента, когда вы закрыли сеанс;
  • пользователь — тот, чей сеанс завис;
  • важность — «Ошибка» и «Предупреждение» первым проходом.

На что смотреть:

  1. События о блокировках. Если у сеанса много ожиданий на управляемых блокировках, он стоит в очереди за кем-то другим. Ищите, кто держит.
  2. Длинные транзакции. Событие начала транзакции без закрытия в разумный срок — признак зависшей операции (загрузка, массовая обработка, перепроведение).
  3. События, оставленные самим сеансом. По ним видно, какой документ или обработку человек открыл последней.
  4. Ошибки соединения с сервером. Сеть пропадала? Тогда причина не в 1С.

Чем отличаются два сценария на практике:

СитуацияЧто видно в журналеЧто делать
Пользователь ушёл, сеанс «висит»Нет событий последние часыЗакрыть сеанс, ничего не теряется
Идёт длинная операцияСвежие события и открытая транзакцияПодождать или согласовать с автором
Очередь на блокировкеМного ожиданий у других сеансовНайти держателя блокировки и закрыть его
Обрыв связиОшибки соединения у нескольких людейПроверять сеть, а не 1С

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

Нужен постоянный контроль? Настройте в журнале регистрации отбор событий и смотрите его после каждого повторного зависания. Совпадающее время и тот же пользователь — повод разобрать его сценарий работы.

После принудительного закрытия сеанса
Выполнено: 0 / 4

Как не доводить до принудительных отключений

Большую часть случаев можно предупредить организационно:

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

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

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