Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Перехватчик и СтатусВозврата(0) в .ert (число прочтений - 2241 )
novichek
Экс-Участник


Перехватчик и СтатусВозврата(0) в .ert
14. Августа 2008 :: 07:22
Печать  
Особо серьезно с перехватчиком не сталкивался, а тут вот пришлось... и сразу проблемка:
Есть класс экземпляр которого создается в каждом внешнем отчете. Класс пытается перехватывать и отрабатывать события ПриОткрытии и ПриЗакрытии формы внешнего отчета (для логирования). Почему-то, если перехват включен, то код "СтатусВозврата(0); Возврат;" в форме отчета не закрывает его.

Тест прилагается.
1с++ 3.0.1.13
Formex вроде 2.0 (но вообще без него эффект тот же)
Мож просто чего не так делаю?
  

temp.zip ( 20 KB | Загрузки )
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и СтатусВозврата(0) в .ert
Ответ #1 - 14. Августа 2008 :: 07:33
Печать  
1. У тебя циклическая ссылка - контекст отчета хранит объект-обработчика перехвата, а этот обработчик хранит контекст отчета. Так нельзя, будет потеря памяти, т.к. объект никогда не уничтожится Печаль
В отчете хранить этот объект не нужно, после перехвата он хранится внутри 1С!
2. а зачем ты юзаешь ЗаменитьБазовыйКласс на КонтФормы? это совсем не обязательно, даже лишнее.

См.дальше.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и СтатусВозврата(0) в .ert
Ответ #2 - 14. Августа 2008 :: 07:35
Печать  
Нужный тебе ответ
Код
Выбрать все
Функция Событие_ПриОткрытии(Конт, ФлагЧтенияНастройки) Экспорт
	Перем Сам;

	Сообщить("Событие при открытии класса №1");
	_Перехватчик.ВыполнитьОригинальноеСобытиеГК(ГрупКонт,"ПриОткрытии");
	Сообщить("Событие при открытии класса №2");
	Возврат 1;
КонецФункции
 


неверно юзаешь Печаль
Правильно так
Код
Выбрать все
Функция Событие_ПриОткрытии(ФлагЧтенияНастройки) Экспорт // !!! БЕЗ Конт !!!
	Перем Сам;

	Сообщить("Событие при открытии класса №1");
	лСтатусВозврата = _Перехватчик.ВыполнитьОригинальноеСобытиеГК(ГрупКонт,"ПриОткрытии");
	Сообщить("Событие при открытии класса №2");
	Возврат лСтатусВозврата; // !!
КонецФункции
 


  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и СтатусВозврата(0) в .ert
Ответ #3 - 14. Августа 2008 :: 07:36
Печать  
Читай доку, там про СтатусВозврата вроде подробно описано !
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
novichek
Экс-Участник


Re: Перехватчик и СтатусВозврата(0) в .ert
Ответ #4 - 14. Августа 2008 :: 07:59
Печать  
artbear писал(а) 14. Августа 2008 :: 07:33:
1. У тебя циклическая ссылка - контекст отчета хранит объект-обработчика перехвата, а этот обработчик хранит контекст отчета. Так нельзя, будет потеря памяти, т.к. объект никогда не уничтожится Печаль
В отчете хранить этот объект не нужно, после перехвата он хранится внутри 1С!

Нутром чувствовал что так низзя, но если обработчике, н.р. Событие_ПриОткрытии, в ВыполнитьОригинальноеСобытиеГК передать доступный здесь Конт, то вываливается с ошибкой "Необходимо передать групповой контекст" :/

artbear писал(а) 14. Августа 2008 :: 07:33:
2. а зачем ты юзаешь ЗаменитьБазовыйКласс на КонтФормы? это совсем не обязательно, даже лишнее.


Ок, попробую убрать.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и СтатусВозврата(0) в .ert
Ответ #5 - 14. Августа 2008 :: 08:02
Печать  
Цитата:
artbear писал(а) 14. Августа 2008 :: 07:33:
1. У тебя циклическая ссылка - контекст отчета хранит объект-обработчика перехвата, а этот обработчик хранит контекст отчета. Так нельзя, будет потеря памяти, т.к. объект никогда не уничтожится Печаль
В отчете хранить этот объект не нужно, после перехвата он хранится внутри 1С!

Нутром чувствовал что так низзя, но если обработчике, н.р. Событие_ПриОткрытии, в ВыполнитьОригинальноеСобытиеГК передать доступный здесь Конт, то вываливается с ошибкой "Необходимо передать групповой контекст" :/

1. Так ты не храни в отчете ссылку на класс-перехватчик, а вот в классе-перехватчике храни ссылку на контекст формы, полученный в Инит, и используй этот хранимый контекст для передачи в ВыполнитьОригинальноеСобытиеГК.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
novichek
Экс-Участник


Re: Перехватчик и СтатусВозврата(0) в .ert
Ответ #6 - 14. Августа 2008 :: 08:15
Печать  
artbear писал(а) 14. Августа 2008 :: 08:02:
1. Так ты не храни в отчете ссылку на класс-перехватчик, а вот в классе-перехватчике храни ссылку на контекст формы, полученный в Инит, и используй этот хранимый контекст для передачи в ВыполнитьОригинальноеСобытиеГК.


Стоп.
1. Есть класс "отчет", который обслуживает все внешние обработки. Мне казалось вполне логичным, чтобы он, заодно и перехватывал некоторые события. Ты, я так понимаю, предлагаешь разделить их на 2, выделив отдельно класс обработчик перехвата? Надо думать. Что-то плохо они представляются по отдельности...

2. Что такое передается в обработчик Событие_ПриОткрытии(Конт,... первым параметром?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и СтатусВозврата(0) в .ert
Ответ #7 - 14. Августа 2008 :: 08:23
Печать  
Цитата:
artbear писал(а) 14. Августа 2008 :: 08:02:
1. Так ты не храни в отчете ссылку на класс-перехватчик, а вот в классе-перехватчике храни ссылку на контекст формы, полученный в Инит, и используй этот хранимый контекст для передачи в ВыполнитьОригинальноеСобытиеГК.


Стоп.
1. Есть класс "отчет", который обслуживает все внешние обработки. Мне казалось вполне логичным, чтобы он, заодно и перехватывал некоторые события. Ты, я так понимаю, предлагаешь разделить их на 2, выделив отдельно класс обработчик перехвата? Надо думать. Что-то плохо они представляются по отдельности...

Не надо стоп. Я говорю не про класс "отчет", а про твой тестовый отчет, в котором ты создаешь объект класса-перехватчика и неверно хранишь этот самый объект!

Цитата:
2. Что такое передается в обработчик Событие_ПриОткрытии(Конт,... первым параметром?

Читай доку - в события формы не передается контекста, т.е. у Событие_ПриОткрытии нет параметра Конт !
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и СтатусВозврата(0) в .ert
Ответ #8 - 14. Августа 2008 :: 08:24
Печать  
Цитата:
Код
Выбрать все
Функция Событие_ПриОткрытии(Конт, ФлагЧтенияНастройки) Экспорт
КонецФункции
 



Опаньки, не заметил Печаль Такое описание обработчика неверно
Правильно
Функция Событие_ПриОткрытии(ФлагЧтенияНастройки) Экспорт
т.е. без Конт

В обработчики локальных событий формы (типа ПриОткрытии) контекст не передается.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать