Как автоматически завершить сеанс пользователя 1С при длительном бездействии?

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

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

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

В современных типовых конфигурациях (таких как Бухгалтерия предприятия 3.0, Управление торговлей 11 или ERP) уже реализован готовый функционал для контроля бездействия. Это наиболее безопасный и рекомендуемый способ, так как он корректно завершает работу приложения на уровне программного кода. Проанализируем, как это работает:

  1. Перейдем в раздел Администрирование — Обслуживание.
  2. Найдем пункт Сеансы пользователей.
  3. Включим настройку «Завершать сеансы при бездействии» и установим требуемое время (например, 1200 секунд или 20 минут).

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

Настройка завершения спящих сеансов в консоли кластера

Важно различать «активный» и «спящий» сеансы. Сеанс переходит в статус Спящий только в том случае, если физическая связь между клиентом и сервером была разорвана (например, при переходе компьютера в режим сна или обрыве Wi-Fi), но сервер еще хранит данные о сеансе. Разберем, как настроить время жизни таких сеансов:

  1. Откроем Консоль администрирования кластеров 1С:Предприятия.
  2. Перейдем в свойства нужной информационной базы.
  3. Найдем параметр Время завершения спящего сеанса. По умолчанию там может стоять 86 400 секунд (24 часа).
  4. Установим меньшее значение, например, 3600 (1 час).

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

Использование параметра InactivityTimeout в файле conf.cfg

Существует возможность настроить платформу на автоматическое закрытие через конфигурационный файл conf.cfg, расположенный в папке bin/conf установленной платформы. Рассмотрим этот метод. В файл можно добавить параметр InactivityTimeout, который определяет время бездействия в секундах, после которого клиентское приложение должно закрыться.

Пример записи в файле:

InactivityTimeout=3600

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

Контроль активности через PowerShell-скрипт

Если нам необходимо жестко контролировать активность пользователя на уровне операционной системы, можно воспользоваться скриптом, который проверяет время последнего ввода данных (движение мыши или нажатие клавиш). Проанализируем пример скрипта, который можно адаптировать для завершения процесса 1cv8.exe или 1cv8c.exe:


Add-Type @'
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace PInvoke.Win32 {
    public static class UserInput {
        [DllImport("user32.dll", SetLastError=false)]
        private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
        [StructLayout(LayoutKind.Sequential)]
        private struct LASTINPUTINFO {
            public uint cbSize;
            public int dwTime;
        }
        public static DateTime LastInput {
            get {
                DateTime bootTime = DateTime.UtcNow.AddMilliseconds(-Environment.TickCount);
                DateTime lastInput = bootTime.AddMilliseconds(LastInputTicks);
                return lastInput;
            }
        }
        public static TimeSpan IdleTime {
            get {
                return DateTime.UtcNow.Subtract(LastInput);
            }
        }
        public static int LastInputTicks {
            get {
                LASTINPUTINFO lii = new LASTINPUTINFO();
                lii.cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO));
                GetLastInputInfo(ref lii);
                return lii.dwTime;
            }
        }
    }
}
'@
# Если пользователь бездействует более 30 минут
if ([PInvoke.Win32.UserInput]::IdleTime.TotalMinutes -ge 30) {
    # Завершаем процессы 1С
    Get-Process | Where-Object {$_.Name -like "1cv8*"} | Stop-Process -Force
}

Такой скрипт можно поместить в Планировщик задач Windows и настроить его выполнение каждые 10-15 минут. Это гарантированно освободит лицензии, однако стоит помнить, что принудительное завершение процесса может привести к потере несохраненных данных пользователя.

Настройка ограничений на терминальном сервере (RDP)

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

  1. Откроем редактор групповых политик или настройки сеансов на сервере.
  2. Найдем параметр Лимит активного сеанса при бездействии (Idle session limit).
  3. Установим желаемое время (например, 1 час).
  4. Укажем действие: Завершить сеанс.

При достижении лимита операционная система сама закроет все приложения пользователя и выполнит выход из системы (Logoff), что автоматически освободит все занятые лицензии 1С.

Программная реализация в самописных конфигурациях

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

  1. В модуле управляемого приложения используем метод ПодключитьОбработчикОжидания.
  2. При каждом интерактивном действии (например, в формах) обновляем глобальную переменную ВремяПоследнейАктивности.
  3. Раз в несколько минут обработчик ожидания будет сравнивать ТекущаяДата() с переменной ВремяПоследнейАктивности.
  4. Если разница превышает заданный порог, вызываем метод ЗавершитьРаботуСистемы(Ложь).

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

← На главную