Пользователь завис в базе 1С: как принудительно завершить его сеанс

· 10 мин

Содержание

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

В файловой базе серверных сеансов нет. Там «зависший пользователь» — это живой процесс 1cv8.exe на чьём-то компьютере или терминальном сервере, либо открытый файл базы на сетевой папке. Его закрывают средствами Windows. Ниже оба варианта по порядку, от мягкого способа к жёсткому.

Как найти зависший сеанс и понять, чей он

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

Где посмотреть список подключённых:

  • 🖥️ В режиме Предприятия — Главное меню → Все функции → Стандартные → Активные пользователи. Пункт «Все функции» включают в Главное меню → Сервис → Параметры, флаг «Отображать команду “Все функции”».
  • 🛠️ В Конфигураторе — Администрирование → Активные пользователи. Список здесь только для просмотра.
  • 🗂️ В консоли кластера — узел «Сеансы» у базы. Это самый информативный вариант.

По каким признакам сеанс считают зависшим:

  1. 👤 Пользователь говорит, что программу закрыл, а его имя в списке осталось.
  2. 💻 В колонке компьютера стоит машина, которую уже выключили.
  3. ⏳ В консоли у сеанса нет активности, но он держит лицензию или блокировку.
  4. 🔒 Другие пользователи ловят ошибку блокировки, и в тексте ошибки фигурирует этот сеанс.

В консоли кластера полезно включить дополнительные колонки: Вид → Добавить или удалить столбцы. Колонка «Захвачено СУБД» показывает, что сеанс прямо сейчас выполняет запрос к базе данных. Если там стоит время — сеанс работает, а не висит. Его лучше не трогать, пока не выясните, что он делает.

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

Мягкий способ: завершение работы средствами самой конфигурации

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11 и другие) есть своя обработка «Активные пользователи» с командой завершения сеанса. Её открывают из раздела Администрирование, в блоке обслуживания. Для клиент-серверной базы при первом завершении программа спросит логин и пароль администратора кластера, если он задан.

Второй инструмент БСП — блокировка работы пользователей. Её ставят перед обновлением или закрытием периода:

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

За несколько минут до начала у пользователей появится предупреждение. Затем программа сама закроет их сеансы.

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

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /N"Администратор" /P"пароль" /C"ЗавершитьРаботуПользователей" /UC"12345"

Снимают блокировку запуском с параметром /C"РазрешитьРаботуПользователей" и тем же кодом в /UC.

В файловой базе этот механизм вежливый: каждый клиент закрывает себя сам по сигналу. Если программа на чужом компьютере намертво зависла, она сигнал не получит. Тогда переходите к способу через Windows (раздел про жёсткий сброс).

Удаление сеанса в консоли администрирования серверов 1С

Консоль — основной инструмент администратора клиент-серверной базы. Сеанс удаляют так:

  1. Запустите «Администрирование серверов 1С Предприятия» из меню «Пуск».
  2. Раскройте Центральные серверы 1С:Предприятия 8.3 → <имя сервера> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы.
  3. Найдите строку по имени пользователя, компьютеру или времени начала.
  4. Правой кнопкой → Удалить, подтвердите.

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

Если сеанс после удаления тут же появляется снова, у пользователя включено автоматическое переподключение после разрыва. Это не ошибка: программа просто восстановила связь. Позвоните пользователю или поставьте блокировку начала сеансов (раздел про профилактику).

Узел «Соединения» рядом с «Сеансами» показывает сетевые соединения клиентов с рабочими процессами. Разрывать соединение вместо сеанса обычно незачем: сеанс останется и подцепится заново.

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

Типичная ситуация после обновления платформы: оснастка открывается с ошибкой или пустой. Причина — библиотека консоли зарегистрирована от старой версии. Перерегистрируйте её от имени администратора, подставив свой номер версии:

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

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

Сброс сеанса через rac: когда консоли нет под рукой

На Linux-сервере или по SSH удобнее утилита rac. Она работает через сервер администрирования ras, который слушает порт 1545 по умолчанию. На Windows ras обычно регистрируют отдельной службой, на Linux он ставится вместе с сервером.

Порядок команд:

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

# 2. Найти базу и её идентификатор
rac infobase summary list --cluster=<uuid-кластера>

# 3. Посмотреть сеансы базы
rac session list --cluster=<uuid-кластера> --infobase=<uuid-базы>

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

Если у кластера есть администратор, к каждой команде после выбора кластера добавляйте --cluster-user=<имя> --cluster-pwd=<пароль>. Если ras запущен на другой машине, адрес и порт указывают в конце команды: rac session list ... srv1c:1545.

В выводе rac session list ищите поля user-name, host и started-at. По ним однозначно находится нужный сеанс. Остальные параметры каждой команды показывает rac help session.

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

Жёсткий сброс: рабочий процесс, служба и файловая база

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

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

МетодКого затронетКогда применять
Завершить процесс rphost.exeВсе сеансы этого рабочего процессаСеанс не удаляется, процесс съел память
Перезапустить службу агента сервераВсе базы на сервереКонсоль не отвечает, кластер «завис» целиком
Очистить сеансовые данные сервераВсе базы на сервереПризрачные сеансы возвращаются после перезапуска
Закрыть процесс 1cv8.exe на компьютереОдин пользовательФайловая база, клиент завис
Закрыть открытый файл на файловом сервереОдин пользовательФайловая база в сетевой папке

Рабочий процесс rphost

В консоли откройте узел Рабочие процессы кластера и посмотрите PID процесса, в котором живёт сеанс (он виден в свойствах сеанса). Завершите процесс с этим PID в диспетчере задач сервера. Менеджер кластера запустит новый rphost автоматически.

Служба агента

Служба называется «Агент сервера 1С:Предприятия 8.3» с указанием разрядности. Перезапустите её в services.msc или командой sc stop / sc start с именем службы. На Linux — через systemctl с именем юнита вашей версии.

Очистка сеансовых данных

Если после перезапуска сеансы-призраки остаются, остановите службу агента и удалите папки snccntx* в каталоге кластера, обычно это srvinfo\reg_1541. Затем запустите службу. Сам каталог reg_1541 и файлы реестра кластера не трогайте: там регистрация всех баз.

Файловая база

Найдите зависший процесс 1cv8.exe или 1cv8c.exe на компьютере пользователя. На терминальном сервере удобнее завершить его в диспетчере задач на вкладке «Пользователи» или выйти из всего сеанса RDP этого человека.

Если база лежит в общей папке, откройте на файловом сервере fsmgmt.msc → «Открытые файлы». Найдите файл 1Cv8.1CD, открытый нужным пользователем, и закройте его. Программа у пользователя упадёт, а база освободится.

Блокировки в MS SQL и PostgreSQL: проверка на стороне СУБД

Иногда сеанс в 1С уже удалён, а блокировка в базе данных осталась. Или наоборот: сеанс выглядит нормально, а все стоят в очереди за одним запросом. Тогда смотрят прямо в СУБД.

Учтите: соединение с СУБД не равно пользователю 1С. Рабочий процесс держит пул соединений и выдаёт их сеансам по очереди. Поэтому прибивать соединения в СУБД вслепую нельзя.

MS SQL Server. Кто кого блокирует:

SELECT r.session_id, r.blocking_session_id, r.wait_type, r.wait_time,
       s.host_name, s.program_name, t.text
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON s.session_id = r.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.blocking_session_id <> 0;

В колонке blocking_session_id — номер соединения-виновника. Завершить его: KILL <номер>. Быстрый обзор всех соединений даёт EXEC sp_who2.

PostgreSQL. Аналог:

SELECT pid, pg_blocking_pids(pid) AS blocked_by, state,
       now() - xact_start AS in_transaction, query
FROM pg_stat_activity
WHERE datname = 'buh';

Сначала пробуйте отменить запрос: SELECT pg_cancel_backend(<pid>);. Если не помогло, оборвите соединение целиком: SELECT pg_terminate_backend(<pid>);.

После KILL или pg_terminate_backend рабочий процесс 1С получит ошибку и, скорее всего, завершит сеанс, к которому было привязано соединение. Откатится вся транзакция этого сеанса. Если в ней шло проведение большого документа или закрытие месяца, откат тоже займёт время.

Полезная привычка: сначала найти виновника в СУБД, затем по времени начала и хосту сопоставить его с сеансом в консоли 1С и удалить сеанс там. Так вы закрываете проблему штатно, а не обрываете соединение из-под ног платформы.

Какая у вас база и что видно в списке?

Как не допускать зависших сеансов

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

  • 🖧 Ограничьте отключённые RDP-сеансы. В групповой политике сервера терминалов задайте лимит времени для отключённых сеансов, например 2 часа. Windows сама закроет сеанс вместе с запущенной 1С.
  • 🚧 Ставьте блокировку начала сеансов перед обслуживанием. В свойствах базы в консоли кластера есть флаг «Блокировка начала сеансов включена», текст сообщения и код разрешения. Через rac то же самое делает rac infobase update с параметром --sessions-deny=on.
  • ♻️ Настройте перезапуск рабочих процессов. В свойствах кластера задают интервал перезапуска и время, через которое выключенные процессы останавливают. Процессы, распухшие за неделю, не будут копить мусорные сеансы.
  • 💤 Знайте про спящие сеансы. При обрыве связи сервер не убивает сеанс сразу, а переводит его в спящий, чтобы клиент мог переподключиться. Сколько он проживёт, видно в выводе rac session list в полях passive-session-hibernate-time и hibernate-session-terminate-time.
  • 📋 Разведите регламентные задания. Тяжёлые фоновые задачи (загрузка курсов, обмены, полнотекстовый индекс) не ставьте на время закрытия месяца и обновления.
Перед обновлением или закрытием периода
Выполнено: 0 / 5

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

Освободится ли лицензия после удаления сеанса?
Да. Лицензия возвращается в пул сразу после завершения сеанса на сервере. Если пользователь тут же переподключится, он займёт её снова.
Можно ли выкинуть пользователя из Конфигуратора?
Сеанс Конфигуратора виден в консоли кластера как обычный сеанс с приложением «Конфигуратор», и удаляется так же. Несохранённые изменения конфигурации при этом пропадут.
Нужны ли права администратора 1С, чтобы удалить сеанс в консоли?
Нет, нужны права администратора кластера, если он задан. Права пользователя в самой базе здесь роли не играют.
Почему удалённый сеанс висит в списке ещё несколько минут?
Сервер откатывает транзакцию этого сеанса. Пока откат не закончится, строка может оставаться. На больших документах это занимает минуты.
Что потеряет пользователь, если его выкинуть?
Всё, что не записано: открытые несохранённые документы и незавершённую операцию. Уже записанные и проведённые документы останутся в базе.