Зависшие сеансы в 1С 8.3: как освободить базу и лицензии
Содержание
Убрать активных пользователей в 1С 8.3 на сервере проще всего через консоль администрирования кластера: Кластер → Информационные базы → ваша база → Сеансы, выделить сеанс и выбрать «Удалить». В файловой базе такой кнопки нет: сеанс исчезает, только когда закрывается процесс 1cv8.exe или 1cv8c.exe, который его держит.
Частое заблуждение — что «призрак» в списке активных пользователей живёт в какой-то таблице и его можно стереть запросом. Нет: в клиент-серверном варианте сеансы хранит кластер серверов 1С, а в файловом — сама база, пока к ней открыт файл. Поэтому сначала выясните, где база работает, и только потом выбирайте способ.
Как посмотреть, кто сейчас работает в базе
Начните с диагностики. Иногда «висящий» пользователь — это коллега, который ушёл на обед с открытой программой. Иногда это фоновое задание или веб-сервис, а не человек.
Где смотреть список:
- 👥 В самой программе. В БП 3.0, ЗУП 3.1, УТ 11 и других конфигурациях на БСП откройте
Администрирование → Обслуживаниеи найдите ссылку «Активные пользователи». Там видны имя, компьютер, приложение и время начала сеанса. - 🛠 В Конфигураторе. Меню
Администрирование → Активные пользователи. Список только для просмотра, завершить из него сеанс нельзя. - 🖥 В консоли кластера (только для серверной базы). Узел «Сеансы» внутри базы показывает всё: номер сеанса, пользователя, компьютер, тип приложения, рабочий процесс и время последней активности.
Обращайте внимание на колонку с приложением. «Фоновое задание», «COM-соединение», «Веб-сервис» и «Конфигуратор» — разные истории. Фоновые задания и обмены часто перезапускаются сами через минуту, и убирать их бесполезно, пока их не отключили.
Если в списке висит пользователь с компьютером, который выключен со вчерашнего дня, — это почти наверняка зависший сеанс. Если компьютер включён — сначала позвоните человеку. Обрыв сеанса означает потерю несохранённых документов.
Завершение сеанса пользователя из интерфейса программы
В конфигурациях на БСП форма «Активные пользователи» умеет не только показывать, но и отключать. Выделите строку и найдите в командной панели команду завершения сеанса.
Как это работает:
- В клиент-серверной базе программа обращается к кластеру. Если на кластере задан администратор, она спросит его имя и пароль.
- В файловой базе программа посылает работающему сеансу команду закрыться. Сеанс выполнит её, только если клиент жив и отвечает. Зависший процесс так не убрать.
Для плановых работ удобнее массовое отключение. В том же разделе Администрирование → Обслуживание есть блокировка работы пользователей. Задайте время начала, текст сообщения и код разрешения. Пользователи получат предупреждение, а затем программа сама завершит их сеансы.
Тот же механизм можно запустить без входа в интерфейс, параметром командной строки. Конфигурации на БСП понимают /C ЗавершитьРаботуПользователей, а снять блокировку можно через /C РазрешитьРаботуПользователей с кодом разрешения /UC.
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Администратор" /P"пароль" /C"ЗавершитьРаботуПользователей" /UC"12345"
Код разрешения /UC запомните. Пока блокировка стоит, без него в базу не войдёт никто, включая вас.
Как убрать активных пользователей через консоль кластера
Для серверной базы это основной и самый надёжный способ. Консоль «Администрирование серверов 1С Предприятия» ставится вместе с платформой и подключается к агенту сервера (порт 1540 по умолчанию).
Пошагово
- Запустите консоль. Если её нет в меню «Пуск», зарегистрируйте
radmin.dllиз папкиbinнужной версии платформы командойregsvr32от имени администратора. - Добавьте центральный сервер по имени компьютера, если он ещё не добавлен.
- Раскройте
Кластеры → Локальный кластер → Информационные базы → ваша база → Сеансы. - Выделите нужный сеанс. Можно выделить несколько с зажатым Ctrl.
- Нажмите правой кнопкой мыши и выберите «Удалить». Подтвердите.
Сеанс исчезает за несколько секунд. Если пользователь в этот момент проводил документ, транзакция откатится, данные не испортятся, но работа пропадёт.
Сеансы и соединения — не одно и то же
У базы в консоли есть ещё узел «Соединения». Сеанс — это логическая работа пользователя, она держит лицензию. Соединение — канал между клиентом и рабочим процессом.
Если после удаления сеанса база всё равно «занята», загляните в «Соединения». Бывает, что соединение Конфигуратора или 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 Server | sp_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С:Предприятия 8.3» в нерабочее время.
- В каталоге кластера (обычно
srvinfo\reg_1541) переименуйте папкиsnccntx…. Удалять сразу не нужно, переименования достаточно. - Запустите службу и проверьте список сеансов.
Файлы реестра кластера (1CV8Clst.lst и соседние) не трогайте: в них описание кластера и зарегистрированных баз.
Файловая база: процессы, открытые файлы и временные файлы
В файловом варианте нет кластера и нет кнопки «удалить сеанс» снаружи. Сеанс живёт, пока у процесса 1С открыт файл 1Cv8.1CD. Значит, задача — найти и закрыть этот процесс.
Пошагово
- Определите по списку активных пользователей имя компьютера с зависшим сеансом.
- На этом компьютере откройте Диспетчер задач и снимите процессы
1cv8.exeи1cv8c.exe. На терминальном сервере ищите их на вкладке «Пользователи» у нужной учётной записи. - Если база лежит в общей папке, а компьютер недоступен, откройте на файловом сервере оснастку «Управление компьютером → Общие папки → Открытые файлы». Найдите
1Cv8.1CD, проверьте, от какого пользователя он открыт, и закройте именно эту запись. - Снова откройте список активных пользователей. Зависший сеанс должен исчезнуть.
Закрытие открытого файла на сервере для клиента выглядит как обрыв сети. Если в этот момент шла запись, базу придётся проверять утилитой chdbfl.exe из папки bin платформы. Поэтому сначала пробуйте закрыть процесс на самом компьютере пользователя.
Временные файлы рядом с базой
Во время работы в каталоге базы может появляться временный файл 1Cv8tmp.1CD. После корректного выхода всех пользователей он исчезает. Если все процессы закрыты, открытых файлов на сервере нет, а 1Cv8tmp.1CD остался — его можно удалить.
Удаляйте только при пустом списке открытых файлов. Сам 1Cv8.1CD — это и есть ваша база, с ним никаких действий, кроме копирования, не делайте.
Кэш пользователя в %APPDATA%\1C\1cv8 к активным сеансам отношения не имеет. Его очистка помогает при глюках интерфейса, но «призрака» из списка не уберёт.
Какой способ выбрать: сравнение методов
| Способ | Когда подходит | Риски |
|---|---|---|
| Команда в форме «Активные пользователи» | клиент работает и отвечает; БСП-конфигурация | для серверной базы нужен пароль администратора кластера |
| Блокировка работы пользователей | плановое обновление, нужно выгнать всех | забыть код /UC и не попасть в базу самому |
| Консоль кластера | серверная база, один или несколько зависших сеансов | несохранённые данные пользователя теряются |
rac session terminate | скрипты, удалённый сервер, нет консоли | ошибка в UUID — завершится чужой сеанс |
| Завершение соединения в СУБД | транзакция держит блокировку, сеансов уже нет | откат транзакции, ошибка у пользователя |
Очистка snccntx | сеансы не удаляются из консоли | обрыв всех сеансов сервера |
| Снятие процесса или открытого файла | файловая база | при записи — риск повреждения, проверка chdbfl |
Двигайтесь сверху вниз: от мягкого способа к жёсткому. Переходите к следующему, только если предыдущий не сработал.
Как настроить таймауты, чтобы сеансы не зависали
Зависшие сеансы опасны не только тем, что мешают обновлению. В серверной базе каждый такой сеанс может занимать лицензию, и живой сотрудник утром не сможет войти.
Параметры информационной базы на сервере
В консоли кластера откройте свойства базы. Там есть два параметра, которые отвечают ровно за эту проблему:
- ⏸ Время засыпания пассивного сеанса — через сколько секунд сеанс без связи с клиентом переводится в спящий режим.
- ⏹ Время завершения спящего сеанса — через сколько секунд спящий сеанс завершается сам.
По умолчанию спящий сеанс живёт долго. Для бухгалтерии разумно сократить второй параметр до 1–2 часов (3600–7200 секунд). Тогда сеанс с ноутбука, который просто закрыли крышкой, к утру уберётся сам.
Регламент и привычки
- 🕗 Ночные регламентные операции (обновление, тестирование, архивирование) начинайте со скрипта на
rac, а не с ручной охоты за пользователями. - 🔌 Обмены и интеграции через COM-соединение запускайте так, чтобы скрипт сам закрывал соединение по окончании.
- 🧑💻 Попросите сотрудников выходить из 1С через меню, а не закрывать окно терминального сервера крестиком: при этом сеанс на терминале остаётся вместе с процессом 1С.
- 📶 Ноутбуки с Wi-Fi чаще дают обрывы. Для них особенно важен таймаут спящего сеанса.
Частые вопросы
Сколько лицензий занимает зависший сеанс?
rac session list --cluster=<uuid> --licenses.