Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Как по таймауту закрыть сессию 1с корректно (число прочтений - 13783 )
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Как по таймауту закрыть сессию 1с корректно
01. Августа 2008 :: 03:16
Печать  
Вопрос избитый, но всё же. Таймаут  можно задать через Сервис.ОбработкаОжидания. Но как правильно закрыть такое (ВНИМАНИЕ ТЕСТОВЫЙ СЛУЧАЙ) например в комплексной открываем форму элемента справочника сотрудники из которой открыли модальное окно физлица(кнопочка O), а из которого делают подбор адреса (кнопочка ввод адреса регистрации) .

Пробовал делать двумя способами, ни один не работает Formex 91 билд

1 способ
Код
Выбрать все
//[+] ev-kov@2008.04.30 08:40
Процедура Таймер()
	Перем час,мин_,сек;
    
	ПрошлоВремени = Информатор.ПолучитьВремяПростояСистемы();


	Если ПрошлоВремени/1000 > 1 Тогда  // 1 час  = 360000

			//{ закроем все окна
			Окно = СоздатьОбъект("Окна");
			Окно.ЗакрытьВсеОкна();

			//}

			ЗавершитьРаботуСистемы(0);
	КонецЕсли  
КонецПроцедуры//[+]_ 



2 способ
Код
Выбрать все
//[+] ev-kov@2008.04.30 08:40
Процедура Таймер()
	Перем час,мин_,сек;
    
	ПрошлоВремени = Информатор.ПолучитьВремяПростояСистемы();


	Если ПрошлоВремени/1000 > 1 Тогда  // 1 час  = 360000

			//{ закроем все формы, в том числе модальные
			ОткрытыеОкна = _Сервис.СписокВсехОткрытыхОкон();
			Расш = СоздатьОбъект("РасширениеФормы");
			Для ъ=1 По ОткрытыеОкна.РазмерСписка() Цикл
				Расш.УстановитьФорму(ОткрытыеОкна.ПолучитьЗначение(ъ,).Форма);
				Расш.Закрыть();
			КонецЦикла;
			//}

			ЗавершитьРаботуСистемы(0);
	КонецЕсли  
КонецПроцедуры//[+]_ 




1 способ закрывает окно ввода адреса, далее 1с начинае "моргать в статус" типа что то усиленно делает и тормозит, итог закрытия сессии нет

2 способ закрывает окно элемента справочника сотрудники, но модальное окно и подбор не закрываются, итог закрытия сессии нет

Попробовал скомбинировать сначала отрабатывал 2-й способ потом 1-й, в итоге осталось не закрытым только модальное окно физлица, 1с зависла в бесконечном цикле в попытках его закрыть (белый экран 1с)

Посоветуйте как правильно закрыть в вышеуказанном тестовом случае набор этих окон

ЗЫ: любят у нас кадровики задерживаться и забывают закрыть окошки в 1с  и саму 1с,
без модальных окон всё закрывается нормально

  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #1 - 01. Августа 2008 :: 05:38
Печать  
и пачиму после строки Расш.Закрыть() выполнение кода прерывается ?
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #2 - 01. Августа 2008 :: 06:39
Печать  
Попробуй так:
Код
Выбрать все
Для ъ=1 По ОткрытыеОкна.РазмерСписка() Цикл
	ОткрытыеОкна.ПолучитьЗначение(ъ,).Форма.Закрыть(0);
КонецЦикла;
 

  

FormEx developer
Наверх
www  
IP записан
 
Sergey
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 135
Зарегистрирован: 18. Октября 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #3 - 03. Августа 2008 :: 21:35
Печать  
Код
Выбрать все
Функция Закрыть1С() Экспорт// Нужно выполнить действия при завершении работы системы
	Wrap = CreateObject("DynamicWrapper");
	Мат=СоздатьОбъект("Math");
	Wrap.Register("USER32.DLL", "PostMessage","i=llll", "f=s", "r=l");
	Wrap.Register("USER32.DLL", "FindWindow","i=ls", "f=s", "r=l");
	WM_CLOSE = Мат.Long("0x10");// Обычное закрытие со всеми вопросами
	wm_EndSession=Мат.Long("0x16");//Нужен Wparam Не выполняет ПриЗавершении работы системы Программу закрывает корректно
	Стр="1С:Предприятие - Управленческий учет: "+ЗаголовокСистемы();
	//Сообщить(Стр);
	хэндл_вопроса=Wrap.FindWindow(0,СТр);
	Рез=Wrap.PostMessage(хэндл_вопроса,WM_CLOSE,0,0); // Должен быть обязательно либо WM_CLOSE либо  ЗавершитьРаботуСистемы
	Рез=Wrap.PostMessage(хэндл_вопроса,wm_EndSession,1,0);//Нужен Wparam Не выполняет ПриЗавершении работы системы

КонецФункции 



Попробуй так . у меня работает .Нужен dynwrap.dll. Не выполняет ПриЗавершенииработысистемы. Подходит также если в ней вываливается вопрос "Хотите завершить работу?"
  
Наверх
 
IP записан
 
Sergey
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 135
Зарегистрирован: 18. Октября 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #4 - 03. Августа 2008 :: 22:03
Печать  
хм. это был старый вариант в новом только один посыл
Код
Выбрать все
Рез=Wrap.SendMessage(хэндл_вопроса,wm_EndSession,1,0) 

  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #5 - 04. Августа 2008 :: 03:42
Печать  
Цитата:
Попробуй так:
Код
Выбрать все
Для ъ=1 По ОткрытыеОкна.РазмерСписка() Цикл
	ОткрытыеОкна.ПолучитьЗначение(ъ,).Форма.Закрыть(0);
КонецЦикла;
 


Издеваешься, Форма.Закрыть(0) на модальные никак не действует, проверил на всякий пожарный, ни одно из трёх окон не закрыло
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
RinGo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Местоположение: г.Уфа
Зарегистрирован: 18. Декабря 2007
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #6 - 04. Августа 2008 :: 04:35
Печать  
Я делаю так:
//
//****************************
//
процедура адм_закрытьВсеОкна()
 //
 перем Конт;
 //
 // адд_ОФ.закрытьВсеОкна(0); - не срабатывает при открытом/тых модальном/ных окне/окнах==>такое решение
 // (единственное, что не смог пока побороть: если выполняется обработка, то 1С вываливается, что, в принципе,
 // устраивает - закончить сеанс 1С; другое дело, если обработка выполняется в форме, открытой модально:
 // форма закрывается, но обработка не прерывается...
 //
 аддСФ=создатьОбъект("Сервис");
 аддРФ=создатьОбъект("РасширениеФормы");
 аддОФ=создатьОбъект("Окна");
 //
 окнаСЗ=аддСФ.списокВсехОткрытыхОкон();
 если окнаСЗ.размерСписка() > 0 тогда
    Конт="";
    Окно=сокрЛП(окнаСЗ.получитьЗначение(1,Конт));
    если Окно="Таблица" тогда
       // Таблица не является контекстным окном, но и не модальное
       аддОФ.закрытьВсеОкна(0);
       возврат;
    конецЕсли;
 конецЕсли;
 //
 Конт="";
 пока 1=1 цикл
    если аддСФ.активныйКонтекст(Конт)=0 тогда
       прервать;
    конецЕсли;
    если Конт.Форма.модальныйРежим()=1 тогда
           попытка
         аддРФ.установитьФорму(Конт.Форма);
         аддРФ.Закрыть();
               исключение
                   аддРФ.Закрыть();
          конецПопытки;
       иначе
          аддОФ.закрытьВсеОкна(0);
          прервать;
    конецЕсли;
 конецЦикла;
 //
конецПроцедуры
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #7 - 04. Августа 2008 :: 08:41
Печать  
Sergey
dynwrap.dll надо регать на клиенте, не всегда он там зареган ...


RinGo
вроде нормально отработал на тестовом примере, интересно нет ли случаев где этот метод не пройдёт, а так  вариант вполне работоспособен?
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
RinGo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Местоположение: г.Уфа
Зарегистрирован: 18. Декабря 2007
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #8 - 04. Августа 2008 :: 09:12
Печать  
RinGo
вроде нормально отработал на тестовом примере, интересно нет ли случаев где этот метод не пройдёт, а так  вариант вполне работоспособен?
[/quote]

Вполне работоспособна!
Как и у всех была проблема с забывчивыми юзверями, из-за которых ночером не копировалась база... Или опять-таки предупредишь всех, чтобы, скажем, в обед все вышли из сессии 1С, но... Теперь мы просто прописываем перечень регламентных работ и время их проведения... При входе в систему этот перечень сканируется, выводится соотв-ее сообщение, типа: "Внимание! Сегодня с .. по .. будут проводиться такие-то регламентные работы!"... Включается ОбработкаОжидания() на проверку этого диапазона, за Х минут с переодичностью Y выводится напоминание, и, если все-таки забыли - сеанс автлматически закрывается... Как раз перед закрытием сеанса и отрабатывает эта процедурка - адм_закрытьВсеОкна()... А на ночное копирование мы еще и выключаем "забытый" комп (через ShutDown)! А при следующем входе в систему забывчивому пользователю - сообщение, типа - "Ай-яй-яй!,,,"
  
Наверх
 
IP записан
 
Sergey
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 135
Зарегистрирован: 18. Октября 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #9 - 04. Августа 2008 :: 17:51
Печать  
Пример не понял. А если будет окно сервис-параметры открыто. А если в ПриЗавершенииРаботыСистемы будет вопрос  Закрыть или нет
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #10 - 04. Августа 2008 :: 19:03
Печать  
Цитата:
Пример не понял. А если будет окно сервис-параметры открыто. А если в ПриЗавершенииРаботыСистемы будет вопрос  Закрыть или нет


Ну, тут можно с помощью FormEx же поставить автотаймер на окна предупреждений и вопросов.
  

FormEx developer
Наверх
www  
IP записан
 
RinGo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Местоположение: г.Уфа
Зарегистрирован: 18. Декабря 2007
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #11 - 05. Августа 2008 :: 02:52
Печать  
Пример не понял. А если будет окно сервис-параметры открыто. А если в ПриЗавершенииРаботыСистемы будет вопрос  Закрыть или нет

Процедура ПриЗавершенииРаботыСистемы()
   если завершитьРаботуБезВопросов=0 тогда
       если вопрос("Завершить работу?","Да+Нет")="Нет" тогда
                  статусВозврата(0);
               иначе
         ....
       конецЕсли;
   конецЕсли;
КонецПроцедуры

А переменной завершитьРаботуБезВопросов рулишь сам!
А на открытых системных окнах, типа "Сервис-Параметры", отрабатывает - проверял...
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #12 - 05. Августа 2008 :: 04:51
Печать  
Цитата:
Ну, тут можно с помощью FormEx же поставить автотаймер на окна предупреждений и вопросов.


Это как делается?
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #13 - 05. Августа 2008 :: 07:54
Печать  
ev-kov писал(а) 05. Августа 2008 :: 04:51:
Цитата:
Ну, тут можно с помощью FormEx же поставить автотаймер на окна предупреждений и вопросов.


Это как делается?

Извиняюсь... Помню, что делал, а сейчас найти не могу Печаль
  

FormEx developer
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #14 - 05. Августа 2008 :: 11:08
Печать  
Цитата:
ev-kov писал(а) 05. Августа 2008 :: 04:51:
Цитата:
Ну, тут можно с помощью FormEx же поставить автотаймер на окна предупреждений и вопросов.


Это как делается?

Извиняюсь... Помню, что делал, а сейчас найти не могу Печаль

Алексей, мы вроде с тобой это только планировали, но так и не реализовали Печаль
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #15 - 05. Августа 2008 :: 13:53
Печать  
artbear писал(а) 05. Августа 2008 :: 11:08:
Цитата:
ev-kov писал(а) 05. Августа 2008 :: 04:51:
Цитата:
Ну, тут можно с помощью FormEx же поставить автотаймер на окна предупреждений и вопросов.


Это как делается?

Извиняюсь... Помню, что делал, а сейчас найти не могу Печаль

Алексей, мы вроде с тобой это только планировали, но так и не реализовали Печаль

Я помню, что что-то на эту тему копал. Был уверен, что в релизе это тоже было. Похоже, что накопанное мое просто затерялось в куче остального.
  

FormEx developer
Наверх
www  
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #16 - 06. Августа 2008 :: 05:51
Печать  
Так вот уважаемые.
Я ж это уже проходил.
И вопрос:
Записать документ : Да+Нет+Отмена
Это тот что вываливает 1С сама фиг вы как закроете.
А типа окно Поик по номеру
или Изменить время документа?
или Выбор штатного периода журнала?
Так что не сильно надейтесь на DynamicWrapper.
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #17 - 06. Августа 2008 :: 06:16
Печать  
varelchik писал(а) 06. Августа 2008 :: 05:51:
Так вот уважаемые.
Я ж это уже проходил.
И вопрос:
Записать документ : Да+Нет+Отмена
Это тот что вываливает 1С сама фиг вы как закроете.
А типа окно Поик по номеру
или Изменить время документа?
или Выбор штатного периода журнала?
Так что не сильно надейтесь на DynamicWrapper.

Кстати, окна, который ты перечислил, это окна одного класса #32770.
Так что для Алексея я думаю не составит труда добавить в метод ЗакрытьВсеОкна проверку наличия и закрытие окна этого класса.
Просим? Улыбка
  
Наверх
ICQ  
IP записан
 
Sergey
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 135
Зарегистрирован: 18. Октября 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #18 - 06. Августа 2008 :: 15:17
Печать  
Плохо проходил. Так как я писал вначале по

Рез=Wrap.SendMessage(хэндл_вопроса,wm_EndSession,1,0);

Оно все закрывает и сразу попробуй. Только хендл главного окна правильно получи. И компонента тут не причем она только апи функции выполняет
  
Наверх
 
IP записан
 
RinGo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Местоположение: г.Уфа
Зарегистрирован: 18. Декабря 2007
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #19 - 13. Августа 2008 :: 13:38
Печать  
     
"...ЗЫ: любят у нас кадровики задерживаться и забывают закрыть окошки в 1с  и саму 1с,
          без модальных окон всё закрывается нормально"

Так вот, если вернуться к вопросу, с которого началась сия дискуссия, то можно предположить, что вероятность того, что забывчивый юзверь не удосужился ответить на вопрос a la "Записать документ : Да+Нет+Отмена" и убежал по своим делам, очень мала, но все же есть!
У себя перед тем, как вызвать процедуру закрытия всех окон(см. сообщение от 04.08.2008) эмулирую нажатие клавиши Esc, которая закрывает все эти окна вопросов... Кстати и окна, о которых  писал Varelchik("...А типа окно Поик по номеру или Изменить время документа? или Выбор штатного периода журнала? ), тоже:
....
Сервис.ЭмулироватьКлавиатуру("{Esc}");
адм_закрытьВсеОкна();
....
И все!... Пока не было случая, чтобы не сработало! Хотя у себя логах вижу, что через день ночером хотя бы одного юзверя вот-так принудиьельно "закрываю"!


  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #20 - 14. Августа 2008 :: 03:38
Печать  
RinGo писал(а) 13. Августа 2008 :: 13:38:
     
Сервис.ЭмулироватьКлавиатуру("{Esc}");
адм_закрытьВсеОкна();
....
И все!... Пока не было случая, чтобы не сработало! Хотя у себя логах вижу, что через день ночером хотя бы одного юзверя вот-так принудиьельно "закрываю"!



Сервис.ЭмулироватьКлавиатуру("{Esc}");  по идее должно закрыть модальное окно с каким либо вопросом, нужно добавить в свой глобальник тоже.

Хотя по своим логам вижу что уже закрывает ночью периодически.

ЗЫ: У одного манагера время неправильно стояло(его выгоняло посреди рабочего дня) Улыбка
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
RinGo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Местоположение: г.Уфа
Зарегистрирован: 18. Декабря 2007
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #21 - 14. Августа 2008 :: 04:53
Печать  
"...ЗЫ: У одного манагера время неправильно стояло(его выгоняло посреди рабочего дня)"

Была такая проблема... Я решил ее так:

если адм_синхроДатыВремени <> 0 тогда
  если лев(каталогИБ(),2)="\\" тогда
     // ИБ - на другом компе ==> cинхронизация даты и времени с сервером БД
     катИБ=прав(каталогИБ(),стрДлина(каталогИБ())-2);
     поз=найти(катИБ,"\");
     серверБД=лев(катИБ,поз-1);
     WshShell=создатьОбъект("WScript.Shell");
     WshShell.Run("net time \\"+серверБД+" /SET /y",0); // 0 - WindowStyle: активизирует, но не отображает окно
   конецЕсли;
конецЕсли;

адм_синхроДатыВремени - задается у меня в параметрах системы...
И все!...
  
Наверх
 
IP записан
 
unnamed
Full Member
***
Отсутствует


0x1c = 28

Сообщений: 166
Местоположение: Chelyabinsk
Зарегистрирован: 01. Ноября 2007
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #22 - 15. Августа 2008 :: 01:34
Печать  
не так все просто... если у нас в фоне/не активном окне 1с работает какой-то отчет, а проверка на необходимость выхода происходит в переодической обработкеожидания, ни один из методов не поможет... закрытие окон от RinGo - падает 1с с виндовой ошибкой, ESC и прочее, если 1с свернута/не в фокусе, посылать бессмысленно - уйдет в другое окно. Помогает только terminate Печаль.
Делу бы помогло, если бы работала функция формекса Окна.НаПереднийПлан(); - но она в этом случае не действует (тут на эту тему уже была ветка). Впрочем, как не действует и AppActivate из WSH (по достоверно полученному PIDу). Там вообще странно все происходит...
  
Наверх
ICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #23 - 15. Августа 2008 :: 01:47
Печать  
RinGo писал(а) 14. Августа 2008 :: 04:53:
"...ЗЫ: У одного манагера время неправильно стояло(его выгоняло посреди рабочего дня)"

Была такая проблема... Я решил ее так:

если адм_синхроДатыВремени <> 0 тогда
  если лев(каталогИБ(),2)="\\" тогда
     // ИБ - на другом компе ==> cинхронизация даты и времени с сервером БД
     катИБ=прав(каталогИБ(),стрДлина(каталогИБ())-2);
     поз=найти(катИБ,"\");
     серверБД=лев(катИБ,поз-1);
     WshShell=создатьОбъект("WScript.Shell");
     WshShell.Run("net time \\"+серверБД+" /SET /y",0); // 0 - WindowStyle: активизирует, но не отображает окно
   конецЕсли;
конецЕсли;

адм_синхроДатыВремени - задается у меня в параметрах системы...
И все!...


Забавные вещи происходят, если на клиенте стоит неверный часовой пояс, устанавливается не то время которое нужно, и как итог у юзверей по тпростою начинают закрываться всякие там окошки.
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #24 - 15. Августа 2008 :: 02:43
Печать  
Мда, от Сервис.ОбработкаОжидания() пришлось отказаться, поскольку глюки выползли неожиданно, оставил только штатную обработку ожидания
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #25 - 15. Августа 2008 :: 03:18
Печать  
Ringo Откуда грузишь Сервис.ОбработкаОжидания()  из доп или основного глобальника, какая версия формекс ?
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
RinGo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 26
Местоположение: г.Уфа
Зарегистрирован: 18. Декабря 2007
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #26 - 15. Августа 2008 :: 05:58
Печать  
ev-kov писал(а) 15. Августа 2008 :: 03:18:
Ringo Откуда грузишь Сервис.ОбработкаОжидания()  из доп или основного глобальника, какая версия формекс ?


Из доп... FormEx всегда подгружаю последнюю, сейчас - 92-я...
  
Наверх
 
IP записан
 
unnamed
Full Member
***
Отсутствует


0x1c = 28

Сообщений: 166
Местоположение: Chelyabinsk
Зарегистрирован: 01. Ноября 2007
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #27 - 15. Августа 2008 :: 06:46
Печать  
с Формексовской обработкой ожидания у меня все в порядке.

Все-таки самый универсальный метод описан Сергеем:

Код
Выбрать все
Рез=Wrap.PostMessage(хэндл_вопроса,WM_CLOSE,0,0); // Должен быть обязательно либо WM_CLOSE либо  ЗавершитьРаботуСистемы
 



даже этого одного хватает - далее 1с'кой уже все можно сделать, этот пост уже прерывает выполнение отчета, если какой-то отчет формируется. никаких дальше sendkey и appactivate не надо.

единственно - для его использования из 1с прийдется dynwrap.dll регить ;-(. в принципе, это обходится через РегистрироватьКомпонентыВ_HKCU, но есть еще одно но - не хочется искать хэндл окна 1с по заголовку... вот как нибудь на использование PIDа бы переделать...

UPD. А, нет.
Валится, отчет не был завершен нормально. по Wrap.PostMessage(handl,&H16,1,0) 1с завершает работу, конечно, без проблем,
но это фактически тот же terminate, который и по PIDу можно легко выполнить через обычный WHS Печаль, насколько я понимаю.
  
Наверх
ICQ  
IP записан
 
Sergey
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 135
Зарегистрирован: 18. Октября 2006
Пол: Мужской
Re: Как по таймауту закрыть сессию 1с корректно
Ответ #28 - 01. Сентября 2008 :: 15:26
Печать  
Рез=Wrap.SendMessage(хэндл_вопроса,wm_EndSession,1,0)

Отличается от terminate тем  что 1с не выдает потом запрос на переиндексацию. Обратите внимание wm_EndSession нужно а не что другое!!!
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать