Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Выбрасывалка "ленивых" пользователей из 1с. (число прочтений - 5179 )
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Выбрасывалка "ленивых" пользователей из 1с.
14. Ноября 2011 :: 06:55
Печать  
Хочу сделать такую очень нужную вещь:
в целях производительности, чтоб:
1) если пользователь "зашел в 1с и пошел пить кофе", его сеанс по прохождении определенного времени закрывался без вопросов. 
2) когда необходимо записать конфигурацию, выгнать всех пользователей, сохранив все документы и не запускать их обратно сколько нужно.
Скорее всего кто-то делал подобное - прошу поделитесь, как это лучше всего реализовать.
В связи с реализацией подобного функционала у меня возникают следующие вопросы, на которые, пока, ответа я не нашел.
1) Определять, когда последний раз пользователь обращался к программе(время последнего события мыши или клавиатуры), не обрабатывая в каждой форме события нажатия клавиатуры и мыши.
2) Как с помощью объекта "Сервис"(или как-то по-другому) закрыть любую форму, пытаясь при этом записать, если есть изменения.
При этом, чтоб не вносить изменения в модули каждой возможной формы как было описано здесь: http://www.1cpp.ru/forum/YaBB.pl?num=1320971895.
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Выбрасывалка "ленивых" пользователей из 1с.
Ответ #1 - 14. Ноября 2011 :: 08:30
Печать  
Стучись.
477687116
Пообщаемся.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3396
Зарегистрирован: 08. Октября 2007
Re: Выбрасывалка "ленивых" пользователей из 1с.
Ответ #2 - 14. Ноября 2011 :: 10:17
Печать  
1.Определить время простоя системы можешь этим

+ ОбработкаОжидания из формекса или Класс.Таймер

2. достаточно ЗавершитьРаботуСистемы и привет
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Выбрасывалка "ленивых" пользователей из 1с.
Ответ #3 - 14. Ноября 2011 :: 11:16
Печать  
3.Мониторинг журнала регистрации на предмет того когда юзьверь последний раз открывал что нибудь.
Для этого я делаю запись в журнал регистрации
С помощью процедур
ПриЗагрузкеВнешнегоОтчета(ИмяФайла)
ПриЗагрузкеФормы(ИмяОбъекта)

в процедуре обработки ожидания у меня работате так:

Код
Выбрать все
	ИНФО=СоздатьОбъект("Информатор");
	Время=ИНФО.ПолучитьВремяПростояСистемы()/1000;
	Если Время<=120 Тогда
		Возврат;
	КонецЕсли;
		Ч=0;М=0;С=0;
		ТекущееВремя(Ч,М,С);
		НачЧасы=Ч;
		лЧасы=Цел(глСчетчикПростоя/60);
		лМин=глСчетчикПростоя-лЧасы*60;
		НачМинуты=М-лМин;
		НачЧасы=НачЧасы-лЧасы;
		Если НачМинуты<0 Тогда
			НачМинуты=60+НачМинуты;
		КонецЕсли;
		"+Строка(С),2);
		Журнал=СоздатьОбъект("ПоставщикДанныхЖурналРегистрации");
		Журнал.ОткрытьФайл();
		Журнал.УстановитьПериод(ТекущаяДата(),ТекущаяДата());
		Журнал.ИзменитьФильтр(1,ИмяПользователя());
		Журнал.УстановитьФильтр();
		стат=Журнал.ВыбратьСтроки();
		НетЗаписей=1;
		Если стат=1 Тогда
			НетЗаписей=1;
			Пока Журнал.ПолучитьСтроку()=1 Цикл
				Если Журнал.Время<Начало Тогда
					Продолжить;
				КонецЕсли;
				НетЗаписей=0;
				Прервать;
			КонецЦикла;
		КонецЕсли;
		Если НетЗаписей=1 Тогда
			Если ФС.СуществуетФайл(КаталогИБ()+"отладка.dat")=0 Тогда
				ЗаписьЖурналаРегистрации("Автовыход по бездействию",,"Автовыход");
				глВыходВопрос=1;
				ЗавершитьРаботуСистемы(0);
			КонецЕсли;
		КонецЕсли;

 


  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Выбрасывалка "ленивых" пользователей из 1с.
Ответ #4 - 15. Ноября 2011 :: 01:21
Печать  
varelchik писал(а) 14. Ноября 2011 :: 11:16:
у меня работате так
Неоправданные усложнения, однако...
Eprst писал(а) 14. Ноября 2011 :: 10:17:
1.Определить время простоя системы можешь этим
Полностью поддерживаю!
al_zzz писал(а) 14. Ноября 2011 :: 06:55:
2) когда необходимо записать конфигурацию, выгнать всех пользователей, сохранив все документы и не запускать их обратно сколько нужно.
Это легко реализовать при помощи константы и периодической ее проверки.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Выбрасывалка "ленивых" пользователей из 1с.
Ответ #5 - 15. Ноября 2011 :: 04:47
Печать  
al_zzz писал(а) 14. Ноября 2011 :: 06:55:
1) Определять, когда последний раз пользователь обращался к программе(время последнего события мыши или клавиатуры), не обрабатывая в каждой форме события нажатия клавиатуры и мыши.


глобальные события формекса ПриОтжатииКнопкиКлавиатуры и прочие

Слушай Ёпрст-а.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Выбрасывалка "ленивых" пользователей из 1с.
Ответ #6 - 15. Ноября 2011 :: 04:49
Печать  
Dmitry The Wing писал(а) 15. Ноября 2011 :: 01:21:
Это легко реализовать при помощи константы и периодической ее проверки.


Это лучше реализовать при помощи флагового файла и периодическом опросе его.
Ибо, например, у сисадмина тоже должна быть возможность аккуратно выгнать всех с сервака. А делать ему юзера в 1С бывает излишне.
  
Наверх
 
IP записан
 
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Re: Выбрасывалка "ленивых" пользователей из 1с.
Ответ #7 - 15. Ноября 2011 :: 05:32
Печать  
Eprst писал(а) 14. Ноября 2011 :: 10:17:
1.Определить время простоя системы можешь этим

+ ОбработкаОжидания из формекса или Класс.Таймер

2. достаточно ЗавершитьРаботуСистемы и привет

Спасибо! Со временем простоя всё понятно. А как корректно попытаться записать без вопросов открытые формы документов и справочников перед завершением работы системы, если, к примеру, пользователь оставил, открытый редактируемый документ а сам отошел? Можно это как-то сделать одной процедурой в глобальном модуле и не перелопачивать кучу форм?
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Выбрасывалка "ленивых" пользователей из 1с.
Ответ #8 - 15. Ноября 2011 :: 05:37
Печать  
Satans Claws писал(а) 15. Ноября 2011 :: 04:49:
Dmitry The Wing писал(а) 15. Ноября 2011 :: 01:21:
Это легко реализовать при помощи константы и периодической ее проверки.
Это лучше реализовать при помощи флагового файла и периодическом опросе его.
Ибо, например, у сисадмина тоже должна быть возможность аккуратно выгнать всех с сервака. А делать ему юзера в 1С бывает излишне.
В корне не согласен.
Если уж очень хочется выгонять без входа в 1С, то проще наваять микроскрипт, который будет устанавливать значение константы без запуска 1С. (У меня так константа выставляется в случае, ежели в 1С никого нет и она завершена некорректно, ибо в этом случае автозапуск 1С невозможен, но после начала профилактики, юзер вдруг может захотеть войти)

al_zzz писал(а) 15. Ноября 2011 :: 05:32:
Спасибо! Со временем простоя всё понятно. А как корректно попытаться записать без вопросов открытые формы документов и справочников перед завершением работы системы, если, к примеру, пользователь оставил, открытый редактируемый документ а сам отошел? Можно это как-то сделать одной процедурой в глобальном модуле и не перелопачивать кучу форм?
Спешу тебя огорчить, но в природе не существует корректного способа закрыть форму с пониманием, нужно ли сохранение, т.к. юзеры нередко открывают документ, что-то в нем меняют, не намереваясь потом его сохранять...
Потому правильнее будет закрывать формы без сохранения, а "кто не сохранился, я не виноват".
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Выбрасывалка "ленивых" пользователей из 1с.
Ответ #9 - 15. Ноября 2011 :: 11:13
Печать  
Dmitry The Wing
вполне с тобой согласен.
Неоправданные усложнения, однако...
Eprst писал(а) Вчера :: 13:17:
Зато малоли че пользователь делает в базе.
Мож вин токо отчеты строить.
Да и он может сидеть скажем в другой программе, а в 1С периодически заходить и что-то смотреть.
Посему проверку ЖР таки лучше делать.
Тут как говориться на всех не угодиш.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Выбрасывалка "ленивых" пользователей из 1с.
Ответ #10 - 16. Ноября 2011 :: 01:41
Печать  
Родной ЖР семерки слишком медленный ... если же он будет постоянно шерститься ... оправданы ли эти тормоза?
У себя перехватчиком дублирую ЖР в отдельную БД FireBird (была бы 1С не файловая, писал бы в родную БД), т.к. он уже не раз переставал фунциклировать, что лечится только удалением, а это потеря истории ...
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Выбрасывалка "ленивых" пользователей из 1с.
Ответ #11 - 16. Ноября 2011 :: 05:46
Печать  
Dmitry The Wing писал(а) 16. Ноября 2011 :: 01:41:
Родной ЖР семерки слишком медленный ... если же он будет постоянно шерститься ... оправданы ли эти тормоза?
У себя перехватчиком дублирую ЖР в отдельную БД FireBird (была бы 1С не файловая, писал бы в родную БД), т.к. он уже не раз переставал фунциклировать, что лечится только удалением, а это потеря истории ...


Вот тут в корне не согласен.
Да тормоз не спорю.
Но с поставщиком работает очень даже ничего.
А насчет истории так кто ВАМ запрещает делать архивацию журнала?
Причем я ж на бездействие юзьвера смотрю (бездействие системы).
Так что тормоза тута в принципе роли вообще не играют.
Смотрите внимательнее код.
  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выбрасывалка "ленивых" пользователей из 1с.
Ответ #12 - 20. Января 2012 :: 08:00
Печать  
al_zzz писал(а) 14. Ноября 2011 :: 06:55:
....
2) ... выгнать всех пользователей ... и не запускать их обратно сколько нужно.


Из другой 1Ски залочить юзерс.юср этой базы

Код
Выбрать все
перем Замок; // БинариДата для попытки блокировки ..\usrdef\users.usr

Процедура УстановитьЗапретВходаВбазу( Путь )
	ЛокФайл = Путь + "\usrdef\users.usr";
	Если ( ФС.СуществуетФайл( ЛокФайл ) = 0 ) Тогда
		Сообщить( "Файл не найден: " + ЛокФайл );
		Возврат;
	КонецЕсли;
	Замок = СоздатьОбъект( "BinaryData" );
	рез = Замок.ПодключитьсяКФайлу( ЛокФайл, 0, 1 );
	Если ( рез = 0 ) Тогда
		Сообщить( "Не удалось заблокировать " + ЛокФайл );
		Замок = 0;
	КонецЕсли;
КонецПроцедуры 



Пока живо содержимое переменной Замок - работать не мешает, входить не дает:
  

noenter.JPG ( 28 KB | Загрузки )
noenter.JPG
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать