Зависшие сеансы в 1С 8.3: как освободить базу и лицензии

· 9 мин

Содержание

Убрать активных пользователей в 1С 8.3 на сервере проще всего через консоль администрирования кластера: Кластер → Информационные базы → ваша база → Сеансы, выделить сеанс и выбрать «Удалить». В файловой базе такой кнопки нет: сеанс исчезает, только когда закрывается процесс 1cv8.exe или 1cv8c.exe, который его держит.

Частое заблуждение — что «призрак» в списке активных пользователей живёт в какой-то таблице и его можно стереть запросом. Нет: в клиент-серверном варианте сеансы хранит кластер серверов 1С, а в файловом — сама база, пока к ней открыт файл. Поэтому сначала выясните, где база работает, и только потом выбирайте способ.

Как посмотреть, кто сейчас работает в базе

Начните с диагностики. Иногда «висящий» пользователь — это коллега, который ушёл на обед с открытой программой. Иногда это фоновое задание или веб-сервис, а не человек.

Где смотреть список:

  • 👥 В самой программе. В БП 3.0, ЗУП 3.1, УТ 11 и других конфигурациях на БСП откройте Администрирование → Обслуживание и найдите ссылку «Активные пользователи». Там видны имя, компьютер, приложение и время начала сеанса.
  • 🛠 В Конфигураторе. Меню Администрирование → Активные пользователи. Список только для просмотра, завершить из него сеанс нельзя.
  • 🖥 В консоли кластера (только для серверной базы). Узел «Сеансы» внутри базы показывает всё: номер сеанса, пользователя, компьютер, тип приложения, рабочий процесс и время последней активности.

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

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

Завершение сеанса пользователя из интерфейса программы

В конфигурациях на БСП форма «Активные пользователи» умеет не только показывать, но и отключать. Выделите строку и найдите в командной панели команду завершения сеанса.

Как это работает:

  1. В клиент-серверной базе программа обращается к кластеру. Если на кластере задан администратор, она спросит его имя и пароль.
  2. В файловой базе программа посылает работающему сеансу команду закрыться. Сеанс выполнит её, только если клиент жив и отвечает. Зависший процесс так не убрать.

Для плановых работ удобнее массовое отключение. В том же разделе Администрирование → Обслуживание есть блокировка работы пользователей. Задайте время начала, текст сообщения и код разрешения. Пользователи получат предупреждение, а затем программа сама завершит их сеансы.

Тот же механизм можно запустить без входа в интерфейс, параметром командной строки. Конфигурации на БСП понимают /C ЗавершитьРаботуПользователей, а снять блокировку можно через /C РазрешитьРаботуПользователей с кодом разрешения /UC.

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

Код разрешения /UC запомните. Пока блокировка стоит, без него в базу не войдёт никто, включая вас.

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

Для серверной базы это основной и самый надёжный способ. Консоль «Администрирование серверов 1С Предприятия» ставится вместе с платформой и подключается к агенту сервера (порт 1540 по умолчанию).

Пошагово

  1. Запустите консоль. Если её нет в меню «Пуск», зарегистрируйте radmin.dll из папки bin нужной версии платформы командой regsvr32 от имени администратора.
  2. Добавьте центральный сервер по имени компьютера, если он ещё не добавлен.
  3. Раскройте Кластеры → Локальный кластер → Информационные базы → ваша база → Сеансы.
  4. Выделите нужный сеанс. Можно выделить несколько с зажатым Ctrl.
  5. Нажмите правой кнопкой мыши и выберите «Удалить». Подтвердите.

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

Сеансы и соединения — не одно и то же

У базы в консоли есть ещё узел «Соединения». Сеанс — это логическая работа пользователя, она держит лицензию. Соединение — канал между клиентом и рабочим процессом.

Если после удаления сеанса база всё равно «занята», загляните в «Соединения». Бывает, что соединение Конфигуратора или COM-подключения висит отдельно. Его тоже можно разорвать из контекстного меню.

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

Командная строка: утилиты ras и rac

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

  • 📡 ras — сервер администрирования. Работает службой и по умолчанию слушает порт 1545.
  • ⌨️ rac — клиент, которым вы отправляете команды на ras.

Порядок работы

Сначала узнайте идентификатор кластера:

rac cluster list

Потом получите список сеансов. Подставьте UUID кластера из предыдущего вывода:

rac session list --cluster=<uuid-кластера>

В выводе у каждого сеанса есть поле session, его идентификатор, а также user-name, host и app-id. Найдите нужного пользователя и завершите сеанс:

rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Если на кластере задан администратор, добавляйте к каждой команде --cluster-user и --cluster-pwd. Если ras работает на другом компьютере, укажите адрес в конце команды: имя-сервера:1545.

Чтобы сократить список до одной базы, сначала найдите её UUID через rac infobase summary list --cluster=<uuid-кластера>. Полный перечень параметров для вашей версии платформы покажет rac help session.

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

Зависшие соединения на стороне SQL: что можно и чего нельзя

В интернете гуляет совет «удалить записи из таблицы блокировок в SQL». Такой таблицы, отвечающей за список активных пользователей, в базе данных нет. Ручное изменение служебных таблиц информационной базы — прямой путь к её повреждению.

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

Как найти и снять такое соединение:

СУБДКак найтиКак завершить
MS SQL Serversp_who2 или «Монитор активности» в Management Studio, колонка блокирующего процессаKILL <номер процесса>
PostgreSQLзапрос к pg_stat_activity с фильтром по базеSELECT pg_terminate_backend(<pid>);

Пример для PostgreSQL: посмотреть, кто давно держит транзакцию.

SELECT pid, usename, client_addr, state, xact_start
FROM pg_stat_activity
WHERE datname = 'buh'
ORDER BY xact_start;

Завершайте на стороне СУБД только то соединение, которое вы опознали как блокирующее. Транзакция откатится, а рабочий процесс 1С получит ошибку, и пользователь, чья операция шла через это соединение, её увидит.

Если «призраки» не уходят даже из консоли

Изредка кластер хранит сеансы, которые не удаляются: консоль выдаёт ошибку или сеанс возвращается. Практики в этом случае очищают сеансовые данные кластера:

  1. Предупредите всех пользователей сервера. Остановка службы оборвёт все сеансы всех баз на этом сервере.
  2. Остановите службу «Агент сервера 1С:Предприятия 8.3» в нерабочее время.
  3. В каталоге кластера (обычно srvinfo\reg_1541) переименуйте папки snccntx…. Удалять сразу не нужно, переименования достаточно.
  4. Запустите службу и проверьте список сеансов.

Файлы реестра кластера (1CV8Clst.lst и соседние) не трогайте: в них описание кластера и зарегистрированных баз.

Файловая база: процессы, открытые файлы и временные файлы

В файловом варианте нет кластера и нет кнопки «удалить сеанс» снаружи. Сеанс живёт, пока у процесса 1С открыт файл 1Cv8.1CD. Значит, задача — найти и закрыть этот процесс.

Пошагово

  1. Определите по списку активных пользователей имя компьютера с зависшим сеансом.
  2. На этом компьютере откройте Диспетчер задач и снимите процессы 1cv8.exe и 1cv8c.exe. На терминальном сервере ищите их на вкладке «Пользователи» у нужной учётной записи.
  3. Если база лежит в общей папке, а компьютер недоступен, откройте на файловом сервере оснастку «Управление компьютером → Общие папки → Открытые файлы». Найдите 1Cv8.1CD, проверьте, от какого пользователя он открыт, и закройте именно эту запись.
  4. Снова откройте список активных пользователей. Зависший сеанс должен исчезнуть.

Закрытие открытого файла на сервере для клиента выглядит как обрыв сети. Если в этот момент шла запись, базу придётся проверять утилитой chdbfl.exe из папки bin платформы. Поэтому сначала пробуйте закрыть процесс на самом компьютере пользователя.

Временные файлы рядом с базой

Во время работы в каталоге базы может появляться временный файл 1Cv8tmp.1CD. После корректного выхода всех пользователей он исчезает. Если все процессы закрыты, открытых файлов на сервере нет, а 1Cv8tmp.1CD остался — его можно удалить.

Удаляйте только при пустом списке открытых файлов. Сам 1Cv8.1CD — это и есть ваша база, с ним никаких действий, кроме копирования, не делайте.

Кэш пользователя в %APPDATA%\1C\1cv8 к активным сеансам отношения не имеет. Его очистка помогает при глюках интерфейса, но «призрака» из списка не уберёт.

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

СпособКогда подходитРиски
Команда в форме «Активные пользователи»клиент работает и отвечает; БСП-конфигурациядля серверной базы нужен пароль администратора кластера
Блокировка работы пользователейплановое обновление, нужно выгнать всехзабыть код /UC и не попасть в базу самому
Консоль кластерасерверная база, один или несколько зависших сеансовнесохранённые данные пользователя теряются
rac session terminateскрипты, удалённый сервер, нет консолиошибка в UUID — завершится чужой сеанс
Завершение соединения в СУБДтранзакция держит блокировку, сеансов уже нетоткат транзакции, ошибка у пользователя
Очистка snccntxсеансы не удаляются из консолиобрыв всех сеансов сервера
Снятие процесса или открытого файлафайловая базапри записи — риск повреждения, проверка chdbfl

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

Перед тем как обрывать чужие сеансы
Выполнено: 0 / 5

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

Зависшие сеансы опасны не только тем, что мешают обновлению. В серверной базе каждый такой сеанс может занимать лицензию, и живой сотрудник утром не сможет войти.

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

В консоли кластера откройте свойства базы. Там есть два параметра, которые отвечают ровно за эту проблему:

  • ⏸ Время засыпания пассивного сеанса — через сколько секунд сеанс без связи с клиентом переводится в спящий режим.
  • ⏹ Время завершения спящего сеанса — через сколько секунд спящий сеанс завершается сам.

По умолчанию спящий сеанс живёт долго. Для бухгалтерии разумно сократить второй параметр до 1–2 часов (3600–7200 секунд). Тогда сеанс с ноутбука, который просто закрыли крышкой, к утру уберётся сам.

Регламент и привычки

  • 🕗 Ночные регламентные операции (обновление, тестирование, архивирование) начинайте со скрипта на rac, а не с ручной охоты за пользователями.
  • 🔌 Обмены и интеграции через COM-соединение запускайте так, чтобы скрипт сам закрывал соединение по окончании.
  • 🧑‍💻 Попросите сотрудников выходить из 1С через меню, а не закрывать окно терминального сервера крестиком: при этом сеанс на терминале остаётся вместе с процессом 1С.
  • 📶 Ноутбуки с Wi-Fi чаще дают обрывы. Для них особенно важен таймаут спящего сеанса.

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

Сколько лицензий занимает зависший сеанс?
Столько же, сколько живой: одну клиентскую лицензию, пока сеанс не завершён. Проверить, какие сеансы держат лицензии, можно командой rac session list --cluster=<uuid> --licenses.
Можно ли отключить пользователя, если я не знаю пароль администратора кластера?
Через консоль и rac — нет. Обратитесь к тому, кто настраивал сервер. Без пароля останется только блокировка работы пользователей средствами самой конфигурации.
Почему после удаления сеанс появляется снова?
Обычно это фоновое задание, обмен или служба, которая подключается по расписанию. Отключите её источник: регламентное задание, планировщик Windows или внешнюю программу.
Видно ли пользователю, что его сеанс завершили?
Да. Клиент получит сообщение о разрыве соединения с сервером и предложит перезапустить программу. Несохранённые изменения пропадут.
Нужно ли убирать сеанс Конфигуратора перед обновлением?
Да, если обновление требует монопольного доступа. Сеанс Конфигуратора виден в том же списке и завершается тем же способом.