Принудительное отключение пользователя от базы 1С: консоль, rac, СУБД и код

· 9 мин

Содержание

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

В файловой базе сервера нет, и «убить» чужой сеанс из 1С нельзя. Там работают блокировка входа или закрытие процесса 1cv8.exe на компьютере пользователя.

Какой способ отключения пользователя выбрать

Выбор зависит от варианта базы и от того, что нужно: выгнать одного человека или освободить базу целиком.

СпособКогда подходитВариант базыРиски
«Активные пользователи» в 1СОтключить одного-двух человек, нет доступа к серверуКлиент-серверНужны параметры администратора кластера
Блокировка работы пользователейОсвободить базу под обновлениеФайл и клиент-серверВыгонит всех, кроме вас
Консоль администрирования серверовОсновной инструмент админаКлиент-серверНесохранённые данные пользователя теряются
rac / COM-кодНочные регламенты, скриптыКлиент-серверОшибка в фильтре завершит лишние сеансы
Запрос к СУБДЗависла транзакция, консоль не помогаетКлиент-серверОткат транзакции, сеанс 1С может остаться
Завершение процесса 1cv8.exeФайловая база, терминальный серверФайлОбрыв записи, риск повредить файл базы

Любое принудительное завершение обрывает работу человека. Документ, который он не записал, пропадёт. Если есть минута — предупредите пользователя или поставьте блокировку с отсрочкой.

Как завершить сеанс пользователя через консоль администрирования серверов 1С

Консоль — оснастка MMC «Администрирование серверов 1С:Предприятия». Она ставится вместе с сервером или отдельно, компонентом «Администрирование сервера 1С:Предприятия» в установщике платформы.

Пошагово

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

Через несколько секунд у пользователя появится сообщение о разрыве соединения, а его лицензия освободится.

Какой сеанс удалять

В списке легко ошибиться: у одного человека бывает несколько строк. Смотрите на колонку «Приложение».

  • 🖥️ 1CV8C — тонкий клиент;
  • 🖥️ 1CV8 — толстый клиент;
  • 🌐 WebClient — браузер;
  • 🛠️ Designer — Конфигуратор;
  • ⚙️ BackgroundJob — фоновое задание;
  • 🔌 COMConnection — внешнее подключение (обмен, интеграция).

Сеансы BackgroundJob от регламентных заданий удалять без причины не нужно: система запустит их снова по расписанию.

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

Частая ситуация после обновления платформы: оснастка открывается с ошибкой или не видит серверов. Причина — не зарегистрирована библиотека radmin.dll нужной версии. Запустите командную строку от имени администратора:

regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"

Подставьте свой номер версии из папки C:\Program Files\1cv8. Разрядность консоли и библиотеки должна совпадать: для 64-битной платформы — путь Program Files, для 32-битной — Program Files (x86).

💡 Консоль подключается к агенту сервера по порту 1540. Если работаете с другого компьютера и консоль «не видит» сервер — проверьте, открыт ли этот порт в брандмауэре.

Отключение пользователей из режима 1С:Предприятие

Если доступа к серверу нет, а права администратора в базе есть, удобнее работать изнутри программы. В конфигурациях на БСП — Бухгалтерии 3.0, ЗУП 3.1, УТ 11, КА, ERP — для этого есть два инструмента.

Список активных пользователей

Путь: Администрирование → Обслуживание → Активные пользователи. Форма показывает, кто сейчас в базе, с какого компьютера и в каком приложении.

  1. Выделите строку пользователя.
  2. Нажмите команду завершения сеанса в командной панели.
  3. В клиент-серверной базе программа запросит параметры администрирования кластера — логин и пароль администратора кластера, если он задан. Без пароля оставьте поля пустыми.

В файловой базе принудительно завершить чужой сеанс из этой формы нельзя — платформа такой возможности не даёт.

Блокировка работы пользователей

Путь: Администрирование → Обслуживание → Блокировка работы пользователей. Это способ «выгнать всех» перед обновлением или закрытием периода.

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

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

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /IBName "Бухгалтерия" /UC1234

Блокировку можно включить и без открытия формы, параметром запуска /C"ЗавершитьРаботуПользователей". Снимается она так же: /C"РазрешитьРаботуПользователей".

Блокировку снимайте сразу после работ — иначе утром вся бухгалтерия увидит сообщение о закрытой базе.

А что в Конфигураторе

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

Автоматическое завершение сеансов: rac и код на встроенном языке

Ручная работа в консоли не годится для ночных регламентов. Для автоматизации есть утилита командной строки rac и COM-объект V83.COMConnector.

Утилита rac

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

"C:\Program Files\1cv8\8.3.24.1548\bin\ras.exe" cluster --daemon localhost:1540

По умолчанию ras слушает порт 1545. Дальше — три команды:

rem 1. Узнать идентификатор кластера
rac cluster list

rem 2. Посмотреть сеансы
rac session list --cluster=<uuid_кластера>

rem 3. Завершить нужный сеанс
rac session terminate --cluster=<uuid_кластера> --session=<uuid_сеанса>

Если на кластере есть администратор, добавьте к командам --cluster-user и --cluster-pwd. Остальные параметры смотрите в справке rac help session.

Код через COM-соединение

Из 1С сеансы других пользователей завершают через объект V83.COMConnector. Код выполняется на Windows-компьютере, где зарегистрирована библиотека comcntr.dll той же версии и разрядности, что и сервер.

Пример завершает все сеансы указанного пользователя в указанной базе:

Процедура ЗавершитьСеансыПользователя(ИмяСервера, ИмяБазы, ИмяПользователя) Экспорт

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

    Кластеры = Агент.GetClusters();
    Для Каждого Кластер Из Кластеры Цикл

        // Логин и пароль администратора кластера; пустые, если не заданы
        Агент.Authenticate(Кластер, "", "");

        Сеансы = Агент.GetSessions(Кластер);
        Для Каждого Сеанс Из Сеансы Цикл
            Если НРег(Сеанс.infoBase.Name) = НРег(ИмяБазы)
                И Сеанс.UserName = ИмяПользователя
                И Сеанс.AppID <> "BackgroundJob" Тогда

                Агент.TerminateSession(Кластер, Сеанс);
            КонецЕсли;
        КонецЦикла;

    КонецЦикла;

КонецПроцедуры

Фильтр по AppID защищает фоновые задания. Если нужно завершить ещё и свой сеанс Конфигуратора — уберите это условие, но вызывайте процедуру не из той же базы.

Перед запуском на рабочем сервере проверьте фильтр: выведите список найденных сеансов через Сообщить() и только потом включайте TerminateSession. Ошибка в имени базы — и вы отключите пользователей соседней базы.

Принудительный разрыв соединения на уровне СУБД

Этот способ нужен редко: когда транзакция висит в СУБД, а удаление сеанса в консоли не помогает. Сеанс 1С и соединение с СУБД — разные вещи. Рабочий процесс rphost держит пул соединений и раздаёт их сеансам по очереди.

MS SQL Server

Найти виновника блокировки:

SELECT session_id, blocking_session_id, wait_type, wait_time, status
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;

blocking_session_id — номер соединения, которое держит блокировку. Разорвать его:

KILL 57;

PostgreSQL

-- кто ждёт и кто держит
SELECT pid, usename, state, wait_event_type, now() - xact_start AS dlitelnost
FROM pg_stat_activity
WHERE datname = 'buh_base' AND state <> 'idle';

-- сначала мягко: отменить текущий запрос
SELECT pg_cancel_backend(12345);

-- если не помогло: разорвать соединение
SELECT pg_terminate_backend(12345);

Что происходит после разрыва:

  • 🔄 незавершённая транзакция откатывается целиком;
  • ❌ пользователь получает ошибку СУБД, документ не записывается;
  • 👻 сам сеанс в консоли 1С может остаться — удалите его там отдельно.

Не разрывайте соединения во время обновления конфигурации или реструктуризации — база может остаться в несогласованном состоянии, и придётся восстанавливаться из копии.

Почему сеанс зависает и не завершается

Удалили сеанс, а он снова в списке или висит в статусе «спящий». Причины обычно такие.

  • ⏳ Долгий серверный вызов. Сеанс выполняет тяжёлый запрос, а удалить его платформа сможет только после возврата управления. Смотрите колонку «Время вызова (текущее)».
  • 🔒 Ожидание блокировки. Колонки «Заблокировано СУБД» и «Заблокировано 1С» в списке сеансов показывают номер сеанса, который держит ресурс. Завершать надо его, а не того, кто ждёт.
  • 💤 Спящий сеанс. Клиент пропал без закрытия — выключили компьютер, упала сеть. Сервер держит сеанс до таймаута, а с ним и лицензию.
  • 🧱 Зависший рабочий процесс. rphost перестал отвечать — сеансы на нём не удаляются вообще.
Диагностика: выберите симптом

Для точного разбора включите технологический журнал с событиями TLOCK, TTIMEOUT и TDEADLOCK. Он покажет, какой сеанс и на каком объекте держал блокировку. После диагностики журнал выключите — на нагруженном сервере он быстро занимает диск.

Выключение рабочего процесса и перезапуск службы «Агент сервера 1С:Предприятия» обрывают сеансы всех пользователей всех баз на сервере. Делайте это вне рабочего времени или после общего предупреждения.

Как настроить таймауты, чтобы сессии закрывались сами

Лучше один раз настроить сервер, чем каждое утро чистить список сеансов.

Таймауты сеансов информационной базы

В консоли откройте свойства базы: Информационные базы → <база> → Свойства. Там есть два параметра:

ПараметрЧто делаетПример значения
Время засыпания пассивного сеансаЧерез сколько секунд без связи с клиентом сеанс становится спящим300
Время завершения спящего сеансаЧерез сколько секунд спящий сеанс удаляется600

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

Параметры рабочих процессов

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

Организационные меры

Профилактика зависших сеансов
Выполнено: 0 / 5

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

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

Пропадёт ли несохранённый документ при завершении сеанса?
Да. Всё, что пользователь не записал, теряется. Записанные и проведённые документы остаются в базе без изменений.
Можно ли завершить сессию пользователя в файловой базе?
Средствами самой 1С — только блокировкой входа для всех. Отключить одного человека можно, закрыв процесс 1cv8.exe на его компьютере или в его терминальном сеансе.
Освобождается ли лицензия сразу после удаления сеанса?
Да, клиентская лицензия освобождается вместе с сеансом. Если лицензия «висит», значит, остался спящий сеанс — проверьте узел «Сеансы» кластера.
Как завершить свой собственный зависший сеанс?
Так же, как чужой: найдите в консоли строку со своим именем и компьютером и удалите её. Если зависло окно, сначала закройте процесс 1cv8c.exe в диспетчере задач.
Почему кнопка завершения в «Активных пользователях» выдаёт ошибку?
Обычно неверны параметры администрирования кластера: пароль администратора кластера или адрес сервера. Ещё одна причина — у пользователя 1С нет полных прав.