Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Как перехватить событие созданного объекта? (число прочтений - 3289 )
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Как перехватить событие созданного объекта?
20. Апреля 2008 :: 17:19
Печать  
Хочу порулить элементом справочника, созданного через ОткрытьФорму
Пишу такой код:
Код
Выбрать все
	Перехватчик = СоздатьОбъект("Перехватчик");
	КонтФормы = 0;
	ОткрытьФорму("Элемент." + ТекущийВид, КонтФормы);
	Перехватчик.ПерехватитьСобытияГК(КонтФормы, Сам());
 


И... Ничего не ловится... В какую сторону копать?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как перехватить событие созданного объекта?
Ответ #1 - 21. Апреля 2008 :: 04:59
Печать  
1. Читаем доку
2. Момент открытия/создания формы/элемента можно отследить только через глобальный перехват СобытиеГМ_ПриОткрытии, СобытиеГМ_ВводНового, СобытиеГМ_ВводНовогоНаОсновании.
А твой перехват будет действовать на все события формы уже после ее открытия.
3. И еще раз читаем доку Улыбка
  

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


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как перехватить событие созданного объекта?
Ответ #2 - 21. Апреля 2008 :: 05:04
Печать  
Вообще-то я хотел поймать "ПриЗаписи". То есть событие, которое гарантированно возникнет после открытия формы. Но... Не ловится.
Спасибо. Пойду поучусь работать с присоединяемыми глобальными модулямиУлыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как перехватить событие созданного объекта?
Ответ #3 - 21. Апреля 2008 :: 05:46
Печать  
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 записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как перехватить событие созданного объекта?
Ответ #4 - 21. Апреля 2008 :: 06:38
Печать  
Да, про глоб. модули - это тупиковая мысль.
А задача такова:
Делаю класс, который будет управлять форой списка справочника, используя ф-цию ИспользоватьСписокОбъектов. Вариант с ТП пробовал - плохо, при частом создании/уничтожении ТП 1С время от времени выполняет невыполнимое.
Все хорошо и красиво, но когда пользователь создает новый элемент, жмет "ОК" и не видит элемента в списке... Мягко говоря, пользователей это пугает.
Вывод: нужно ловить "ПриЗаписи", выполнять оригинальный обработчик, если СтатусВозврата после этого не сброшен - записать элемент и обновить список.
А как это сделать красиво - пока не пойму. Ловить СобытиеГМ_ПриОткрытии, создать еще одни класс, который ловит события от элементов справочника? Сразу требуется что-то вроде менеджера событий - т. е. класса, который будет висеть единственным экземпляром в глобальнике и разруливать события? Можно, но что-то слишком сложно получается.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как перехватить событие созданного объекта?
Ответ #5 - 21. Апреля 2008 :: 06:56
Печать  
1. Про форму справочника и ТП не согласен.
Есть реальные примеры реализации для скуля - например, в разделе Репозитарий.
2. Я же тебе говорю, показывай свой код перехвата ПриЗаписи - для этого перехвата глоб. перехват не нужен. У тебя где-то ошибка Улыбка
  

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


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как перехватить событие созданного объекта?
Ответ #6 - 21. Апреля 2008 :: 07:09
Печать  
Код
Выбрать все
// ===============================
Процедура Событие_ПриЗаписи() Экспорт
	Сообщить("Перехвата получился однако");
КонецПроцедуры //Событие_ПриЗаписи()
// ===============================
Процедура ПриНажатииКнопкиКлавиатуры(КК, Alt, Shift, Ctrl, Символ, ФСО)
	Если КК = 45 Тогда // insert
		ФСО = 0;
		КонтФормы = 0;
		ОткрытьФорму("Элемент." + внКонтекст.Вид(), КонтФормы, ТекущийЭлемент().Родитель);
		ПерехватчикЗаписи.ПерехватитьСобытияГК(КонтФормы, Сам());

	ИначеЕсли КК = 120 Тогда //F9, копировать
		ОткрытьФорму("Элемент." + внКонтекст.Вид(), , ТекущийЭлемент().Родитель);
	КонецЕсли;
КонецПроцедуры //ПриНажатииКнопкиКлавиатуры
// ===============================
Процедура Событие_ПриНажатииКнопкиКлавиатуры(КК, Alt, Shift, Ctrl, Символ, ФСО) Экспорт
	ПриНажатииКнопкиКлавиатуры(КК, Alt, Shift, Ctrl, Символ, ФСО);
	Перехватчик.ВыполнитьОригинальноеСобытиеГК(внКонтекст, "ПриНажатииКнопкиКлавиатуры", КК, Alt, Shift, Ctrl, Символ, ФСО);
КонецПроцедуры //Событие
 


Создаю два объекта "Перехватчик" - Перехватчик - ловит события формы списка, а ПерехватчикЗаписи должен по идее ловить события формы элемента. Если названия событий совпадут - разрулю флагами.
ТП падает при использовании кнопки "Х" - т. е. при очистке значения фильтра.
  
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как перехватить событие созданного объекта?
Ответ #7 - 21. Апреля 2008 :: 07:12
Печать  
Странно... Эксперименты показали, что "ПриЗакрытии" таким методом ловится отлично...
Давно пора указать, что:
1С ++ 2.5.0.5
FormEx 83
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как перехватить событие созданного объекта?
Ответ #8 - 21. Апреля 2008 :: 10:05
Печать  
1. В 2.5.0.5 работа Перехватчика не гарантирована Улыбка
Юзай 2.5.0.6
2. Мне все равно непонятно, как ты юзаешь Перехватчик.
Из указанного кода видно, что падать не должно.
3. И подробнее про два объекта перехватчика.

Попробуй п.1 и отпишись
  

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