В процессе работы с 1С часто возникает необходимость ограничить доступ к сеансу, если пользователь отлучился от рабочего места на 5–10 минут. Это критично для обеспечения информационной безопасности компании. Разберем по шагам, как реализовать механизм временной блокировки или завершения работы неактивного сеанса с помощью программного кода и штатных средств платформы.
Основная идея программного решения заключается в периодическом вызове процедуры проверки времени простоя. Для этого в платформе 1С предусмотрен метод ПодключитьОбработчикОжидания. Проверку обычно запускают в модуле приложения при старте системы.
Рассмотрим порядок настройки процедуры разберем по шагам:
ЗаблокироватьРаботуПользователя() или ЗавершитьРаботуСистемы().Посмотрим на пример кода подключения обработчика в модуле приложения:
Процедура ПриНачалеРаботыСистемы()
// Подключаем проверку простоя каждые 30 секунд
ПодключитьОбработчикОжидания("ПроверитьПростойВРаботеПользователя", 30);
КонецПроцедуры
Далее разберем пример процедуры проверки простоя и вызова действия при превышении лимита времени:
Процедура ПроверитьПростойВРаботеПользователя() Экспорт
Действие = Константы.ДействиеПриПростое.Получить();
Если Действие.Пустая() Тогда
Возврат;
КонецЕсли;
// Запрашиваем время простоя через специализированный объект или обработку
Блокиратор = Обработки.Блокиратор.Создать();
ВремяПростоя = Блокиратор.ПолучитьВремяПростоя() / 1000; // перевод в секунды
МаксВремяПростоя = Константы.ВремяПростоя.Получить();
Если ВремяПростоя > МаксВремяПростоя Тогда
Если Не ПараметрыСеанса.ПревышениеОбработано Тогда
ОбработатьПревышениеВремениПростоя(Действие);
КонецЕсли;
Иначе
ПараметрыСеанса.ПревышениеОбработано = Ложь;
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьПревышениеВремениПростоя(Действие)
ПараметрыСеанса.ПревышениеОбработано = Истина;
Если Действие = Перечисления.ВидыДействийПриПростое.ЗаблокироватьСеанс1С Тогда
ЗаписьЖурналаРегистрации("Заблокирована работа пользователя", УровеньЖурналаРегистрации.Предупреждение, , , "Простой в работе");
ЗаблокироватьРаботуПользователя();
ИначеЕсли Действие = Перечисления.ВидыДействийПриПростое.ЗавершитьРаботу1С Тогда
ЗаписьЖурналаРегистрации("Завершение работы пользователя", УровеньЖурналаРегистрации.Предупреждение, , , "Простой в работе");
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
КонецПроцедуры
При использовании программных алгоритмов блокировки необходимо учитывать следующие особенности работы платформы:
ЗаблокироватьРаботуПользователя() вызывает встроенное окно блокировки 1С, для снятия которой требуется пароль. Если у пользователя в 1С пароль не задан, блокировка снимется простым нажатием кнопки «OK» или клавиши Enter.ОткрытьМодально() приведут к аварийному завершению работы. Следует использовать метод ЗаблокироватьРаботуПользователя() или асинхронный вывод форм.Проанализируем альтернативные варианты решения задачи без написания сложного кода отслеживания нажатий клавиш: