Завис пользователь в 1С: как отключить его сеанс и освободить базу
Содержание
Сеанс закрывается в консоли администрирования серверов 1С: кластер, затем информационная база, затем ветка «Сеансы», пункт «Завершить сеанс» в контекстном меню. Для файловой базы консоли нет, там либо «Активные пользователи» в самой 1С, либо снятие процесса 1cv8 у пользователя на его компьютере.
Типичная ситуация: человек ушёл домой, не закрыв 1С, и база не даёт обновиться, сделать выгрузку или включить монопольный режим . Или сеанс завис на длинной операции, а другим нужна эта же таблица. Ниже способы от мягких к жёстким и разбор, почему вообще всё повисло.
Сначала узнайте, кто и где подключён
Прежде чем что-то отключать, посмотрите, что за сеанс. Отключить не того — значит потерять чужой несохранённый документ.
В пользовательском режиме откройте список активных пользователей. Он есть в разделе администрирования (в большинстве типовых конфигураций — «Администрирование», блок поддержки и обслуживания), а также в меню «Все функции». В списке видны:
- имя пользователя;
- компьютер, с которого он зашёл;
- тип приложения (толстый клиент, тонкий клиент, веб-клиент, фоновое задание);
- время начала сеанса.
В конфигураторе тот же список открывается через меню «Администрирование — Активные пользователи». Он же показывает, кто держит базу в монопольном режиме и кто мешает его включить.
Фоновые задания и COM-соединения тоже занимают место в списке. Если в строке тип «Фоновое задание», пользователь тут ни при чём — это регламентная операция, и закрывать её нужно, только если она зависла.
Запишите имя, компьютер и время начала. Эти три значения пригодятся и для консоли, и для журнала регистрации.
Консоль администрирования серверов: основной способ
Для клиент-серверной базы это самый удобный путь. Консоль входит в поставку платформы. Подключитесь к центральному серверу, раскройте нужный кластер.
Завершить один сеанс
- Раскройте «Информационные базы» и выберите свою базу.
- Откройте ветку «Сеансы».
- Найдите строку по имени пользователя и компьютеру.
- Правая кнопка мыши — «Завершить сеанс».
У пользователя 1С закроется с сообщением о потере соединения. Всё, что он не записал, пропадёт.
Соединение или сеанс: в чём разница
Сеанс — это работа пользователя в базе. Соединение — это канал между клиентом и серверным процессом. Одно соединение может держать несколько сеансов, а бывает, что сеанса уже нет, а соединение висит.
Если после завершения сеанса пользователь остался в списке, откройте ветку «Соединения» и отключите соединение вручную. Это помогает с «призраками» после обрыва сети.
Закрыть всех перед обслуживанием
Чтобы не гонять людей по одному, в свойствах информационной базы включите блокировку начала сеансов. Задайте сообщение для тех, кто попытается войти, и при необходимости код разрешения. Сам такой код вы потом укажете в параметре запуска /UC, чтобы зайти под блокировкой.
Порядок такой:
- Включите блокировку начала сеансов.
- Предупредите людей (сообщением блокировки или лично).
- Завершите оставшиеся сеансы выделением всех строк в ветке «Сеансы».
- Делайте обновление или копию.
Не закрывайте сеансы, пока в базе идёт проведение или закрытие месяца . Прерванная операция откатится, и вы потеряете часы работы.
Зависший сеанс, который не закрывается
Бывает, что «Завершить сеанс» нажато, а строка остаётся. Так ведёт себя сеанс, который выполняет вызов на сервере и не может его прервать. Подождите минуту-две: платформа ждёт завершения операции.
Если не помогло, действуйте по нарастающей:
- Повторите завершение сеанса и проверьте ветку «Соединения».
- Отключите соединение этого клиента.
- Найдите по времени и пользователю в списке процессов тот
rphost, на котором висит вызов, и посмотрите, сколько он занимает памяти и процессора. - Если процесс «съел» ядро и не отвечает, а работа людей важнее, дождитесь перерыва и завершите процесс.
Для длинных вызовов не забывайте про самый безопасный вариант: просто подождать. Групповое перепроведение за год легко идёт 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, расширение зависит от версии). Удалять его вручную можно, только когда вы уверены, что никто в базе не работает
. Иначе вы рискуете испортить данные.
Перед любым вмешательством в каталог файловой базы сделайте копию всей папки. Сбой при открытом файле повреждает базу гораздо чаще, чем кажется.
Для файловой базы разумно сразу оценить, не пора ли переезжать на клиент-серверный вариант: при десяти и более одновременных пользователях зависания становятся обычным делом.
rac из командной строки или COM-скрипт на встроенном языке.1cv8.exe в диспетчере задач.Почему сеанс завис: разбор по журналу регистрации
Закрыть сеанс — это половина дела. Если зависания повторяются, нужна причина. Открывайте журнал регистрации: в конфигураторе «Администрирование — Журнал регистрации», в пользовательском режиме он находится в настройках администрирования.
Задайте отбор:
- интервал — за полчаса до зависания и до момента, когда вы закрыли сеанс;
- пользователь — тот, чей сеанс завис;
- важность — «Ошибка» и «Предупреждение» первым проходом.
На что смотреть:
- События о блокировках. Если у сеанса много ожиданий на управляемых блокировках, он стоит в очереди за кем-то другим. Ищите, кто держит.
- Длинные транзакции. Событие начала транзакции без закрытия в разумный срок — признак зависшей операции (загрузка, массовая обработка, перепроведение).
- События, оставленные самим сеансом. По ним видно, какой документ или обработку человек открыл последней.
- Ошибки соединения с сервером. Сеть пропадала? Тогда причина не в 1С.
Чем отличаются два сценария на практике:
| Ситуация | Что видно в журнале | Что делать |
|---|---|---|
| Пользователь ушёл, сеанс «висит» | Нет событий последние часы | Закрыть сеанс, ничего не теряется |
| Идёт длинная операция | Свежие события и открытая транзакция | Подождать или согласовать с автором |
| Очередь на блокировке | Много ожиданий у других сеансов | Найти держателя блокировки и закрыть его |
| Обрыв связи | Ошибки соединения у нескольких людей | Проверять сеть, а не 1С |
Примерно так выглядит картина «виновник — не завершённый длинный документ»: один пользователь запустил групповое перепроведение за год, другие ждут у него на блокировках. Закрываете виновника — очередь рассасывается.
Нужен постоянный контроль? Настройте в журнале регистрации отбор событий и смотрите его после каждого повторного зависания. Совпадающее время и тот же пользователь — повод разобрать его сценарий работы.
Как не доводить до принудительных отключений
Большую часть случаев можно предупредить организационно:
- Включите автоматическое завершение неактивных сеансов, если это допускает ваша конфигурация (в типовых есть настройка «Автоматически завершать неактивные сеансы» с интервалом).
- Договоритесь о времени обслуживания и заранее включайте блокировку начала сеансов, а не отключайте людей в разгар дня.
- Длинные операции (перепроведение, закрытие месяца) запускайте вечером и по возможности на фоновых заданиях.
- Следите за нагрузкой сервера: нехватка памяти на рабочем процессе даёт те же симптомы, что и зависший пользователь.
Частые вопросы
Что увидит пользователь, когда я завершу его сеанс?
Можно ли завершить сеанс, не прерывая запись документа?
Почему пользователь сразу заходит обратно?
Нужен ли пароль администратора кластера?
rac или Authenticate.