Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Странная работа перехватчика... (число прочтений - 7162 )
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Странная работа перехватчика...
21. Июля 2009 :: 14:04
Печать  
Артур, наткнулся тут на один косяк, тест пока не нарисовал, но если в двух словах, то суть в том, что наблюдается разная работа оригинального обработчика события "ПриОткрытии" в зависимости от того, определен ли в перехватчике перехват события "ПриИзмененииРазмераОкна".

Т.е. 2 ситуации:

1. есть класс-перехватчик, определен только перехват события "ПриОткрытии"

2. есть класс-перехватчик, определены перехваты "ПриОткрытии" и "ПриИзмененииРазмераОкна"

так вот во втором случае некорректно работает оригинальный обработчик "ПриОткрытии"

не знаю, насколько понятно объяснил, дело в том, что тест непросто нарисовать будет похоже..
у меня в форме списка справочника в оригинальном обработчике не срабатывает код "АктивизироватьОбъект", долго искал, отрубил перехват "ПриИзмененииРазмераОкна" и все взлетело, связи не улавливаю...

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

если неработающий код перенести из "ПриОткрытии" в "ПослеОткрытия", то все работает нормально

1cpp.dll  3.0.1.22
formex.dll 2.0.5.93 beta

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Странная работа перехватчика...
Ответ #1 - 22. Июля 2009 :: 04:09
Печать  
Без теста понять сложно Печаль
Попробуй все-таки получить тест
  

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


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Странная работа перехватчика...
Ответ #2 - 22. Июля 2009 :: 06:49
Печать  
тест постараюсь нарисовать, спросил на словах просто потому, что думал - может какой известный косяк нашел..
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Странная работа перехватчика...
Ответ #3 - 23. Июля 2009 :: 08:12
Печать  
вот нарисовал тест, Артур, будет минутка - глянь одним глазом пож Улыбка

в конфе есть один справочник, в нем есть предопределенная процедура "ПриОткрыии"
есть два класса-перехватчика
нужно открыть отчет "Тест", там 2 кнопки
  

Bug_5.rar ( 15 KB | Загрузки )
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Странная работа перехватчика...
Ответ #4 - 28. Июля 2009 :: 10:16
Печать  
по этому багу никто не может подтвердить - есть или нет?
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Странная работа перехватчика...
Ответ #5 - 11. Августа 2009 :: 14:23
Печать  
блин, этот баг рушит всю мою систему перехвата на основе подписки... Печаль
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Странная работа перехватчика...
Ответ #6 - 14. Августа 2009 :: 08:35
Печать  
ковыряю от безысходности свою тестовую базу и обнаружил, что если в обработчике события "ПриИзмененииРазмераОкна" принудительно вызвать обработчик "ВыполнитьОригинальноеСобытиеГК(_Контекст,"ПриОткрытии")", то глюк пропадает, но это же не вариант, не вызывать же при каждом событии "ПриИзмененииРазмераОкна"...

короче придется выдумывать что то хитро-выкрученное... Печаль
  
Наверх
 
IP записан
 
sashas09
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Местоположение: Киев
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Странная работа перехватчика...
Ответ #7 - 14. Августа 2009 :: 08:40
Печать  
а что должно быть?

При нажатии на кнопку "Перехватчик1" в строке состояния:

Перехватчик 1
Перехватчик1: ПриОткрытии
Справочник: ПриОткрытии

При нажатии на кнопку "Перехватчик2" в строке состояния:

Перехватчик 2
Перехватчик2: ПриОткрытии
Справочник: ПриОткрытии
Перехватчик2: ПриИзмененииРазмераОкна
Перехватчик2: ПриИзмененииРазмераОкна
Перехватчик2: ПриИзмененииРазмераОкна
  
Наверх
ICQ  
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Странная работа перехватчика...
Ответ #8 - 14. Августа 2009 :: 08:44
Печать  
неправильно отрабатывается оригинальное событие "ПриОткрытии" формы списка справочника.
там активизация третьего элемента, в одном случае срабатывает, в другом нет.. Печаль
Артуру писал, но он молчит..
мне теперь придется обратно всю систему перехвата с подписки переделывать на старый вариант Печаль
  
Наверх
 
IP записан
 
sashas09
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Местоположение: Киев
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Странная работа перехватчика...
Ответ #9 - 14. Августа 2009 :: 09:14
Печать  
я бы сказал - ".. не так все было, не так..."

Меняем в форме списка справочника
Код
Выбрать все
Процедура ПриОткрытии()
  _Спр = СоздатьОбъект("Справочник.Справочник");
  Если _Спр.НайтиПоКоду(3) > 0 Тогда
    АктивизироватьОбъект(_Спр.ТекущийЭлемент());
    Сообщить("найден и активизирован "+_Спр.ТекущийЭлемент());
  КонецЕсли;
  Сообщить("Справочник: ПриОткрытии");
КонецПроцедуры 



а в Система.Перехватчик.Справочник2
Код
Выбрать все
Функция Событие_ПриИзмененииРазмераОкна(_Тип,_Ширина,_Высота) Экспорт
	Сообщить("Перехватчик2: ПриИзмененииРазмераОкна");
	Сообщить("текущийЭлемент="+_Контекст.ТекущийЭлемент());
	Возврат _Тип,_Ширина,_Высота);
КонецФункции 



в строке состояния -

Перехватчик2: ПриОткрытии
найден и активизирован Элемент 3
Справочник: ПриОткрытии
Перехватчик2: ПриИзмененииРазмераОкна
текущийЭлемент=
Перехватчик2: ПриИзмененииРазмераОкна
текущийЭлемент=Элемент 1
Перехватчик2: ПриИзмененииРазмераОкна
текущийЭлемент=Элемент 1

Вывод?

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


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Странная работа перехватчика...
Ответ #10 - 14. Августа 2009 :: 09:17
Печать  
да интересно, ща погляжу..
тока не понял, какой вывод Улыбка
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Странная работа перехватчика...
Ответ #11 - 14. Августа 2009 :: 09:28
Печать  
вот такой код в форме списка
Код
Выбрать все
Процедура ПриОткрытии()
	Сообщить("Справочник: ПриОткрытии");
	Сообщить("Текущий элемент: " + ТекущийЭлемент());
	_Спр = СоздатьОбъект("Справочник.Справочник");
	Если _Спр.НайтиПоКоду(3) > 0 Тогда
		АктивизироватьОбъект(_Спр.ТекущийЭлемент());
	КонецЕсли;
	Сообщить("Текущий элемент: " + ТекущийЭлемент());
КонецПроцедуры 



код в перехватчике
Код
Выбрать все
Функция Событие_ПриОткрытии() Экспорт
	Сообщить("Перехватчик2: ПриОткрытии");
	Сообщить("Текущий элемент: " + _Контекст.ТекущийЭлемент());
	Возврат _Перехватчик.ВыполнитьОригинальноеСобытиеГК(_Контекст,"ПриОткрытии");
КонецФункции

Функция Событие_ПриИзмененииРазмераОкна(_Тип,_Ширина,_Высота) Экспорт
	Сообщить("Перехватчик2: ПриИзмененииРазмераОкна");
	Сообщить("Текущий элемент: " + _Контекст.ТекущийЭлемент());
	Возврат _Тип,_Ширина,_Высота);
КонецФункции 



результат
Код
Выбрать все
Перехватчик 2
Перехватчик2: ПриОткрытии
Текущий элемент:

Справочник: ПриОткрытии
Текущий элемент:
Текущий элемент:

Перехватчик2: ПриИзмененииРазмераОкна
Текущий элемент:

Перехватчик2: ПриИзмененииРазмераОкна
Текущий элемент: Элемент 1 

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


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Странная работа перехватчика...
Ответ #12 - 14. Августа 2009 :: 09:36
Печать  
На мой взгляд, наблюдается различие в работе оригинального обработчика события "ПриОткрытии" формы списка справочника в зависимости от того, есть ли обработчик события "ПриИзмененииРазмераОкна" в перехватчике формы, что есть неправильно и приводит к различным непредсказуемым результатам, что я и вылавливаю последние недели 2-3..
  
Наверх
 
IP записан
 
sashas09
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Местоположение: Киев
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Странная работа перехватчика...
Ответ #13 - 14. Августа 2009 :: 09:55
Печать  
Чегой-то я и сам уже путаюсь
в форме списка
Код
Выбрать все
Процедура ПриОткрытии()
  _Спр = СоздатьОбъект("Справочник.Справочник");
  Если _Спр.НайтиПоКоду(3) > 0 Тогда
    АктивизироватьОбъект(_Спр.ТекущийЭлемент());
    Сообщить("найден и активизирован "+_Спр.ТекущийЭлемент());
    Сообщить("найден и активизирован "+ТекущийЭлемент());
  КонецЕсли;
  Сообщить("Справочник: ПриОткрытии");
КонецПроцедуры
 



имеем воооот такое

найден и активизирован Элемент 3
найден и активизирован
  
Наверх
ICQ  
IP записан
 
sashas09
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Местоположение: Киев
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Странная работа перехватчика...
Ответ #14 - 14. Августа 2009 :: 09:58
Печать  
и еще -

мож не надо называть так интересно справочник - "Справочник"

уж очень интересна конструкция
Код
Выбрать все
СоздатьОбъект("Справочник.Справочник") 



попробуй переименовать - мож чего лучше будет?
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать