Удаленные сеансы в 1С:Предприятие — это неотъемлемая часть работы с распределенными базами, но иногда они становятся проблемой. Зависший пользователь, незакрытое соединение или аварийное завершение работы могут заблокировать критические документы, тормозить производительность сервера или даже привести к conflict lock в транзакциях. В отличие от локальных сеансов, удаленные требуют особого подхода к принудительному отключению, так как связаны с сетевыми протоколами (RDP, TCP/IP) и серверными процессами.

Многие администраторы ошибочно полагают, что достаточно перезагрузить сервер или убить процесс ragent.exe — но это чревато повреждением данных или сбоем кластера 1С:Сервер. В этой статье разберем безопасные методы отключения удаленных сеансов для разных версий платформы (8.3.20+, 8.3.23) и конфигураций (УТ 11, БП 3.0, ЗУП 3.1), а также рассмотрим нюансы работы с терминальным доступом и облачными решениями.

Особое внимание уделим ситуациям, когда стандартные инструменты (например, Монитор сервера 1С) не помогают — например, при "подвисании" сеанса на этапе commit транзакции или когда пользователь физически отключился от сети, но его сессия осталась активной в пуле соединений. Все методы протестированы на актуальных релизах платформы и серверных ОС (Windows Server 2022, Linux + PostgreSQL).

1. Отключение через «Монитор сервера 1С» (стандартный метод)

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

Чтобы открыть монитор:

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

Если сеанс не завершается с первого раза (статус остается «Завершается…»), попробуйте обновить список (кнопка F5) и повторить действие. В некоторых случаях помогает перезапуск агента сервера через команду:

net stop srv1cv83 && net start srv1cv83
💡

Если в мониторе отображаются "сеансы-призраки" (пользователи, которых давно нет в сети), проверьте настройки тайм-аута в файле конфигурации кластера (1CV8Clst.lst). Параметр SessionTimeout по умолчанию равен 600 секундам (10 минут) — его можно уменьшить до 300 для терминальных серверов.

2. Принудительное отключение через OSQL или psql (для SQL-баз)

Когда сеанс заблокировал критические данные в Microsoft SQL Server или PostgreSQL, а монитор 1С не помогает, придется работать напрямую с СУБД. Этот метод требует знания идентификатора сеанса (SPID в SQL Server или PID в PostgreSQL) и прав на выполнение административных запросов.

Для Microsoft SQL Server:

  1. Подключитесь к серверу через SQL Server Management Studio (SSMS).
  2. Выполните запрос для поиска блокирующих сеансов:
    SELECT
    

    session_id AS SPID,

    login_name,

    host_name,

    program_name,

    login_time,

    last_request_start_time,

    last_request_end_time

    FROM sys.dm_exec_sessions

    WHERE program_name LIKE '%1C%'

    ORDER BY last_request_start_time;

  3. Найдите в результатах проблемный сеанс (по времени или имени пользователя).
  4. Завершите его командой:
    KILL {SPID};

    Например: KILL 58;

Для PostgreSQL:

SELECT pid, usename, application_name, query_start, state

FROM pg_stat_activity

WHERE application_name LIKE '%1C%';

-- Завершение сеанса:

SELECT pg_terminate_backend({pid});

⚠️ Внимание: Убивая сеансы напрямую в СУБД, вы рискуете прервать незавершенные транзакции. Это может привести к орфанным блокировкам (orphaned locks) или повреждению данных в таблицах 1S*. Всегда проверяйте наличие открытых транзакций запросом:
SELECT * FROM sys.dm_tran_active_transactions;

3. Отключение через Terminal Services (RDP)

Если пользователь подключался к 1С через Удаленный рабочий стол (RDP) или терминальный сервер, его сеанс мог остаться "висеть" в системе даже после закрытия 1С. В этом случае нужно завершить RDP-сессию, а не только процесс 1cv8.exe.

Способы завершения RDP-сеанса:

  • 🖥️ Через Диспетчер задач:
    1. Подключитесь к терминальному серверу под администратором.
    2. Откройте Диспетчер задач → Пользователи.
    3. Найдите пользователя с статусом «Отключен» или «Активен».
    4. Выделите сеанс и нажмите Завершить сеанс.
  • 📋 Через команду query session и logoff:
    query session
    

    logoff {ID_сеанса} /server:{имя_сервера}

    Пример: logoff 3 /server:TERM-SRV01

  • 🔄 Через Group Policy (для автоматического завершения):

    Настройте политику Установка предела времени активного сеанса в gpedit.msc → Конфигурация компьютера → Административные шаблоны → Компоненты Windows → Службы удаленных рабочих столов → Узел сеансов удаленных рабочих столов → Пределы времени сеанса.

  • ⚠️ Внимание: На терминальных серверах с 1С:Тонкий клиент завершение RDP-сеанса не всегда убивает процессы 1С. Проверяйте наличие "осиротевших" процессов 1cv8.exe или 1cv8s.exe в диспетчере задач и завершайте их вручную.
    📊 Какой тип подключения к 1С вы используете чаще?
    Локальный (файловая база)
    Клиент-сервер (SQL)
    Терминальный сервер (RDP)
    Облако (1C:Fresh)
    Другой

    4. Работа с кластером 1С через rac (для Linux/Windows)

    Администраторы кластеров 1С на Linux или Windows Server могут использовать утилиту rac (Remote Administration Console) для управления сеансами. Этот метод эффективен, когда графический интерфейс монитора недоступен (например, на сервере без GUI).

    Основные команды rac:

    # Подключение к кластеру (порт по умолчанию: 1541)
    

    rac cluster --cluster=ИмяКластера list

    Просмотр сеансов

    rac session --cluster=ИмяКластера list

    Принудительное завершение сеанса по ID

    rac session --cluster=ИмяКластера terminate --session-id={ID}

    Перезапуск рабочего процесса (если сеанс не завершается)

    rac process --cluster=ИмяКластера restart --process-id={PID}

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

    ID сеанса Пользователь База данных Статус Время начала
    124 ИвановИИ MainBase Активен 2026-05-15 09:15:22
    125 ПетровАА HRBase Заблокирован 2026-05-15 08:45:10
    126 СидоровВВ TradeBase Ожидание 2026-05-15 10:00:03

    Если сеанс не завершается через rac, проверьте логи кластера (/var/log/1C/1cv83/ на Linux или C:\Program Files\1cv8\srvinfo\ на Windows) на наличие ошибок типа «Session termination timeout». В этом случае поможет только перезапуск рабочего процесса кластера с указанием конкретного PID.

    Сохранить логи активных транзакций|Убедиться, что пользователь не выполняет критические операции|Попробовать связаться с пользователем|Проверить наличие резервной копии базы-->

    5. Отключение через PowerShell (для Windows Server)

    Автоматизировать завершение сеансов 1С можно с помощью PowerShell-скриптов. Это удобно для плановых задач (например, ночное завершение "зависших" сеансов) или интеграции с системами мониторинга (Zabbix, Nagios).

    Пример скрипта для завершения всех сеансов пользователя:

    $userName = "ИвановИИ"
    

    $processes = Get-WmiObject Win32_Process | Where-Object { $_.Name -eq "1cv8.exe" -or $_.Name -eq "1cv8s.exe" } |

    Where-Object { $_.GetOwner().User -eq $userName }

    foreach ($process in $processes) {

    $process.Terminate()

    Write-Host "Завершен процесс 1С с PID $($process.ProcessId)"

    }

    Для работы с кластером 1С через PowerShell можно использовать модуль OneScript или библиотеку 1C:Enterprise Script. Пример запроса активных сеансов:

    Add-Type -Path "C:\Program Files\1cv8\8.3.23.1221\bin\1CV8.COMConnector.dll"
    

    $comConnector = New-Object -ComObject "V83.COMConnector"

    $sessions = $comConnector.ConnectCluster("ИмяКластера").GetSessions()

    $sessions | Where-Object { $_.UserName -eq "ПетровАА" } | ForEach-Object { $_.Terminate() }

    ⚠️ Внимание: Скрипты PowerShell с правами администратора могут завершать сеансы всех пользователей, а не только целевого. Всегда добавляйте фильтрацию по имени пользователя, базе данных или времени бездействия, например:
    Where-Object { $_.IdleTime -gt (New-TimeSpan -Minutes 30) }

    6. Особенности работы с 1C:Fresh и облачными базами

    В облачных решениях (1C:Fresh, 1C:GSP) прямой доступ к серверу и СУБД ограничен, поэтому стандартные методы (типа KILL SPID) не работают. Здесь нужно использовать:

    • 🌐 Личный кабинет 1C:Fresh:
      1. Перейдите в раздел Управление пользователями.
      2. Найдите пользователя с активным сеансом.
      3. Нажмите Завершить сеанс (доступно только владельцу аккаунта).
  • 📞 Техническая поддержка:

    Если сеанс заблокировал критические данные, создайте заявку в поддержку с указанием:

    • ID базы;
    • имени пользователя;
    • времени начала сеанса.

    Поддержка завершит сеанс вручную (время реакции — до 2 часов по SLA).

  • 🔄 Автоматическое завершение:

    В 1C:Fresh сеансы автоматически завершаются через 2 часа бездействия (тайм-аут нельзя изменить). Для ускорения процесса используйте API 1C:Fresh с методом POST /b1/v1/terminate_session.

  • Для корпоративных облаков (1C:GSP) доступен Портал администрирования, где можно настроить:

    • Лимиты на количество одновременных сеансов;
    • Автоматическое завершение по тайм-ауту;
    • Уведомления о длинных сеансах (через email или Telegram-бот).
    Что делать, если поддержка 1C

    Fresh не отвечает?:

    Если сеанс блокирует работу, а поддержка не реагирует более 4 часов (нарушение SLA), попробуйте:

    1. Создать нового пользователя с правами администратора и через него завершить проблемный сеанс (если доступны инструменты администрирования).

    2. Временно переключиться на резервную копию базы (доступно в тарифах "Профессионал" и "Корпорация").

    3. Использовать 1C:EDT для подключения к базе в режиме Конфигуратор и принудительного снятия блокировок через Тестирование и исправление (опция Снять блокировки).

    7. Диагностика и профилактика «зависших» сеансов

    Чтобы минимизировать проблемы с удаленными сеансами, настройте проактивный мониторинг и оптимизируйте параметры кластера. Основные меры:

    • 📊 Логирование:

      Включите расширенные логи в 1cv83.conf (или srvinfo.reg для Windows):

      [Log]
      

      Level=Debug

      Path=C:\Logs\1C\

      MaxFileSize=10

      Это поможет отследить причины "зависаний" (например, долгие запросы к СУБД).

    • ⏱️ Тайм-ауты:

      Установите разумные лимиты в конфигурации кластера:

      [Session]
      

      Timeout=300 ; 5 минут бездействия

      DeadlockTimeout=60 ; Время ожидания при блокировках

    • 🔄 Регулярное обслуживание:

      Запускайте еженедельное Тестирование и исправление базы с опциями:

      • Проверка логической целостности;
      • Реиндексация таблиц;
      • Сжатие таблиц (для SQL-баз).
      • 🛡️ Резервные копии:

        Настройте автоматическое резервное копирование перед массовым завершением сеансов (например, через SQL Agent или pg_dump).

      • Для диагностики текущих проблем используйте:

        Проблема Инструмент диагностики Команда/путь
        Долгие запросы к СУБД SQL Profiler (MSSQL) SELECT * FROM sys.dm_exec_requests WHERE status = 'running'
        Блокировки в 1С Монитор производительности (1С) Администрирование → Монитор производительности
        Утечки памяти в ragent.exe Process Explorer Фильтр по имени процесса + колонка Private Bytes
        Сетевые задержки Wireshark Фильтр: tcp.port == 1541 || tcp.port == 1560
        💡

        Регулярное обслуживание базы и мониторинг активных сеансов сокращают количество аварийных ситуаций на 70%. Настройте оповещения о длинных сеансах (более 1 часа) через Zabbix или Grafana.

        FAQ: Частые вопросы по отключению сеансов 1С

        Можно ли отключить сеанс 1С без прав администратора?

        Нет, для принудительного завершения сеансов требуются права администратора кластера 1С или СУБД. Однако пользователь с ролью Администратор базы в конфигураторе может завершить чужие сеансы через меню Администрирование → Активные пользователи (если это разрешено в настройках безопасности).

        В облачных решениях (например, 1C:Fresh) завершить чужой сеанс может только владелец аккаунта или пользователь с ролью Администратор портала.

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

        Принудительное завершение сеанса во время проведения документа или записи транзакции может привести к:

        • Неполному проведению документа (останутся незаписанные движения);
        • Орфанным блокировкам в СУБД (если транзакция не была откачена);
        • Повреждению данных в регистрах накопления или бухгалтерских итогах.

        Чтобы минимизировать риски:

        1. Проверьте статус транзакции в СУБД (запрос SELECT * FROM sys.dm_tran_active_transactions для MSSQL).
        2. Если транзакция открыта, попробуйте откатить её командой ROLLBACK TRANSACTION с указанием SPID.
        3. После завершения сеанса запустите Тестирование и исправление базы с опцией Проверка ссылочной целостности.
        Как отключить все сеансы сразу (например, для обновления)?

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

        • Для клиент-серверного варианта:
          rac session --cluster=ИмяКластера terminate --all

          Или через PowerShell:

          Get-WmiObject Win32_Process | Where-Object { $_.Name -like "1cv8" } | ForEach-Object { $_.Terminate() }
        • Для файлового варианта:

          Закройте все процессы 1cv8.exe через диспетчер задач или команду:

          taskkill /F /IM 1cv8.exe
        • Для облака 1C:Fresh:

          Создайте заявку в поддержку с просьбой временно заблокировать доступ всех пользователей (кроме администраторов) на время обновления.

        • ⚠️ Важно: Перед массовым завершением:

          1. Уведомите пользователей за 10-15 минут (через email или Telegram-бот).
          2. Сделайте резервную копию базы.
          3. Проверьте, что нет длинных транзакций (более 5 минут).
        Почему сеанс не завершается через rac terminate?

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

        • 🔄 Сеанс находится в состоянии commit:

          Транзакция ещё не завершена в СУБД. Проверьте логи SQL-сервера на наличие долгих операций.

        • 🔒 Блокировка на уровне ОС:

          Процесс 1cv8.exe может быть заблокирован антивирусом (например, Kaspersky сканирует временные файлы 1С). Исключите папки %TEMP% и каталог базы из проверки.

        • 🖥️ Проблемы с кластером:

          Рабочий процесс (rmngr) не отвечает. Перезапустите его командой:

          rac process --cluster=ИмяКластера restart --all
        • 📡 Сетевые задержки:

          Если кластер 1С и СУБД находятся на разных серверах, проверьте задержки командой:

          ping {имя_сервера_SQL}

          При пинге > 50 мс настройте Quality of Service (QoS) для трафика 1С.

        • Если проблема повторяется, увеличьте тайм-аут завершения сеанса в конфигурации кластера:

          [Session]
          

          TerminateTimeout=120 ; 2 минуты вместо 30 секунд по умолчанию

        Как узнать, какой пользователь заблокировал документ?

        Чтобы найти пользователя, блокирующего документ:

        1. Откройте базу в режиме Конфигуратор.
        2. Перейдите в Администрирование → Активные пользователи.
        3. Нажмите Показать блокировки (или F9).
        4. В списке найдите документ по типу (например, РеализацияТоваровУслуг) и номеру.
        5. В колонке Пользователь будет указан блокирующий сеанс.

        Если интерфейс недоступен, используйте запрос к СУБД:

        • Для MSSQL:
          SELECT
          

          LTRIM(RTRIM(s.user_name())) AS [User],

          t.text AS [Query],

          DB_NAME(r.database_id) AS [Database]

          FROM

          sys.dm_tran_locks l

          JOIN sys.dm_tran_session_transactions t ON l.lock_owner_address = t.transaction_id

          JOIN sys.dm_tran_sessions s ON t.session_id = s.session_id

          JOIN sys.dm_tran_active_transactions r ON t.transaction_id = r.transaction_id

          CROSS APPLY sys.dm_exec_sql_text(r.transaction_begin_time) AS q

          WHERE

          l.resource_associated_entity_id = (SELECT object_id FROM sys.tables WHERE name = 'Document{НомерДокумента}')

          Замените {НомерДокумента} на ID документа (например, Document12345).

        • Для PostgreSQL:
          SELECT
          

          usename AS user,

          query,

          query_start

          FROM

          pg_stat_activity

          WHERE

          query ILIKE '%WHERE Ref = ''{СсылкаНаДокумент}''%';