Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Проверка наличия уже запущенной внеш. обработки? (число прочтений - 4626 )
Jkey
Full Member
***
Отсутствует


Вникаю ... 1С++ : )

Сообщений: 106
Местоположение: Орск
Зарегистрирован: 26. Июня 2006
Пол: Мужской
Проверка наличия уже запущенной внеш. обработки?
28. Ноября 2007 :: 05:55
Печать  
на основе ссылки http://www.forum.mista.ru/topic.php?id=181829&area=terminal
сделал запуск блокировки работы системы в глобальнике
пример кода
Код
Выбрать все
Процедура глПроверкаПростоя()
    // процедура вызывается каждые 10 секунд
    глВремяПростоя = глВремяПростоя + 1;
    Если глВремяПростоя = 6 Тогда
	  Если // как тут проверить наличие
		// уже запущенной внешней обработки LogonUser.ert
		//..
	  Иначе
		Окна = СоздатьОбъект("Окна");
		Окна.МинимизироватьВТрей(1);
		Окна.Минимизировать();
		СписокПараметров= СоздатьОбъект("СписокЗначений");
		СписокПараметров.ДобавитьЗначение(глПользователь);

		Если ФС.СуществуетФайл(КаталогИБ()+"ExtForms\LogonUser.ert")=1 Тогда
		    rt");
		Иначе
		    Предупреждение("Не найден файл <LogonUser.ert> в папке: "+КаталогИБ()+"ExtForms\"
		    +РазделительСтрок+РазделительСтрок+
		    "Сообщите программисту о данном Сообщении и опишите Операцию при которой возникло сообщение !!!", 60);
		КонецЕсли;
		Окна.Максимизировать();
		Окна="";
	  КонецЕсли;
	  глВремяПростоя = 0;
    КонецЕсли;
КонецПроцедуры
 

  
Наверх
ICQ  
IP записан
 
Jkey
Full Member
***
Отсутствует


Вникаю ... 1С++ : )

Сообщений: 106
Местоположение: Орск
Зарегистрирован: 26. Июня 2006
Пол: Мужской
Re: Проверка наличия уже запущенной внеш. обработк
Ответ #1 - 28. Ноября 2007 :: 07:10
Печать  
вобщем добавил проверку -  вроде работает
Код
Выбрать все
Процедура глПроверкаПростоя()
    Перем Конт;
    // процедура вызывается каждые 10 секунд
    глВремяПростоя = глВремяПростоя + 1;
    Если глВремяПростоя = 6 Тогда
	  Если Сервис.АктивныйКонтекст(Конт) = 0 Тогда
		Окна = СоздатьОбъект("Окна");
		Окна.МинимизироватьВТрей(1);
		Окна.Минимизировать();
		СписокПараметров= СоздатьОбъект("СписокЗначений");
		СписокПараметров.ДобавитьЗначение(глПользователь);

		Если ФС.СуществуетФайл(КаталогИБ()+"ExtForms\LogonUser.ert")=1 Тогда
		   ert");
		Иначе
		    Предупреждение("Не найден файл <LogonUser.ert> в папке: "+КаталогИБ()+"ExtForms\"
		    +РазделительСтрок+РазделительСтрок+
		    "Сообщите программисту о данном Сообщении и опишите Операцию при которой возникло сообщение !!!", 60);
		КонецЕсли;
		Окна.Максимизировать();
		Окна="";
	  КонецЕсли;
	  глВремяПростоя = 0;
    КонецЕсли;
КонецПроцедуры
 

« Последняя редакция: 28. Ноября 2007 :: 10:20 - Jkey »  
Наверх
ICQ  
IP записан
 
Jkey
Full Member
***
Отсутствует


Вникаю ... 1С++ : )

Сообщений: 106
Местоположение: Орск
Зарегистрирован: 26. Июня 2006
Пол: Мужской
Re: Проверка наличия уже запущенной внеш. обработк
Ответ #2 - 28. Ноября 2007 :: 09:57
Печать  
Все работает превосходно, только правильная ли проверка?
  
Наверх
ICQ  
IP записан
 
Jkey
Full Member
***
Отсутствует


Вникаю ... 1С++ : )

Сообщений: 106
Местоположение: Орск
Зарегистрирован: 26. Июня 2006
Пол: Мужской
Re: Проверка наличия уже запущенной внеш. обработк
Ответ #3 - 28. Ноября 2007 :: 12:31
Печать  
нет вру. не совсем работает, если пустое окно - то работает
если журнал или что-то другое, то Сервис.АктивныйКонтекст(Конт) все равно в 1
думаю...
  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Проверка наличия уже запущенной внеш. обработк
Ответ #4 - 28. Ноября 2007 :: 17:00
Печать  
Можт тебе нужен Сервис::СписокВсехОткрытыхОкон() ?

В контексте обработки она сама себя видит даже таким тупым образом
Код
Выбрать все
//*******************************************
Процедура Сформировать()
	серв = СоздатьОбъект("Сервис");
	сп = серв.СписокВсехОткрытыхОкон();
	Если ( сп.НайтиЗначение( Контекст )  <> 0 ) Тогда
		Сообщить( "Я есть!" );
	Иначе
		Сообщить( "Ой.." );
	КонецЕсли;
КонецПроцедуры 


Хотя у тебя контекст глобального модуля, и тебе искать её в этом списке придётся по другому.
  
Наверх
ICQ  
IP записан
 
Jkey
Full Member
***
Отсутствует


Вникаю ... 1С++ : )

Сообщений: 106
Местоположение: Орск
Зарегистрирован: 26. Июня 2006
Пол: Мужской
Re: Проверка наличия уже запущенной внеш. обработк
Ответ #5 - 29. Ноября 2007 :: 05:01
Печать  
dnp писал(а) 28. Ноября 2007 :: 17:00:
Можт тебе нужен Сервис::СписокВсехОткрытыхОкон() ?

В контексте обработки она сама себя видит даже таким тупым образом
Код
Выбрать все
//*******************************************
Процедура Сформировать()
	серв = СоздатьОбъект("Сервис");
	сп = серв.СписокВсехОткрытыхОкон();
	Если ( сп.НайтиЗначение( Контекст )  <> 0 ) Тогда
		Сообщить( "Я есть!" );
	Иначе
		Сообщить( "Ой.." );
	КонецЕсли;
КонецПроцедуры 


Хотя у тебя контекст глобального модуля, и тебе искать её в этом списке придётся по другому.

Спасибо, тоже сначала хотел пойти по этому пути - "СписокВсехОткрытыхОкон()"
Но сегодня ночью во сне осенило, а нафига извращаться, не проще ли завести Переменную ФлагErtLogOnUser взвести в 0 и проверять его.
Вообщем не стал заморачиваться с поиском контекста внешней обработки (хотя нужно бы для дальнейшего использования) вот что сделал:
Завел глобальную перем ФлагErtLogOnUser
Код
Выбрать все
ПриНачалеЗагрузкиСистемы()
//...
Если ПустоеЗначение(глПользователь.ВремяБлокировки)=0 Тогда
    ФлагErtLogOnUser = 0;
    Сервис.ОбработкаОжидания("глПроверкаПростоя",10000);
КонецЕсли;
//...


Процедура глПроверкаПростоя()
  // процедура вызывается каждые 10 секунд

  глВремяПростоя = глВремяПростоя + 1;
  //Сообщить("ФлагErtLogOnUser "+Строка(ФлагErtLogOnUser)); //отладка
  //Сообщить("глВремяПростоя "+Строка(глВремяПростоя)); //отладка

  Если глВремяПростоя = 6*глПользователь.ВремяБлокировки Тогда
    //глПользователь.ВремяБлокировки - реквизит для пользователя через сколько минут
    Если ФлагErtLogOnUser = 0 Тогда
	ФлагErtLogOnUser = 1;

	Окна = СоздатьОбъект("Окна");
	Окна.МинимизироватьВТрей(1);
	Окна.Минимизировать();

	СписокПараметров= СоздатьОбъект("СписокЗначений");
	СписокПараметров.ДобавитьЗначение(глПользователь);

	Если ФС.СуществуетФайл(КаталогИБ()+"ExtForms\LogonUser.ert") = 1 Тогда
	   rt");
	Иначе
	   Предупреждение("Не найден файл <LogonUser.ert> в папке: "+КаталогИБ()+"ExtForms\"
	   +РазделительСтрок+РазделительСтрок+
	   "Сообщите программисту о данном Сообщении и опишите Операцию при которой возникло сообщение !!!", 60);
	КонецЕсли;
	Окна.МинимизироватьВТрей(0);
	Окна.Максимизировать();
	Окна="";
	ФлагErtLogOnUser = 0; // но пока не выполнена модальная обработка
    КонецЕсли;
    глВремяПростоя = 0;
  КонецЕсли;
КонецПроцедуры
 

  
Наверх
ICQ  
IP записан
 
Jkey
Full Member
***
Отсутствует


Вникаю ... 1С++ : )

Сообщений: 106
Местоположение: Орск
Зарегистрирован: 26. Июня 2006
Пол: Мужской
Re: Проверка наличия уже запущенной внеш. обработк
Ответ #6 - 29. Ноября 2007 :: 05:40
Печать  
Но один минус если висит модальное окно выбора значения из списка то его нужно закрыть
по типу если юзер запустил ввод заявки и появилось окно выбора типа заявки
потом отошел от компа через Сервис.ОбработкаОжидания("глПроверкаПростоя",10000) запускается моя обработка блокировки системы с предложением ввода пароля
после ввода пароля в обработке окно выбора из списка зависает и становится не доступным и при завершении 1С вываливается ошибка.
щас буду пытаться отлавливать эти глюки
думаю это связано с объектом Окна FormEX
  
Наверх
ICQ  
IP записан
 
metaeditor
1c++ power user
Отсутствует


are you nuts?

Сообщений: 564
Зарегистрирован: 04. Июля 2006
Пол: Мужской
Re: Проверка наличия уже запущенной внеш. обработк
Ответ #7 - 30. Ноября 2007 :: 08:16
Печать  
а не проще посылать главному окну системную комманду "Временная блокировка" (32805)
чем открывать обработку?
  

Регистр.EAX.СводныйОстаток()
Наверх
 
IP записан
 
Jkey
Full Member
***
Отсутствует


Вникаю ... 1С++ : )

Сообщений: 106
Местоположение: Орск
Зарегистрирован: 26. Июня 2006
Пол: Мужской
Re: Проверка наличия уже запущенной внеш. обработк
Ответ #8 - 05. Декабря 2007 :: 14:12
Печать  
metaeditor писал(а) 30. Ноября 2007 :: 08:16:
а не проще посылать главному окну системную комманду "Временная блокировка" (32805)
чем открывать обработку?

Ужас Это как? (используюя только FormEx, turbobl)
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проверка наличия уже запущенной внеш. обработк
Ответ #9 - 05. Декабря 2007 :: 14:24
Печать  
RWidjets
  
Наверх
 
IP записан
 
Jkey
Full Member
***
Отсутствует


Вникаю ... 1С++ : )

Сообщений: 106
Местоположение: Орск
Зарегистрирован: 26. Июня 2006
Пол: Мужской
Re: Проверка наличия уже запущенной внеш. обработк
Ответ #10 - 06. Декабря 2007 :: 11:16
Печать  
metaeditor писал(а) 30. Ноября 2007 :: 08:16:
а не проще посылать главному окну системную комманду "Временная блокировка" (32805)
чем открывать обработку?


Arta писал(а) 05. Декабря 2007 :: 14:24:
RWidjets


Спасибо вам большое ребята. Сразу разобрался. Работает.
  
Наверх
ICQ  
IP записан
 
Jkey
Full Member
***
Отсутствует


Вникаю ... 1С++ : )

Сообщений: 106
Местоположение: Орск
Зарегистрирован: 26. Июня 2006
Пол: Мужской
Re: Проверка наличия уже запущенной внеш. обработк
Ответ #11 - 10. Декабря 2007 :: 05:47
Печать  
metaeditor, Arta
Как остановить тогда действие Сервис.ОбработкаОжидания("глПроверкаПростоя",10000) FormEx, на время действия времменной блокировки?
Т.к. в моем примере с внешней обработкой
пока не отработается модальное окно установленый флаг в 1 (который проверяется если 0 то запускается обработка) не перейдет в 0 пока неотработается обработка..
Здесь http://www.1cpp.ru/bugs/show_bug.cgi?id=1792 что-то про простой
но непонятно
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать