Имя: Пароль:
1C
 
Принудительное программное отключение пользователей для монопольного входа
0 Zevs1998
 
20.07.05
14:14
Существует ли средство для принудительного программного закрытия всех сеансов пользователей (закрытия клиентских программ 1с)?
При планировании монопольного запуска 1С на сервере по расписанию при условии, что кто-то из пользователей всё ещё сидит в системе 1С монопольно не стартует и окно ошибки без участия пользователя не снимается. Хотелось бы перед запуском 1С в монопольном режиме запустить какую-либо утилитку для принудительного отключения пользователей.
1 Samba
 
20.07.05
14:30
В ГлобальномМодуле Напиши,по-моему должно работать....
ОбработкаОжидания("ВыкинутьВсех",15)
Функция ВыкинутьВсех()
Если Константа.ВыкинутьВсехКромеТебя = 1 Тогда
Если ИмяПользователя() <> "Твоеимя" тогда
ЗавершитьРаботуСистемы(0);
КонецЕсли;
КонецЕсли;
КонецФункции
2 Ёпрст
 
20.07.05
14:32
(0) да уж .... пару раз так выкинешь всех с базы (особенно если они тяжелые обработки запускали или доки проводили) и будешь нудно базу восстанавливать из архива....

На кой тебе монопольный режим то ?
3 Ёпрст
 
20.07.05
14:33
+2 я имел ввиду снятие net сессий
4 Гуру 1С
 
20.07.05
14:35
(1) - лучше анализировать в ИБ наличие файла-флажка.

Создавать удобно из VBScript (OpenConf Script).
5 goodfella
 
20.07.05
14:35
6 АвторскиеПрава Частич
 
20.07.05
14:37
Процедура ОстановкаСистемы()
   ОчиститьОкноСообщений(); Сигнал();
   Сообщить("ВНИМАНИЕ! ОСТАНОВКА ПРОГРАММЫ!","!!!");
   Сообщить("Просьба сохранить все необходимые документы или элементы справочников.","!!!");
   Если ПопыткаВыхода=1 Тогда
       Коммент="Предупреждение об остановке системы.";
       ЗаписьЖурналаРегистрации(Коммент,,,,4);
   КонецЕсли;
   
   Если ПопыткаВыхода=4 Тогда
       ОчиститьОкноСообщений();
       Сигнал();
       Сигнал();
       Сигнал();
       Предупреждение("Ваше время истекло! ОСТАНОВКА СИСТЕМЫ.",1);
       Коммент="Отключение охамевшего пользователя.";
       ЗаписьЖурналаРегистрации(Коммент,,,,4);
       ЗавершитьРаботуСистемы(0);
   КонецЕсли;
   
   Ответ=0;
   Если ПопыткаВыхода<4 Тогда    // Если не проверять, то при отключении (см. выше) система успевает снова задать вопрос.
       Ответ=Вопрос("Вы готовы к остановке системы",4,10);
   КонецЕсли;
   
   Если Ответ=7 Тогда // Ответ - НЕТ
       Сигнал();
       Коммент="Отсрочка отключения № "+Строка(ПопыткаВыхода);
       ЗаписьЖурналаРегистрации(Коммент,,,,4);
       ПопыткаВыхода=ПопыткаВыхода+1;
   ИначеЕсли Ответ=6 Тогда // Ответ - ДА
       Сигнал(); Сигнал(); ОчиститьОкноСообщений();
       Коммент="Отключение раб. станции "+Строка(ИмяКомпьютера())+".";
       ЗаписьЖурналаРегистрации(Коммент,,,,4);
       ПопыткаВыхода=ПопыткаВыхода+1;
       ЗавершитьРаботуСистемы(1);
   ИначеЕсли Ответ=-1 Тогда // Ответ не получен. Выход по таймауту.
       ОчиститьОкноСообщений(); Сигнал(); Сигнал(); Сигнал();
       Предупреждение("Внимание! ОСТАНОВКА СИСТЕМЫ.",3);
       Коммент="Отключение неответившей раб. станции "+Строка(ИмяКомпьютера())+".";
       ЗаписьЖурналаРегистрации(Коммент,,,,4);
       ЗавершитьРаботуСистемы(0);
   КонецЕсли;
КонецПроцедуры

Процедура АнализЗавершенияРаботы()
   ФИмя=СтопФайл;
   Если ФС.СуществуетФайл(ФИмя) = 1 Тогда
       Если НЕ(НазваниеНабораПрав()="Админ") Тогда
           ПопыткаВыхода = 1;
           ОстановкаСистемы();
       КонецЕсли;
   КонецЕсли;
   ФИмя="";
КонецПроцедуры

Процедура ПриНачалеРаботыСистемы()
...
ОбработкаОжидания("АнализЗавершенияРаботы",10);
...
КонецПроцедуры  //ПриНачалеРаботыСистемы()

Файл-флаг создается:
Sub ExitAll()
   StopFile="stop.all"
   Set FSO = CreateObject("Scripting.FileSystemObject")
      Set tf = FSO.CreateTextFile (IBDir & StopFile)
      tf.Close
End Sub
7 Да и еще
 
20.07.05
14:40
Удаление файла-флажка:
StopFile="stop.all"
   Set FSO = CreateObject("Scripting.FileSystemObject")
   If FSO.FileExists(StopFile) Then
       FSO.DeleteFile StopFile
   End if
8 Да и еще
 
20.07.05
14:46
Поправочка
StopFile=IBDir & "stop.all"
   Set FSO = CreateObject("Scripting.FileSystemObject")
   If FSO.FileExists(StopFile) Then
       FSO.DeleteFile StopFile
   End if
9 Кочуров
 
20.07.05
15:02
10 колодина
 
20.07.05
17:00
(9) классная штука... надо использовать и спасибо большое.
11 Zevs1998
 
21.07.05
06:55
Дело в том, что мне это нужно делать по расписанию в определённое время (т.е. меня самого в это время на рабочем месте нет). У меня по расписанию 1С ночью стартует в монопольном режиме. И до этого старта мне нужно убедиться, что в 1С никто не сидит, иначе при старте в монопольном режиме 1С выставит окно с ошибкой и его уже никак не снять, кроме как вручную (ночь пропала :-)
12 Фокусник
 
21.07.05
08:12
(11) Для какий целей ночью стартует в монопольном режиме?
13 Ночник
 
21.07.05
08:15
(11) - а какого черта юзеры сидят в 1Се ночью?
14 Zevs1998
 
21.07.05
09:11
Юзеры могут работать круглосуточно (по производственной необходимости). А стартует в монопольном режиме для восстановления ГП, так как восстановление ГП при работе юзеров во-первых, здорово тормозит их работу, а во-вторых, за ночь проходит всего несколько дней, а затем в течение дня юзеры ГП могут снова отправить назад на пол-года :-)
15 Ёпрст
 
21.07.05
09:14
(14) да уж ... а если ГП застопарилась ??? Всё равно придётся "рученьками" править!
16 Ёпрст
 
21.07.05
09:16
(14) ГП на пол - года назад ???? Ах....ть! У меня на неделю - катастрофа, и то с разрешения ГБ и то под присмотром. А так период всегда закрыт. А если влезать на пол-года назад - эт пиз..ц вся себестоимость могёт полететь на х....
17 Zevs1998
 
21.07.05
13:43
Не могет, а летит и не только она. Заплюхались уже бороться