В процессе эксплуатации систем на базе 1С:Предприятие часто возникает задача обеспечения безопасности данных, когда компьютер пользователя находится в общедоступном месте (проходные зоны, склады, торговые залы). Если пользователь забыл заблокировать сеанс, уходя от рабочего места, возникает риск несанкционированного доступа. В рамках этой статьи мы подробно разберем, можно ли реализовать такую блокировку штатными средствами, как определить реальное бездействие и какие программные методы для этого существуют.
Прежде всего, проанализируем ситуацию с точки зрения платформы. Как справедливо отмечено в обсуждении, в 1С штатно отсутствует механизм отслеживания активности мыши или клавиатуры на уровне событий операционной системы. Для платформы «бездействие» — это просто отсутствие вызовов к серверу. Однако пользователь может долго читать сложный отчет, не совершая кликов, и система ошибочно посчитает это простоем.
Рассмотрим основные способы реализации задачи, начиная от простых встроенных механизмов и заканчивая профессиональными решениями с использованием системных функций.
Простейший программный путь — это использование метода ПодключитьОбработчикОжидания. Разберем по шагам, как это работает. Мы можем назначить процедуру, которая будет запускаться через определенный интервал времени (например, каждые 60 секунд) и проверять необходимость блокировки.
Для реализации индивидуального подхода мы можем добавить в справочник Пользователи дополнительный реквизит (например, ТаймаутБлокировки), где для каждого сотрудника будет указано свое время. Если реквизит не заполнен — блокировка не применяется.
Пример кода в модуле управляемого приложения:
Процедура ПриНачалеРаботыСистемы()
// Получаем настройки текущего пользователя
Таймаут = ПолучитьТаймаутТекущегоПользователя();
Если Таймаут > 0 Тогда
// Подключаем процедуру проверки
ПодключитьОбработчикОжидания("ПроверитьНеобходимостьБлокировки", Таймаут, Ложь);
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьНеобходимостьБлокировки() Экспорт
// Вызываем форму блокировки
ЗаблокироватьРаботуПользователя();
КонецПроцедуры
Важный нюанс: как отмечают технические специалисты, метод ПодключитьОбработчикОжидания не следует использовать как высокоточный таймер. Также помните, что этот метод не работает при открытых модальных окнах. Если у пользователя открыто окно вопроса «Записать изменения?», таймер остановится.
Чтобы программа не блокировалась, пока пользователь просто читает экран, нам нужно научить 1С «видеть» активность в операционной системе. Для этого проанализируем использование библиотеки user32.dll и функции GetLastInputInfo.
Этот метод позволяет получить время в миллисекундах, прошедшее с момента последнего нажатия любой клавиши или движения мыши в рамках всей ОС. Рассмотрим алгоритм реализации:
GetLastInputInfo.Это наиболее надежный способ, так как он учитывает реальную физическую активность человека за компьютером, а не только обращения к базе данных.
Если ваша конфигурация построена на базе БСП (например, УТ 11, ERP 2, БП 3.0), мы можем задействовать существующие механизмы. В БСП есть подсистема «Завершение работы пользователей», которую можно адаптировать.
Выясним причину, по которой штатная блокировка БСП чаще используется глобально. Обычно она предназначена для административного завершения сеансов перед обновлением. Однако, используя программный интерфейс СоединенияИСеансы.ЗаблокироватьРаботуПользователя(), можно вызвать специальное окно-заставку. Преимущество этого метода в том, что интерфейс программы полностью перекрывается, и для продолжения работы потребуется ввести пароль пользователя 1С.
Зачастую задачу блокировки эффективнее решать на уровне операционной системы или терминального сервера (RDP). Проанализируем, почему это может быть лучше:
Рассмотрим преимущество системного подхода: он освобождает лицензию 1С (если настроено завершение сеанса) и гарантирует защиту не только окна 1С, но и всех остальных открытых документов на рабочем столе.
Подводя итог, выберем оптимальный путь в зависимости от ваших компетенций и требований:
ПодключитьОбработчикОжидания и метод ЗаблокироватьРаботуПользователя. Это закроет интерфейс 1С, но не защитит другие программы.Помните, что любая автоматическая блокировка может раздражать пользователей, если интервал слишком короткий (например, 1 минута). Рекомендуем предварительно протестировать выбранный метод на ограниченной группе сотрудников.