Как поставить временную блокировку, если пользователь не совершает действия 5-10 мин

1. ranis888 102 11.04.18 08:16 Сейчас в теме +1 $m
Как поставить временную блокировку, если пользователь не совершает действия 5-10 мин
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. spacecraft 11.04.18 08:37 Сейчас в теме
(1) "такая" блокировка более логична средствами ОС.
4. ranis888 102 11.04.18 08:52 Сейчас в теме
2. SlavaKron 11.04.18 08:31 Сейчас в теме
ЗаблокироватьРаботуПользователя() через ПодключитьОбработчикОжидания() в модуле приложения
6. ranis888 102 11.04.18 09:31 Сейчас в теме
(2)
ЗаблокироватьРаботуПользователя()
не работает, или я что-то не то делаю
5. ranis888 102 11.04.18 08:52 Сейчас в теме
Процедура ПроверитьПростойВРаботеПользователя() Экспорт
Действие = Константы.ДействиеПриПростое.Получить();
Если Действие.Пустая() Тогда
Возврат;
КонецЕсли;
Блокиратор=Обработки.Блокиратор.Создать();
ВремяПростоя = Блокиратор.ПолучитьВремяПростоя() / 1000; // в секундах

МаксВремяПростоя = Константы.ВремяПростоя.Получить();
ПревышениеОбработано = ПараметрыСеанса.ПревышениеОбработано;
Если ВремяПростоя > МаксВремяПростоя Тогда
Если Не ПревышениеОбработано Тогда
ОбработатьПревышениеВремениПростоя(Действие);
КонецЕсли;
Иначе
ПараметрыСеанса.ПревышениеОбработано = Ложь;
КонецЕсли;
КонецПроцедуры

Процедура ОбработатьПревышениеВремениПростоя(Действие)
ПараметрыСеанса.ПревышениеОбработано=Истина;
Если Действие=Перечисления.ВидыДействийПриПростое.ЗаблокироватьСеанс1С Тогда
ЗаписьЖурналаРегистрации("Заблокирована работа пользователя", УровеньЖурналаРегистрации.Предупреждение, , , "Простой в работе");
ЗаблокироватьРаботуПользователя();
ИначеЕсли Действие=Перечисления.ВидыДействийПриПростое.ЗаблокироватьСеансWindows Тогда
//ЗапуститьПриложение("rundll32.exe user32.dll,LockWorkStation");

ИначеЕсли Действие=Перечисления.ВидыДействийПриПростое.ЗавершитьРаботу1С Тогда
ЗаписьЖурналаРегистрации("Завершение работы пользователя", УровеньЖурналаРегистрации.Предупреждение, , , "Простой в работе");
ЗавершитьРаботуСистемы(Ложь);
ИначеЕсли Действие=Перечисления.ВидыДействийПриПростое.ЗавершитьРаботуWindows Тогда
//ЗапуститьПриложение("shutdown -s");

КонецЕсли;
КонецПроцедуры
7. madonov 262 11.04.18 09:41 Сейчас в теме
Использую вот такую функцию (вызывается обработчиком ожидания каждые 60 секунд):

Процедура ПроверитьПростойВРаботеПользователя() Экспорт

	Блокиратор=Обработки.Блокиратор.Создать();
	ВремяПростоя=Блокиратор.ПолучитьВремяПростоя()/1000;	// в секундах
	
Попытка	
		
	Если ВремяПростоя >= 600 и ВремяПростоя < 660 и не ПараметрыСеанса.ПревышениеОбработано Тогда
		ПараметрыСеанса.ПревышениеОбработано = Истина;
		Форма = Обработки.Блокиратор.ПолучитьФорму("Форма");
		ЗавершитьСеанс = Форма.ОткрытьМодально();
		
		Если ЗавершитьСеанс Тогда 
			 ЗавершитьРаботуСистемы(Ложь);			 
		КонецЕсли;
		ПараметрыСеанса.ПревышениеОбработано = Ложь;
	КонецЕсли;

Исключение
КонецПопытки;
	
КонецПроцедуры
Показать
Прикрепленные файлы:
Блокиратор.epf
Aleksandr_Kuzmin_v; olegmedvedev; +2 Ответить
8. ranis888 102 11.04.18 09:45 Сейчас в теме
(7) Эту процедуру куда вставить?
9. madonov 262 11.04.18 09:48 Сейчас в теме
В модуль обычного приложения, например. Или в какой-нибудь глобальный общий модуль.

А в модуль обычного приложения в "ПриНачалеРаботыСистемы" добавить:
ПодключитьОбработчикОжидания("ПроверитьПростойВРаботеПользователя",30);
10. ranis888 102 11.04.18 09:51 Сейчас в теме
(9) В Л.С ответь пожалуйста
11. ranis888 102 11.04.18 10:11 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот