Зависшая сессия в 1С:Предприятие — одна из самых раздражающих проблем для администраторов и пользователей. Она блокирует доступ к базе, тормозит работу других сотрудников и может привести к потере несохранённых данных. Причины разнообразны: от банального «забыл закрыть программу» до серьёзных сбоев в работе сервера или сетевого оборудования.

В этой статье мы разберём 5 проверенных способов принудительного завершения зависших сессий — от простых (через интерфейс ) до продвинутых (команды для кластера серверов и SQL-запросы). Отдельно остановимся на нюансах для файловых и клиент-серверных баз, а также на том, как избежать повторных зависаний. Если вы не администратор, но столкнулись с проблемой — в конце есть FAQ с ответами начные вопросы пользователей.

1. Способ 1: Завершение сессии через «Активные пользователи» в 1С

Самый очевидный и безопасный метод — использовать встроенные инструменты 1С:Предприятие. Он подходит для клиент-серверных баз (в файловом варианте этот раздел недоступен).

Чтобы увидеть список активных сессий:

  1. Откройте 1С:Предприятие в режиме Конфигуратор.
  2. Перейдите в меню Администрирование → Активные пользователи.
  3. В списке найдите зависшую сессию (обратите внимание на столбцы Время начала и Последняя активность).
  4. Выделите её и нажмите Завершить сессию.

Если кнопка Завершить сессию неактивна или сессия не исчезает после нажатия:

  • 🔄 Попробуйте обновить список кнопкой Обновить — иногда сессия уже завершена, но не отображается в интерфейсе.
  • ⚡ Проверьте права вашего пользователя: для завершения чужих сессий нужны права Администратор или Администрирование сессий.
  • 🛠️ Если сессия принадлежит пользователю с монопольным доступом, сначала снимите монопольный режим в настройках базы.
⚠️ Внимание: В некоторых версиях 1С 8.3.20+ при завершении сессии через конфигуратор может появляться ошибка Не удалось завершить сессию (Сессия не найдена). Это связано с особенностями работы кластера серверов. В таком случае переходите к способу 3 или 4.

2. Способ 2: Перезапуск агента сервера 1С (для клиент-серверного варианта)

Если сессия зависла на уровне сервера, иногда помогает перезапуск агента сервера 1С (ragent). Этот метод работает для 1С:Предприятие 8.3 в клиент-серверном режиме.

Инструкция для Windows:

1. Откройте «Службы» (нажмите Win + R → введите services.msc → Enter).

2. Найдите службу с названием 1С:Предприятие 8.3. Агент сервера (или подобное, в зависимости от версии).

3. Нажмите правой кнопкой → Перезапустить.

Для Linux (если сервер 1С развёрнут на Ubuntu/Debian):

sudo systemctl restart srv1cv83

Что произойдёт после перезапуска:

  • 🔄 Все активные сессии будут разорваны, пользователям придётся заново подключаться к базе.
  • ⏳ Время простоя базы составит 10–30 секунд (зависит от нагрузки).
  • 📊 Несохранённые данные в зависших сессиях будут утеряны.
⚠️ Внимание: Перезапуск агента сервера не гарантирует очистку блокировок в SQL-базе. Если после перезапуска сессия всё равно висит, используйте способ 4 (запрос к SQL).
📊 Как часто у вас возникают зависшие сессии в 1С?
Раз в неделю или чаще
Раз в месяц
Реже чем раз в месяц
Никогда не было

3. Способ 3: Утилита rac (для кластера серверов 1С)

Утилита rac (Remote Administration Console) — мощный инструмент для управления кластером серверов . Она позволяет принудительно завершать сессии, даже если они не отображаются в конфигураторе.

Чтобы завершить сессию через rac:

  1. Откройте командную строку (cmd) от имени администратора.
  2. Перейдите в папку с утилитой rac (обычно это C:\Program Files\1cv8\8.3.x.xxx\bin).
  3. Выполните команду для просмотра списка сессий:
    rac session list --cluster=ИмяКластера

    (если имя кластера не известно, используйте rac cluster list).

  4. Найдите в списке зависшую сессию и скопируйте её ID.
  5. Завершите сессию командой:
    rac session terminate --cluster=ИмяКластера --session-id=IDСессии

Пример вывода команды rac session list:

ID сессииПользовательБаза данныхВремя началаСостояние
12345ИвановИИMainBase10:15:22Активна
12346ПетровППMainBase09:45:10Зависшая (блокировка)
12347СидоровССArchiveBase11:30:05Активна

Если команда rac session terminate не срабатывает:

  • 🔌 Убедитесь, что служба кластера серверов запущена.
  • 🛡️ Проверьте права: утилита rac требует прав администратора ОС.
  • 🔄 Попробуйте добавить флаг --force для принудительного завершения.
💡

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

4. Способ 4: Запрос к SQL-базе (для клиент-серверных баз на MS SQL)

Если сессия зависла на уровне SQL Server, её можно удалить непосредственно из базы данных. Этот метод требует доступа к Microsoft SQL Server Management Studio (SSMS) или аналогичному инструменту.

Инструкция:

  1. Подключитесь к серверу SQL с правами sysadmin.
  2. Выполните запрос для поиска блокирующих сессий:
    SELECT
    

    s.session_id,

    s.login_name,

    s.host_name,

    s.program_name,

    s.login_time,

    s.last_request_start_time,

    s.status,

    t.text AS [Query]

    FROM sys.dm_exec_sessions s

    CROSS APPLY sys.dm_exec_sql_text(s.most_recent_sql_handle) t

    WHERE s.program_name LIKE'%1C:%'

    ORDER BY s.last_request_start_time;

  3. Найдите в результатах зависшую сессию (обычно она имеет статус suspended или долгое время в last_request_start_time).
  4. Завершите её командой:
    KILL [session_id];

    (замените [session_id] на реальный номер сессии).

Что делать, если запрос KILL не срабатывает:

  • 🔄 Попробуйте выполнить KILL [session_id] WITH STATUSONLY;, чтобы узнать причину блокировки.
  • 🛠️ Если сессия блокируется другой транзакцией, найдите её по blocking_session_id в столбцах результата и завершите сначала её.
  • 📊 Для PostgreSQL используйте команду SELECT pg_terminate_backend(pid); (найти pid можно через SELECT * FROM pg_stat_activity;).
⚠️ Внимание: Не завершайте сессии с program_name, содержащим SQLAgent или BACKUP — это системные процессы, ответственные за резервное копирование.

Сделать бэкап базы|Убедиться в отсутствии критичных транзакций|Предупредить пользователей о возможном разрыве|Проверить права на выполнение KILL|Записать ID сессии перед завершением-->

5. Способ 5: Принудительное отключение пользователя в файловой базе

В файловых базах 1С нет централизованного управления сессиями, поэтому завершить зависшего пользователя сложнее. Здесь помогают два метода: перезапуск сервера или удаление файла блокировки.

Метод 1: Перезапуск сервера (если база на локальном ПК)

  • 🖥️ Если база расположена на вашем компьютере, просто перезагрузите его.
  • 🔌 Если база на сетевом ресурсе, попробуйте отключить и снова подключить сетевой диск (в Проводнике правой кнопкой → Отключить).

Метод 2: Удаление файла 1Cv8.lck (для опытных пользователей)

  1. Закройте все экземпляры на своём компьютере.
  2. Перейдите в папку с базой (обычно это C:\Users\Public\Documents\1C\1Cv8 или сетевой путь).
  3. Найдите файл с расширением .lck (например, 1Cv8.lck или ИмяБазы.lck).
  4. Удалите этот файл (может потребоваться запуск Проводника от администратора).
  5. Перезапустите .

Ограничения метода:

  • 🚫 Не работает, если файл .lck заблокирован другой сессией (например, на сервере).
  • 🔄 После удаления .lck база будет доступна для монопольного открытия, но возможны ошибки целостности.
  • 📊 В сетевых папках права на удаление .lck могут быть ограничены.
Что делать, если файл.lck не удаляется?

Если файл 1Cv8.lck заблокирован, попробуйте:

1. Использовать утилиту Unlocker (скачать с официального сайта) для принудительного удаления.

2. Перезагрузить сервер, на котором расположена база.

3. Проверьте, не открыта ли база на другом компьютере в фоновом режиме (иногда остаётся в процессах после закрытия окна).

6. Профилактика зависших сессий: как избежать проблемы в будущем

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

Для администраторов:

  • 🔧 Настройте тайм-ауты неактивности в кластере серверов 1С (параметр SessionTimeout в конфигурации ragent).
  • 📊 Регулярно обновляйте 1С:Предприятие и SQL Server до актуальных версий — в новых релизах часто исправляют баги с блокировками.
  • 🛡️ Ограничьте права пользователей на длительные транзакции (например, через настройку ролей в SQL).

Для пользователей:

  • 💾 Привыкайте сохранять документы (Ctrl+S) каждые 5–10 минут работы.
  • ⚡ Не оставляйте открытой на ночь или во время длительных перерывов.
  • 🖥️ Если работаете через RDP, корректно завершайте сессию (не закрывайте окно крестиком!).

Технические решения:

  • 🤖 Автоматизируйте мониторинг зависших сессий с помощью скриптов на PowerShell или Python (например, парсинг логов ragent).
  • 📡 Для крупных баз рассмотрите переход на клиент-серверную архитектуру — она стабильнее файловой при большом количестве пользователей.
💡

Наиболее частая причина зависших сессий — длительные транзакции (например, формирование сложных отчётов). Ограничьте время их выполнения на уровне SQL Server или через настройки кластера 1С.

FAQ: Частые вопросы о зависших сессиях 1С

Можно ли восстановить данные из зависшей сессии?

Нет, если сессия была принудительно завершена, все несохранённые изменения теряются. Единственный способ избежать потерь — регулярно сохранять документы вручную (Ctrl+S) или настроить автосохранение в конфигурации.

Почему сессия висит, хотя пользователь давно закрыл 1С?

Это может быть связано с:

  • Некорректным завершением процесса (например, через Диспетчер задач).
  • Сетевыми задержками при работе с удалённой базой.
  • Ошибками в работе SQL Server (например, незавершённые транзакции).

Проверьте процессы на сервере через Task Manager или rac.

Как узнать, какая именно сессия блокирует работу?

В клиент-серверном варианте используйте запрос к SQL:

SELECT

t1.resource_type,

t1.resource_database_id,

t1.request_mode,

t1.request_session_id,

t2.blocking_session_id

FROM sys.dm_tran_locks t1

JOIN sys.dm_os_waiting_tasks t2 ON t1.lock_owner_address = t2.resource_address;

Для файловых баз единственный способ — проверка файла 1Cv8.lck.

Что делать, если после сброса сессии база не открывается?

Возможные причины и решения:

  • Повреждение данных: Восстановите базу из резервной копии.
  • Блокировка на уровне ОС: Перезагрузите сервер или компьютер.
  • Ошибка лицензии: Проверьте работу HASP-ключа или программной лицензии.
Можно ли автоматизировать завершение зависших сессий?

Да, для этого подойдут:

  • Скрипты на PowerShell с использованием rac.
  • Задачи в SQL Server Agent, которые выполняют KILL для сессий старше определённого времени.
  • Специализированные утилиты, например, 1C:Server Administration Tool.

Пример простого скрипта для PowerShell:

$sessions = &"C:\Program Files\1cv8\8.3.x.xxx\bin\rac.exe" session list --cluster=MyCluster

$oldSessions = $sessions | Where-Object { $_ -match"Зависшая" }

foreach ($session in $oldSessions) {

$id = ($session -split'\s+')[0]

&"C:\Program Files\1cv8\8.3.x.xxx\bin\rac.exe" session terminate --cluster=MyCluster --session-id=$id --force

}