30.05.2008, 13:41
общий
это ответ
Здравствуйте, Барилов Д.!
Вариантов много.
Расскажу как сам сделал.
1.Завел Константу "Отключить" Число 5
2.Обработка которая включает/отключает режим отключения пользователей. Доступна только админу.
Там на форме поле ввода "Пауза" Число 3 - где вводится пауза в минутах до выключения.
и 2 кнопки ВКЛ и ВЫКЛ - включить/выключить таймер.
После включения В течение заданного интервала минут система выдает каждую минуту предупреждение, что осталось столько-то минут и когда время иссякнет выключает комп.
Процедуры висящие на кнопках ВКЛ и ВЫКЛ (Вкл() и Откл()) в приложении
В процедуре ПриНачалеРаботыСистемы()
Процедура ПриНачалеРаботыСистемы()
...
ОбработкаОжидания("ПоказВремени",60);
...
Запускаем раз в минуту обработку "ПоказВремени" .
Сама обработка в приложении
Она проверяет раз в минуту состояние константы "Отключить". и если там число отличное от нуля, сравнивает текущее время и время в константе.
После того как всех отключит и вы зайдете монопольно не забудьте в обработке нажать кнопку ВЫКЛ иначе она Вас через минуту тоже отключит.
Программа срабатывает не всегда.
1) если пользователь открыл модальное окно, то программно его не закрыть
2) если пока идет отсчет паузы кто-то зашел и начинает работать, то их тоже не выгоняет. Вероятно, что у них Константа.Отключить=0 и не обрабатывается.
Ну это только идея - доработайте под свои нужды
Приложение:
Процедура Вкл() Перем _Ч,_М,_С; Если Пауза>0 Тогда ТекущееВремя(_Ч,_М,_С); Константа.Отключить=_Ч*3600+(_М+пауза)*60+_С; Предупреждение("Время пошло!!! "+РазделительСтрок +"Через: "+Строка(пауза)+" минут выключим! "+ИмяПользователя()+": Не забудьте потом вручную отключить!",10); КонецЕсли;КонецПроцедуры //Вкл//_____________________________________________________________________________Процедура Откл() Константа.Отключить=0; пауза=0;КонецПроцедуры //Откл//проц ПоказВремени должна быть в глобальном модуле//_____________________________________________________________________________Процедура ПоказВремени() Перем __Чччч; Перем __Мммм; Перем _Сек; ТекущееВремя(__Чччч,__Мммм,_Сек); Состояние("Текущее время: "+Формат(__Чччч,"Ч(0)2")+":"+Формат(__Мммм,"Ч(0)2")); Если Константа.Отключить>0 Тогда Осталось=Константа.Отключить-(__Чччч*3600)-(__Мммм*60)-_Сек; Если Осталось<=0 Тогда ЗавершитьРаботуСистемы(1); КонецЕсли; Если Осталось>0 Тогда Предупреждение("Внимание!!! Система завершит работу через "+Строка(Цел(Осталось/60))+" Минут "+Строка(Цел(Осталось%60))+" Секунд ",10); КонецЕсли; КонецЕсли;КонецПроцедуры //ПоказВремени//_____________________________________________________________________________