Как автоматически отключать неактивных (АФК) пользователей в 1С:Предприятие?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Каждый системный администратор и программист 1С рано или поздно сталкивается с проблемой нехватки клиентских лицензий. Очень часто это происходит из-за того, что пользователи, уходя на обед, совещание или даже домой в конце рабочего дня, оставляют программу запущенной. Такие "зависшие" или "спящие" сеансы продолжают занимать драгоценные лицензии, блокируя работу других сотрудников.

Попытки решить эту проблему стандартными настройками в консоли администрирования кластера 1С (через параметры "Время засыпания пассивного сеанса" и "Время завершения спящего сеанса") часто не приносят желаемого результата. Происходит это из-за так называемой ложной активности: фоновые процессы конфигурации, автоматическое обновление динамических списков, регламентные задания или различные обработчики ожидания периодически отправляют незаметные запросы на сервер. Кластер расценивает эти запросы как активность пользователя и не отправляет сеанс "спать".

В этой статье мы подробно и по шагам разберем, как решить проблему автоматического отключения АФК (неактивных) пользователей в различных версиях платформы 1С:Предприятие.

---

1. Революционное стандартное решение в платформе 1С (начиная с версии 8.3.26)

Фирма «1С» детально проанализировала жалобы администраторов на "незасыпающие" сеансы и в версии платформы 8.3.26 представила кардинально новый штатный механизм защиты от простоя. Главное его отличие в том, что теперь система отслеживает не сетевую активность программы, а реальное физическое поведение пользователя за компьютером.

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

Рассмотрим подробнее, как настроить данный механизм:

  1. Откроем информационную базу в режиме Конфигуратор (или зайдем в режиме «1С:Предприятие» под правами администратора в раздел настроек параметров информационной базы).
  2. Перейдем в диалог настройки параметров информационной базы. Там появились два ключевых поля:
    • Время завершения сеанса при бездействии (указывается в секундах) — период, по истечении которого сеанс пользователя будет принудительно закрыт.
    • Время предупреждения о завершении сеанса при бездействии (указывается в секундах) — время, за которое на экране пользователя появится предупреждающее окно с таймером обратного отсчета.
  3. Зададим, например, время бездействия равным 1800 секунд (30 минут), а время предупреждения — 120 секунд (2 минуты).

Проанализируем, как это работает на практике. Если сотрудник не совершает никаких действий в течение 28 минут, на его экране поверх всех окон 1С всплывает предупреждающее диалоговое окно с таймером обратного отсчета на 2 минуты. Если пользователь вернулся за рабочий стол и нажал кнопку "Продолжить работу" (или просто пошевелил мышью/нажал клавишу), счетчик сбрасывается, предупреждение исчезает, и работа продолжается в штатном режиме. Если же предупреждение игнорируется, по истечении 2 минут программа автоматически закрывается без сохранения незаписанных данных, мгновенно высвобождая лицензию на сервере.

---

2. Автоматическое завершение собственных сеансов при входе (начиная с версии 8.3.24)

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

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

При попытке авторизации пользователя система анализирует текущие активные сеансы под этой же учетной записью. Если обнаруживается запущенный ранее сеанс, который мешает новому входу (например, из-за лимита доступных лицензий), программа выводит интерактивное диалоговое окно. В нем пользователю предлагается принудительно завершить свой предыдущий сеанс на другом устройстве. Это позволяет обойтись без звонков системному администратору и оперативно освободить занятую лицензию.

---

3. Решения для устаревших версий платформ (до версии 8.3.26)

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

Метод А. Программный контроль активности через Windows API

Этот способ основан на использовании возможностей операционной системы Windows для отслеживания времени последнего ввода. Мы можем использовать системную функцию GetLastInputInfo из библиотеки user32.dll.

Разберем алгоритм реализации данного метода на встроенном языке 1С:

Во-первых, нам понадобится внешняя компонента или скрипт, умеющий вызывать функции Windows API. Также можно использовать встроенный в современные операционные системы PowerShell. Рассмотрим схему с использованием обработчика ожидания.

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


Процедура ПриНачалеРаботыСистемы()
    // Подключаем обработчик, который будет срабатывать каждые 60 секунд
    ПодключитьОбработчикОжидания("ПроверитьАктивностьПользователя", 60);
КонецПроцедуры

Далее опишем саму процедуру проверки активности. Идея заключается в том, чтобы сравнить текущее время с временем последнего физического действия пользователя в ОС. Если это время превышает установленный лимит (например, 20 минут), мы принудительно закрываем программу:


Процедура ПроверитьАктивностьПользователя() Экспорт
    
    // Получаем время простоя в секундах через внешнюю компоненту или системную утилиту
    ВремяБездействияСекунд = ПолучитьВремяБездействияОС(); 
    
    ПредельноеВремяПростоя = 1200; // 20 минут
    
    Если ВремяБездействияСекунд > ПредельноеВремяПростоя Тогда
        ЗаписатьВЖурналРегистрации("Сеанс завершен автоматически по причине неактивности пользователя.");
        // Закрываем приложение без вывода предупреждающих диалогов, чтобы сеанс гарантированно завершился
        ПрекратитьРаботуСистемы(Ложь);
    КонецЕсли;
    
КонецПроцедуры

Этот метод полностью решает проблему ложной сетевой активности 1С, так как операционная система Windows четко знает, когда пользователь в последний раз прикасался к клавиатуре или мыши.

Метод Б. Настройка таймаутов на уровне терминального сервера (RDP)

Если ваши пользователи работают с 1С в терминальном режиме через удаленные рабочие столы (RDP/RDS), самым простым и надежным решением является администрирование сессий на уровне самой ОС Windows Server. Это позволяет освобождать лицензии без изменения кода конфигурации 1С.

Выполним настройку групповых политик (GPO) терминального сервера по шагам:

  1. Откроем редактор групповых политик или диспетчер служб удаленных рабочих столов на сервере.
  2. Перейдем по пути: Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Ограничение сеансов по времени.
  3. Найдем и активируем политику "Задать предел времени для активных, но бездействующих сеансов служб удаленных рабочих столов" (Idle session limit). Установим значение, например, в 30 минут.
  4. Найдем и настроим политику "Завершать сеанс при достижении предела времени" или зададим лимит для отключенных сеансов (End a disconnected session) в 5-10 минут.

Как это работает? Если пользователь не проявляет активности в RDP-сессии в течение 30 минут, сервер переводит его сессию в состояние "Отключен" (Disconnected). Спустя еще 5 минут терминальный сервер принудительно завершает (Kill) эту сессию. При этом процесс 1cv8.exe закрывается операционной системой, что приводит к автоматическому уничтожению сеанса на сервере 1С и мгновенному освобождению клиентской лицензии.

Метод В. Использование PowerShell-скриптов и утилиты RAC

Для администраторов клиент-серверных баз данных отличным инструментом является автоматизация опроса кластера через консольную утилиту rac. Мы можем написать PowerShell-скрипт, который будет запускаться по расписанию (например, каждые 15 минут) на сервере приложений 1С.

Логика работы такого сценария выглядит следующим образом:

  1. Скрипт подключается к серверу администрирования 1С (RAS) с помощью утилиты rac.
  2. Запрашивается список всех активных сеансов конкретной информационной базы.
  3. Для каждого сеанса анализируются параметры: время последнего обращения к СУБД, объем переданных данных и время начала сеанса.
  4. Если сеанс зарегистрирован как активный, но время его последнего физического обращения к базе данных превышает 40-50 минут (что указывает на отсутствие реальной работы), скрипт отправляет команду на принудительное удаление сеанса:

# Пример команды PowerShell для принудительного удаления сеанса по его ID
rac session --cluster=<Идентификатор_Кластера> terminate --session=<Идентификатор_Сеанса>

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

---

4. Использование Библиотеки Стандартных Подсистем (БСП)

Если вы работаете в любой типовой конфигурации 1С (такой как "Бухгалтерия предприятия", "Управление торговлей" или "ERP Управление предприятием"), в вашем распоряжении уже есть готовый штатный инструмент для принудительного завершения сеансов — механизм блокировки соединений.

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

Рассмотрим по шагам, как запустить блокировку:

  1. Перейдем в раздел Администрирование -> Обслуживание -> Блокировка работы пользователей.
  2. Установим галку "Запланировать блокировку".
  3. Укажем текст сообщения для пользователей (например: "Внимание! База данных будет закрыта для проведения планового обслуживания через 15 минут. Пожалуйста, сохраните свою работу.").
  4. Установим время начала действия блокировки и время окончания.
  5. Нажмем кнопку "Установить блокировку".

Под капотом БСП отрабатывает следующий сценарий: всем пользователям рассылаются предупреждающие сообщения. Встроенный обработчик ожидания на клиенте анализирует параметры блокировки и по наступлении указанного времени корректно завершает работу приложения с сохранением открытых форм (если это предусмотрено настройками).

---

Сравнение методов завершения неактивных сеансов

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

Проанализировав особенности вашей ИТ-инфраструктуры, выберите один из предложенных вариантов. Переход на новые версии платформы 1С:Предприятие (начиная с 8.3.26) является наиболее предпочтительным шагом, который раз и навсегда решит проблему "зависших" АФК-пользователей и сэкономит бюджет на покупку дополнительных клиентских лицензий.

← На главную