Программное закрытие всех форм всех пользователей или еще лучше 1с-ки

1. Shooroopik111 131 08.10.14 16:38 Сейчас в теме
ребят подскажите как программно закрыть 1с на всех компах пользователей или все формы что у них открыты? Заранее спс.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. AnryMc 849 08.10.14 16:56 Сейчас в теме
(1) Shooroopik111,

С стандартных конфигурациях, обычно в "сервисе" есть обработка "установка блокировки соединений с информационной базой" в ней реализован механизм "выгоняния" пользователей из базы... Посмотри в ней...
Shooroopik111; +1 Ответить
3. Shooroopik111 131 08.10.14 16:59 Сейчас в теме
(2) AnryMc, Да это я умею))Конкретно в УПП 1.3 есть обработка Активные пользователи. Она может завершить сеанс,но при этом у пользователя 1с-ка не закрывается и вылазит окно "Сеанс работы завершнен Администарторм (перезагрузить---Завершить.)" Мне же необходимо не просто разорвать сеанс, а сделать так чтобы и 1с у пользователя сама закрылась.
9. AnryMc 849 08.10.14 17:34 Сейчас в теме
(3) Shooroopik111,
На неуправляймых формах было:

ПРОЦЕДУРА:
   # Если Клиент Тогда             
        Если УстановитьБлокировкуСоединений Тогда
            // поскольку блокировка еще не установлена, то при входе в систему
            // для данного пользователя был подключен обработчик ожидания завершения работы.
            // Отключаем его. Так как для этого пользователя подключается специализированный обработчки ожидани
            // "ЗавершитьРаботуПользователей", который ориентирован на то, что данный пользователь
            // должен быть отключен последним.        
            
            ОтключитьОбработчикОжидания("КонтрольРежимаЗавершенияРаботыПользователей");
            ПодключитьОбработчикОжидания("ЗавершитьРаботуПользователей", 60);	
        КонецЕсли;
    # КонецЕсли 

    
	// параметры блокировки
	Блокировка = Новый БлокировкаУстановкиСоединений;
	
	Блокировка.Начало 			= НачалоБлокировки;
	Блокировка.Конец  			= ОкончаниеБлокировки;
	Блокировка.Сообщение 		= Сообщение;
	Блокировка.Установлена 		= УстановитьБлокировкуСоединений;
	Блокировка.КодРазрешения 	= КодРазрешения;	
	
	// установка блокировки соединений
	УстановитьБлокировкуУстановкиСоединений(Блокировка)
Показать


Из неё вызываются в Глобальном Модуле:
#Если Клиент Тогда
// Процедура выполняет отключение пользователей от информационной 
// базы в случае, если был запущен сеанс с параметром "ЗавершитьРаботуПользователей"
//
Процедура КонтрольРежимаЗавершенияРаботыПользователей() Экспорт

	ТекущийРежим = ПолучитьБлокировкуУстановкиСоединений();
	БлокировкаУстановлена = УправлениеСоединениямиИБ.УстановленаБлокировкаСоединений();
	ВремяНачалаБлокировки = ТекущийРежим.Начало;
	ВремяОкончанияБлокировки = ТекущийРежим.Конец;
	
	ИнтервалПредупреждения    = УправлениеСоединениямиИБ.ИнтервалОжиданияЗавершенияРаботыПользователей();
	ИнтервалЗакрытьСЗапросом  = 0;
	ИнтервалЗакрытьБезЗапроса = - УправлениеСоединениямиИБ.ИнтервалОжиданияЗавершенияРаботыПользователей() / 5;
	ИнтервалПрекратить        = - УправлениеСоединениямиИБ.ИнтервалОжиданияЗавершенияРаботыПользователей() / 2.5;
	ТекущийМомент = ТекущаяДата();
	
	Если БлокировкаУстановлена Тогда
		
		Если ВремяОкончанияБлокировки <> '00010101' И ТекущийМомент > ВремяОкончанияБлокировки Тогда
			Возврат;
		КонецЕсли;
		
		Если НЕ ЗначениеЗаполнено(ВремяНачалаБлокировки) 
			ИЛИ ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалПрекратить Тогда
			
			ПрекратитьРаботуСистемы(Истина);
			
		ИначеЕсли ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалЗакрытьБезЗапроса Тогда
			Сообщение = УправлениеСоединениямиИБ.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение);
			Предупреждение(НСтр("ru='Работа системы завершается.';uk='Робота системи завершується.'") + ?(ПустаяСтрока(Сообщение), ".", " " + Сообщение), 30);
			
			ЗавершитьРаботуСистемы(Ложь, Истина);
			
		ИначеЕсли ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалЗакрытьСЗапросом Тогда
			
			Сообщение = УправлениеСоединениямиИБ.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение);
			Предупреждение(НСтр("ru='Работа системы завершается.';uk='Робота системи завершується.'") + ?(ПустаяСтрока(Сообщение), ".", " " + Сообщение), 30);
			
			ЗавершитьРаботуСистемы(Истина, Истина);
			
		ИначеЕсли ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалПредупреждения Тогда
			
			Сообщение = УправлениеСоединениямиИБ.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение);
			Предупреждение(НСтр("ru='Работа системы будет завершена в ';uk='Роботу системи буде завершено у '") + ВремяНачалаБлокировки + ?(ПустаяСтрока(Сообщение), ".", " " + Сообщение), 30);
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры // КонтрольРежимаЗавершенияРаботыПользователей

// Завершение работы только при условии удачной установки монопольного режима работы
// Вызывается, только при запуске системы от имени администратора с параметром запуска "ЗавершитьРаботуПользователей"
//
Процедура ЗавершитьРаботуПользователей() Экспорт

	Соединения = ПолучитьСоединенияИнформационнойБазы();
	
	Если Соединения.Количество() = 1 Тогда
		// Отключены все пользователи, кроме текущего сеанса
		// В последнюю очередь завершается сеанс, запущенный с параметром "ЗавершитьРаботуПользователей".
		// Такой порядок отключений необходим для обновления конфигурации с помощью пакетного файла
		
		ЗавершитьРаботуСистемы(Ложь);
		
		Возврат;
	КонецЕсли; 
	
	// Получим текущее значение параметров блокировки
	ТекущийРежим = ПолучитьБлокировкуУстановкиСоединений();
	БлокировкаУстановлена = ТекущийРежим.Установлена;
	ВремяНачалаБлокировки = ТекущийРежим.Начало;
	ИнтервалОтключения    = - УправлениеСоединениямиИБ.ИнтервалОжиданияЗавершенияРаботыПользователей();
	
	ТекущийМомент = ТекущаяДата();
	
	Если БлокировкаУстановлена И
		(НЕ ЗначениеЗаполнено(ВремяНачалаБлокировки) 
			ИЛИ ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалОтключения) Тогда
			
		// после начала блокировки сеансы всех пользователей должны быть отключены	
		// если этого не произошло пробуем принудительно прервать соединения
		ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей");
		
		// Невозможно принудительно отсоединить подключения в файловом режиме работы
		Если ОпределитьЭтаИнформационнаяБазаФайловая() Тогда
			УправлениеСоединениямиИБ.РазрешитьРаботуПользователей();
			Сообщение = УправлениеСоединениямиИБ.ПолучитьНазванияСоединенийИБ(НСтр("ru='Не удалось завершить работу пользователей:';uk='Не вдалося завершити роботу користувачів:'"));
			ЗаписьЖурналаРегистрации(НСтр("ru='Завершение работы пользователей';uk='Завершення роботи користувачів'",Локализация.КодЯзыкаИнформационнойБазы()), УровеньЖурналаРегистрации.Предупреждение, , , Сообщение);
			ЗавершитьРаботуСистемы(Ложь);
			Возврат;	
		КонецЕсли;	
		
		ПараметрыАдминистрированияИБ = УправлениеСоединениямиИБ.ПолучитьПараметрыАдминистрированияИБ();
		ПараметрыЗапуска = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска,";");
		Если ПараметрыЗапуска.Количество() > 1 Тогда
			ПараметрыАдминистрированияИБ.ИмяАдминистратораИБ = Врег(ПараметрыЗапуска[1]);
		КонецЕсли;
		Если ПараметрыЗапуска.Количество() > 2 Тогда
			ПараметрыАдминистрированияИБ.ПарольАдминистратораИБ = Врег(ПараметрыЗапуска[2]);
		КонецЕсли;
		
		Результат = УправлениеСоединениямиИБ.ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ);
		Если Результат Тогда
			Сообщить(НСтр("ru='Завершение работы пользователей выполнено успешно.';uk='Завершення роботи користувачів виконано успішно.'"), СтатусСообщения.Информация);
			ЗавершитьРаботуСистемы(Ложь);
		Иначе
			Сообщение = УправлениеСоединениямиИБ.ПолучитьНазванияСоединенийИБ(НСтр("ru='Не удалось завершить работу пользователей:';uk='Не вдалося завершити роботу користувачів:'"));
			Сообщить(Сообщение, СтатусСообщения.Внимание);
			ЗаписьЖурналаРегистрации(НСтр("ru='Завершение работы пользователей';uk='Завершення роботи користувачів'",Локализация.КодЯзыкаИнформационнойБазы()), УровеньЖурналаРегистрации.Предупреждение, , , Сообщение);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры // ЗавершитьРаботуПользователей
#КонецЕсли

Показать
Shooroopik111; +1 Ответить
4. ojiojiowka 08.10.14 17:01 Сейчас в теме
ЗавершитьРаботуСистемы(Ложь);

Есть как раз в стандартной "выгонялке". А автор - лентяй, даже посмотреть не захотел.
5. Shooroopik111 131 08.10.14 17:09 Сейчас в теме
(4) ojiojiowka, Чего то вы путаете! Нет там такого.
6. ojiojiowka 08.10.14 17:11 Сейчас в теме
Конечно путаю! Я Вам помог?
7. Shooroopik111 131 08.10.14 17:19 Сейчас в теме
(6) ojiojiowka, Сделал глобальный поиск по Завершить....
нет там этого, чего вы меня обманываете?
8. ojiojiowka 08.10.14 17:33 Сейчас в теме
(7), к сожалению, УПП рядом нет, но в БСП и в БП данный код есть и находится в
СоединенияИБГлобальный.КонтрольРежимаЗавершенияРаботыПользователей()

Может не будем продолжать бессмысленный спор и Вы продолжите задавать вопросы после того, как воспользуетесь советом из сообщения (4) и у Вас что-то не получится?
10. Shooroopik111 131 08.10.14 17:38 Сейчас в теме
Спасибо большущее!!!!это прям то что надо.
Оставьте свое сообщение

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