gifts2017

Выгонялка.

Опубликовал Светлана Иванова (Cvetic) в раздел Программирование - Практика программирования

Часто сталкиваюсь с проблемой: просишь пользователей выйти из базы, а они не слушаются!  Для этого написала такую вот выгонялку.
Процедура ЗакрытьПрогу()
 Если Константа.Выгнать = 1 тогда

      Если НазваниеНабораПрав() <> "Администратор" тогда
              ЗавершитьРаботуСистемы(0)

      КонецЕсли
 КонецЕсли
КонецПроцедуры

 

Процедура ПриНачалеРаботыСистемы()
 
 ОбработкаОжидания("ЗакрытьПрогу",60);  // 60 - секунды

КонецПроцедуры //ПриНачалеРаботыСистемы()

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Дмитрий Кузнецов (cushe) 21.04.10 11:10
2. Трактор Трактор (Трактор) 21.04.10 11:13
Странно. Отправил комментарий, а он не появился :-(
Плюсую за оформление и содержательность изложения. Буду ссылаться как на образец.
Только перенумератор, пожалуйста, не публикуй. Ненадо.
3. Трактор Трактор (Трактор) 21.04.10 11:16
Глюки сайта. Убрал повтор.
4. Дмитрий Елисеев (w-divin) 21.04.10 11:48
более гуманно (выдернуто из системы сообщений, взятой на проклубе):
   Если ТекПользователь.ЗакрытьСистему=Перечисление.Булево.Да Тогда
        Если ТипЗначения(ФрмЗакрытьСистему)<>100 Тогда
            ОткрытьФорму("Обработка.ЗакрытьСистему",ФрмЗакрытьСистему);
        КонецЕсли;
        ФрмЗакрытьСистему.Форма.Обновить();
        Сигнал();
        
        ТекПользователь.ОсталосьСекунд=ТекПользователь.ОсталосьСекунд-5;
        ТекПользователь.Записать();
        
        Если ТекПользователь.ОсталосьСекунд<=0 Тогда 
            Для а=0 По 5000 Цикл
            КонецЦикла;
            
            ЗавершитьРаботуСистемы(0);
            Возврат;
        КонецЕсли;
        
    ИначеЕсли ТекПользователь.ЗакрытьСистему=Перечисление.Булево.Нет Тогда
        Если ТипЗначения(ФрмЗакрытьСистему)=100 Тогда
            ФрмЗакрытьСистему.Форма.Закрыть();
        КонецЕсли;
        ТекПользователь.ОсталосьСекунд=0;
        ТекПользователь.ЗакрытьСистему="";
        ФрмЗакрытьСистему=0;
        ТекПользователь.Записать();
    КонецЕсли;
...Показать Скрыть
5. Дмитрий Литовченко (kompas-dm) 21.04.10 12:24
6. Андрей К. (Andzhej) 21.04.10 12:56
(0) как на счет открытых модальных окон и окон авторизации в 1С?
7. Светлана Иванова (Cvetic) 21.04.10 14:39
(4) я тоже прошу всех выдти, только по чату, на случай если 1С свернута.
(6) при открытых модальных оконах не работает :cry: при авторизации тем более.
9. Александр Венгер (venger) 21.04.10 17:57
10. Serj (Serj1C) 22.04.10 07:11
11. Александр Венгер (venger) 22.04.10 11:38
(10) Минусуй, ибо -5 снимает публикацию, система то "саморегулирующаяся";-)
12. Светлана Иванова (Cvetic) 22.04.10 15:26
13. Serj (Serj1C) 23.04.10 07:00
(12) А за что мы должны "Плюс" поставить??
14. Аркадий Кучер (Abadonna) 23.04.10 07:30
(12)
за что минус?

Терпеть не могу дурацкую поговорку про велосипеды, поэтому сформулирую так: за очередное гениальное откровение новичка.
Кстати, ты еще, наверно, не в курсах: если юзверь после появления вопроса "Провести документ" уйдет курить минут на 40, то:
1. ОбработкаОжидания не отработает, ибо это (не пугайся!) taskmodal window
2. А даже если и отработает (формексовская отрабатывает, спасибо АЛьФу!), то не сработает ЗавершитьРаботуСистемы(0)
15. Аркадий Кучер (Abadonna) 23.04.10 07:35
(0) +(14) Но минус ставить не буду, потому как любые попытки делать что-то творчески я только приветствую. Но и на плюс не тянет
16. Аркадий Кучер (Abadonna) 23.04.10 07:41
И еще: путний проггер хотя бы за 30 секунд должен предупредить юзверей, что
"Программа будет закрыта, сохраните открытые документы!"
Иначе тебя какая-нибудь тётенька-бух может и прибить, если у нее строчек 20-50 дока пропадет свеженабитых ;)
17. Александр Рытов (Арчибальд) 23.04.10 07:49
(15) Аналогично (с) Успенский
18. Светлана Иванова (Cvetic) 23.04.10 08:15
Abadonna, спасибо за разъяснения :)
19. Александр Рытов (Арчибальд) 23.04.10 09:33
Из чистого занудства приведу кусочек из конфигурации Камин-ЗПЛ2.0.
	Если Константа.ВсемВыйти > 0 Тогда
		Если Гл_ТаблицаДействий.НайтиЗначение("ЗавершитьРаботу",,"Действие") = 0 Тогда
			Сообщить("006: "+Формат(ТекущаяДата(),"Д ДДММММГГГГ")+", "+ТекущееВремя()+": необходимо завершить работу и выйти из программы");
			Предупреждение(Формат(ТекущаяДата(),"Д ДДММММГГГГ")+", "+ТекущееВремя()+РазделительСтрок+
						"Пожалуйста, завершите работу и выйдите из программы."+РазделительСтрок+
						" Через "+Строка(Константа.ВсемВыйти)+" мин. она закроется автоматически",5);
			Гл_ТаблицаДействий.НоваяСтрока();
			Гл_ТаблицаДействий.Действие = "ЗавершитьРаботу";
			Гл_ТаблицаДействий.Счетчик = Константа.ВсемВыйти;
		КонецЕсли;
	КонецЕсли;
...Показать Скрыть
20. Аркадий Кучер (Abadonna) 23.04.10 09:36
(18) Вот смотри как на самом деле это совсем не просто:
Процедура  глТаймер() Экспорт     
	Если Константа.Убить1С>0 Тогда
		Стр=L.EnumMyNotChild();         
		Для А=1 По СтрКоличествоСтрок(Стр) Цикл  
			С=СтрПолучитьСтроку(Стр,А);   
			Если Найти(С,";#32770;")>0 Тогда  
				С=СтрЗаменить(С,";",РазделительСтрок);
				Хэндл=Число(СтрПолучитьСтроку(С,3));
				L.KillWnd(Хэндл);  // избавились от модальных, кроме Вопрос 
				L.PressButton(Хэндл,"&Нет"); //закрыли Вопрос - ответили "Нет"  
				L.SendEsc(L.h1C());  // примочили календарь из рабочей даты
			КонецЕсли;    
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры
...Показать Скрыть

где L - это:

ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"MiracleV8.dll");
L=СоздатьОбъект("AddIn.MiracleClass");

из http://infostart.ru/public/18629/
Да! Забыл дописать... глТаймер это не ОбработкаОжидания, а Сервис.ОбработкаОжидания от formex
21. Аркадий Кучер (Abadonna) 23.04.10 09:45
(19) И ни фига там никто не выйдет, если
...юзверь после появления вопроса "Провести документ?" уйдет курить минут на 40
22. Александр Рытов (Арчибальд) 23.04.10 09:52
(21) Да в курсе я насчет модальных окон. Я ж не в твоей ветке выступаю :D
23. Аркадий Кучер (Abadonna) 23.04.10 09:55
(22) А вот (20) - успех обеспечен :D
Кроме окна "Авторизация доступа", к которому из 1С и не достучишься.
Но и "этого есть у меня" ;)
24. Serj (Serj1C) 23.04.10 11:20
проще сетевой кабель выдернуть у сервера)))
25. Аркадий Кучер (Abadonna) 24.04.10 16:43
(24)
проще сетевой кабель выдернуть у сервера)))

В нормальных конторах программиста 1С и на порог серверной не пустят ;)
26. Сергей Ожерельев (Поручик) 25.04.10 00:49
Эт точно (с).
Хоть прежнее место работы нельзя назвать нормальным, но когда потребовалось тупо включить кондиционеры в серверной и рестартануть сами сервера, пришлось потревожить зама по безопасности. Дело было поздно вечером в пятницу.
27. Игорь Исхаков (Ish_2) 25.04.10 09:28
(15),(17) Может быть , первую публикацию автора как-то помечать особо ?
Скажем , цветным текстом "Первый блин !".
Что ни говори , а шкала оценок тут должна быть другая.
Если , конечно, ИС заинтересован в привлечении новых авторов - "хороших и разных".
28. Аркадий Кучер (Abadonna) 25.04.10 09:47
(27) Может сделать раздел что-то вроде "Моя первая публикация"?
А потом модеры смогут переместить в уже "устоявшиеся" разделы. Или удалить...
29. Игорь Исхаков (Ish_2) 25.04.10 09:58
(28) Может быть и так.
Правда , если проще обойтись простым техническим приёмом, то лучше им и обойтись.
В твоём варианте требуются некоторые организационные усилия - на ИС это ахиллесова пята.

P.S. Не уверен, что личка работает как надо. ishakk@mail.ru
30. Вячеслав Н. Бойко (boy13) 28.04.10 00:44
у меня есть рабочий код подобного.. но с более гибкими настройками. Учитываются ОТДЕЛЬНЫЕ права пользовател (новые), при заходе обычного пользователя ему выдается сообщение. После запуска механизма автовыгона всем пользователям выскакивает предупрждение о закрытии с причиной (вводится вручную), и через заданное время программа у пользователей закрывается автоматически... если надо - подготовлю и выложу.
31. Вячеслав Н. Бойко (boy13) 28.04.10 00:46
АВТОРУ: у тебя один неприятный недостаток. Если константа стоит 1, а пользователь только зайдет, то ты будешь ждать 60 секунд..... Надо заюзать ДоНачалаРаботыСистемы()
32. Тимур Рахматулин (TheReal0) 28.04.10 06:55
Если есть возможность предупредить всех до момента выгонять, то я использую консоль кластера , для вырубания юзеров. (к-с вариант)

Если нет возможности предупредить, то можно реализовать механизм предупреждений внутренними средствами 1с (а ля 1cq или регламентные задания), и выгонять с консоли кластера.

з.ы. в консоли базу блокировать с кодом разрешения , чтобы и те кто не видел сообщений не входили и не начинали работать
33. Аркадий Кучер (Abadonna) 28.04.10 07:25
(31)
Надо заюзать ДоНачалаРаботыСистемы()

- Македонский? Кто такой? Почему не знаю? (с) Чапаев
Это где в 7.7 есть такая процедура? Я что-то пропустил?
34. Аркадий Кучер (Abadonna) 28.04.10 07:31
(32) (31)
Ребята, вы вверх-то посмотрите!
Алгоритм для 1С: Бухгалтерский учет 7.7; 1С: Оперативный учет 7.7; 1С: Расчет 7.7; 1C: OpenConf 7.7
35. Сергей Толмачев (sss999) 28.04.10 09:06
(27)(15)(9)(10)(11)(1)прошу вас господа оценить мою консоль запросов,если на 8.1 кодите то пригодится должно,(4)неплохо выдернул,а тебе Cvetic рекомендую в следущий раз добавлять некоторые фишки в код.)
36. qazwsxedcrfv (S_MIXA) 28.04.10 09:37
Процедура CLOSE_PROGA()
ЗавершитьРаботуСистемы(0);
КонецПроцедуры

Процедура ЗакрытьПрогу()
// условие при котором j=0, до этого j=1

if j=0 then
message("####################################");
message("#....Программа будет закрыта через 1 минуту....#");
message("#..........Сохраните пожайлуста документы...........#");
message("####################################");
//ОбработкаОжидания("CLOSE_PROGA",60);
ОбработкаОжидания("CLOSE_PROGA",timclose);
endif;
КонецПроцедуры


Во, а команда в Процедура ПриНачалеРаботыСистемы()
ОбработкаОжидания("ЗакрытьПрогу",60); // 60 - секунды

меняется на

timclose=1;
ОбработкаОжидания("ЗакрытьПрогу",60); // 60 - секунды
timclose=60;


у меня так, если чел заходит, то видит надпись и вываливается, а если работает то есть минута на размышение
37. Вячеслав Н. Бойко (boy13) 28.04.10 09:40
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа