Как поставить временную блокировку, если пользователь не совершает действия 5-10 мин
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Процедура ПроверитьПростойВРаботеПользователя() Экспорт
Действие = Константы.ДействиеПриПростое.Получить();
Если Действие.Пустая() Тогда
Возврат;
КонецЕсли;
Блокиратор=Обработки.Блокиратор.Создать();
ВремяПростоя = Блокиратор.ПолучитьВремяПростоя() / 1000; // в секундах
МаксВремяПростоя = Константы.ВремяПростоя.Получить();
ПревышениеОбработано = ПараметрыСеанса.ПревышениеОбработано;
Если ВремяПростоя > МаксВремяПростоя Тогда
Если Не ПревышениеОбработано Тогда
ОбработатьПревышениеВремениПростоя(Действие);
КонецЕсли;
Иначе
ПараметрыСеанса.ПревышениеОбработано = Ложь;
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьПревышениеВремениПростоя(Действие)
ПараметрыСеанса.ПревышениеОбработано=Истина;
Если Действие=Перечисления.ВидыДействийПриПростое.ЗаблокироватьСеанс1С Тогда
ЗаписьЖурналаРегистрации("Заблокирована работа пользователя", УровеньЖурналаРегистрации.Предупреждение, , , "Простой в работе");
ЗаблокироватьРаботуПользователя();
ИначеЕсли Действие=Перечисления.ВидыДействийПриПростое.ЗаблокироватьСеансWindows Тогда
//ЗапуститьПриложение("rundll32.exe user32.dll,LockWorkStation");
ИначеЕсли Действие=Перечисления.ВидыДействийПриПростое.ЗавершитьРаботу1С Тогда
ЗаписьЖурналаРегистрации("Завершение работы пользователя", УровеньЖурналаРегистрации.Предупреждение, , , "Простой в работе");
ЗавершитьРаботуСистемы(Ложь);
ИначеЕсли Действие=Перечисления.ВидыДействийПриПростое.ЗавершитьРаботуWindows Тогда
//ЗапуститьПриложение("shutdown -s");
КонецЕсли;
КонецПроцедуры
Действие = Константы.ДействиеПриПростое.Получить();
Если Действие.Пустая() Тогда
Возврат;
КонецЕсли;
Блокиратор=Обработки.Блокиратор.Создать();
ВремяПростоя = Блокиратор.ПолучитьВремяПростоя() / 1000; // в секундах
МаксВремяПростоя = Константы.ВремяПростоя.Получить();
ПревышениеОбработано = ПараметрыСеанса.ПревышениеОбработано;
Если ВремяПростоя > МаксВремяПростоя Тогда
Если Не ПревышениеОбработано Тогда
ОбработатьПревышениеВремениПростоя(Действие);
КонецЕсли;
Иначе
ПараметрыСеанса.ПревышениеОбработано = Ложь;
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьПревышениеВремениПростоя(Действие)
ПараметрыСеанса.ПревышениеОбработано=Истина;
Если Действие=Перечисления.ВидыДействийПриПростое.ЗаблокироватьСеанс1С Тогда
ЗаписьЖурналаРегистрации("Заблокирована работа пользователя", УровеньЖурналаРегистрации.Предупреждение, , , "Простой в работе");
ЗаблокироватьРаботуПользователя();
ИначеЕсли Действие=Перечисления.ВидыДействийПриПростое.ЗаблокироватьСеансWindows Тогда
//ЗапуститьПриложение("rundll32.exe user32.dll,LockWorkStation");
ИначеЕсли Действие=Перечисления.ВидыДействийПриПростое.ЗавершитьРаботу1С Тогда
ЗаписьЖурналаРегистрации("Завершение работы пользователя", УровеньЖурналаРегистрации.Предупреждение, , , "Простой в работе");
ЗавершитьРаботуСистемы(Ложь);
ИначеЕсли Действие=Перечисления.ВидыДействийПриПростое.ЗавершитьРаботуWindows Тогда
//ЗапуститьПриложение("shutdown -s");
КонецЕсли;
КонецПроцедуры
Использую вот такую функцию (вызывается обработчиком ожидания каждые 60 секунд):
Процедура ПроверитьПростойВРаботеПользователя() Экспорт
Блокиратор=Обработки.Блокиратор.Создать();
ВремяПростоя=Блокиратор.ПолучитьВремяПростоя()/1000; // в секундах
Попытка
Если ВремяПростоя >= 600 и ВремяПростоя < 660 и не ПараметрыСеанса.ПревышениеОбработано Тогда
ПараметрыСеанса.ПревышениеОбработано = Истина;
Форма = Обработки.Блокиратор.ПолучитьФорму("Форма");
ЗавершитьСеанс = Форма.ОткрытьМодально();
Если ЗавершитьСеанс Тогда
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
ПараметрыСеанса.ПревышениеОбработано = Ложь;
КонецЕсли;
Исключение
КонецПопытки;
КонецПроцедуры
ПоказатьПрикрепленные файлы:
Блокиратор.epf
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот