Выкладываю сюда..
Обработка виключения - завенршения работи
установка
1)
в глобальному модулю на самом верху вчтавляем
Перем имя_файла_с_акт_польз Экспорт;
Перем имя_файла_с_Викл_польз Экспорт;
Перем ТекущееКоличествоОбращений Экспорт;
//*****приберайм после себя в файлах
Процедура ЗавершенияРаботи_РОМ(режимВихода)
Если режимВихода=2 Тогда
файл_Т = СоздатьОбъект("Текст");
файл_Т.Открыть(имя_файла_с_акт_польз);
Если файл_Т.КоличествоСтрок() <>0 Тогда
Для квоСтрок=1 По файл_Т.КоличествоСтрок() Цикл
пользовСфайла = СокрЛП(файл_Т.ПолучитьСтроку(квоСтрок));
Если пользовСфайла <> ИмяПользователя() Тогда
квоСтрок=квоСтрок+1;
Продолжить;
КонецЕсли;
файл_Т.УдалитьСтроку(квоСтрок);
КонецЦикла;
КонецЕсли;
файл_Т.Записать(имя_файла_с_акт_польз);
КонецЕсли;
файл_З = СоздатьОбъект("Текст");
файл_З.Открыть(имя_файла_с_Викл_польз);
Если файл_З.КоличествоСтрок() <>0 Тогда
Для квоСтрок=1 По файл_З.КоличествоСтрок() Цикл
стр_с_файла = СокрЛП(файл_З.ПолучитьСтроку(квоСтрок));
пользовСФайла = Лев(стр_с_файла,Найти(стр_с_файла,"***")-1);
Если пользовСфайла <> ИмяПользователя() Тогда
квоСтрок=квоСтрок+1;
Продолжить;
КонецЕсли;
файл_З.УдалитьСтроку(квоСтрок);
КонецЦикла;
КонецЕсли;
файл_З.Записать(имя_файла_с_Викл_польз);
КонецПроцедуры
Процедура ЧтоСделатьСюзвером_Ром(статусОтключения,ФлагСохранения,Парам,КолОбращений,сообщение,ТекстСообщения,отКого)
// в файлі компнд перша цифра 1, - виключаємо 1С; 2 - доступ до 1С ,3 - повідомлення
// цифла №2 = 1 - запитуємо зберегти не збереженні документи, 0 - не запитуємо;
//цифла №3 = пераметр з компом - 4 - вихід з коритувача, 5 - виключити, 6 - ребут
//цифла №4 = кількість раз може надсилатись повідомлення чи запит на виключення
//цифла №5 = вид повідомлення 1 - "сообщить"; 2 - "предупредить"; 3 - Вопрос
ТекущееКоличествоОбращений=ТекущееКоличествоОбращений+1;
Если статусОтключения="1" Тогда
ЗавершитьРаботуСистемы(ФлагСохранения);
ИначеЕсли статусОтключения="2" Тогда
//*** парам = 4 -виход ; 5 - викл; 6 - ребут;
Попытка
ЗавершенияРаботи_РОМ(1);
ScrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");
ScrptCtrl.Language="vbscript";
ScrptCtrl.AddCode("
|Function ViolateComputer()
| Set WMI = GetObject(""winmgmts:{(Shutdown,RemoteShutdown)}\\"+СокрЛП(ИмяКомпьютера())+"\Root\CIMV2"")
| For Each OS In WMI.ExecQuery(""SELECT * FROM Win32_OperatingSystem"")
| OS.Win32Shutdown("+Парам+")
| Next
|End Function
|");
ScrptCtrl.Run("ViolateComputer");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
/// модуль доставки повідомлення
Если сообщение= "1" Тогда
Сообщить("<Повідомлення від "+ отКого+ " ["+ ТекущееВремя()+ "]"+"> "+ ТекстСообщения,"!!");
ИначеЕсли сообщение="2" Тогда
Предупреждение(ТекстСообщения,20);
Сообщить("<Попередження від " + отКого+" ["+ ТекущееВремя()+ "]"+"> "+ТекстСообщения,"!!!");
ИначеЕсли сообщение="3" Тогда
Если Вопрос(ТекстСообщения,4,20)=6 Тогда
Сообщить("<Запитання до Вас від " + отКого +" ["+ ТекущееВремя()+ "]"+ "> "+ТекстСообщения,"!");
Сообщить("Ви відповіли " + "Так");
Иначе
Сообщить("<Запитання до Вас від " + отКого +" ["+ ТекущееВремя()+ "]"+ "> "+ТекстСообщения,"!");
Сообщить("Ви відповіли " + "Ні");
КонецЕсли;
КонецЕсли;
Если ТекущееКоличествоОбращений >= Число(КолОбращений) Тогда
ТекущееКоличествоОбращений=0;
ЗавершенияРаботи_РОМ(1);
КонецЕсли;
КонецПроцедуры
//*********************************
Процедура НачалоРаботи_Ром()
файл_Т = СоздатьОбъект("Текст");
файл_Т.Открыть(имя_файла_с_акт_польз);
Если файл_Т.КоличествоСтрок() <>0 Тогда
//проверка на всяк випадок глюканого завершення роботи системи....
Для квоСтрок=1 По файл_Т.КоличествоСтрок() Цикл
пользовСфайла = файл_Т.ПолучитьСтроку(квоСтрок);
Если пользовСфайла <> ИмяПользователя() Тогда
квоСтрок=квоСтрок+1;
Продолжить;
Иначе
файл_Т.УдалитьСтроку(квоСтрок);
квоСтрок=квоСтрок+1;
КонецЕсли;
КонецЦикла;
КонецЕсли;
файл_Т.ДобавитьСтроку(ИмяПользователя()) ;
файл_Т.Записать(имя_файла_с_акт_польз);
КонецПроцедуры
Процедура ОтключитьПользоватлей_Ром()
файл_В = СоздатьОбъект("Текст");
Попытка
файл_В.Открыть(имя_файла_с_Викл_польз);
Исключение
КонецПопытки;
Для КолСтр=1 По файл_В.КоличествоСтрок() Цикл
стр_с_файла=СокрЛП(файл_В.ПолучитьСтроку(КолСтр));
пользовСФайла = Лев(стр_с_файла,Найти(стр_с_файла,"***")-1);
статусОтключения = Лев(Сред(стр_с_файла,Найти(стр_с_файла,"***")+3),1);
флагСохранения = Прав(Лев(Сред(стр_с_файла,Найти(стр_с_файла,"***")+3),2),1);
ЧтоСКопДелаем = Прав(Лев(Сред(стр_с_файла,Найти(стр_с_файла,"***")+3),3),1);
КолОбращений = Прав(Лев(Сред(стр_с_файла,Найти(стр_с_файла,"***")+3),4),1);
сообщение = Прав(Лев(Сред(стр_с_файла,Найти(стр_с_файла,"***")+3),5),1);
ТекстСообщения = Лев(Сред(стр_с_файла,Найти(стр_с_файла,"|")+1),1000);
отКого = Сред(стр_с_файла,Найти(стр_с_файла,"\")+1,Найти(стр_с_файла,"|")-Найти(стр_с_файла,"\")-1);
Если (СокрЛП(пользовСФайла) = ИмяПользователя()) Тогда
ЧтоСделатьСюзвером_Ром(статусОтключения,флагСохранения,ЧтоСКопДелаем,КолОбращений,сообщение,ТекстСообщения,отКого);
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
2)
Процедура ПриЗавершенииРаботыСистемы()
****************
***
***
СделатьЗавершения_Ром=1;
Если Вопрос("Вы действительно хотите выйти из программы?",4,10) =7 Тогда
СделатьЗавершения_Ром=0;
СтатусВозврата(0);
КонецЕсли;
Если СделатьЗавершения_Ром=1 Тогда
ЗавершенияРаботи_РОМ(2);
КонецЕсли;
КонецПроцедуры
3)
Процедура ПриНачалеРаботыСистемы()
***************
****
**
НачалоРаботи_Ром();
ОбработкаОжидания("ОтключитьПользоватлей_Ром",5);
КонецПроцедуры
4)
и в самом конце глобальника
имя_файла_с_Викл_польз = КаталогИБ()+"ExtForms/управления_пользователями_Ром/"+"выкл_польз.rom";
имя_файла_с_акт_польз = КаталогИБ()+"ExtForms/управления_пользователями_Ром/"+"актив_польз.rom";
ТекущееКоличествоОбращений=0;
5) Каталог управления_пользователями_Ром положить в КаталогИБ()+"ExtForms;