Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) как работает перехватчик объясните плиз (число прочтений - 4191 )
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
как работает перехватчик объясните плиз
07. Августа 2007 :: 09:16
Печать  
обясните плиз на одном примере допустим перехватить все события ПриЗакрытии() как это реализвовать
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: как работает перехватчик объясните плиз
Ответ #1 - 07. Августа 2007 :: 14:52
Печать  
Все очень и очень просто Улыбка

Итак, перехватываем события ПриЗакрытии для любых форм с минимальным изменением конфы - только несколько строк в глобальнике !!

1. В глобальнике после загрузки 1С++ пишешь код типа (потом лучше этот код закинуть в класс!)
Код
Выбрать все
лУправлениеНастройками = СоздатьОбъект("УправлениеНастройками");
лУправлениеНастройками.Включить("ПерехватитьСобытияГК");

лПерехватчикСобытийГМ = СоздатьОбъект("ПерехватчикСобытийГМ");  

лПерехватчик = СоздатьОбъект("Перехватчик");  
лПерехватчик.ПерехватитьСобытияГлобальногоМодуля(лПерехватчикСобытийГМ);

лПерехватчикСобытийГМ = 0; // эти переменные больше не нужны
лПерехватчик = 0;
лУправлениеНастройками = 0; 



2. Создаешь класс - "ПерехватчикСобытийГМ"
Код
Выбрать все
// ФлагЧтенияНастройки использовать только для отчетов и обработок, в остальных случаях будет пустое значение
//
Функция СобытиеГМ_ПриОткрытии(Конт, ФлагЧтенияНастройки) Экспорт
	лПерехватчикСобытийФормы = СоздатьОбъект("ПерехватчикСобытийФормы");    
	лПерехватчикСобытийФормы.Инит(Конт);
// зарегистрировали перехватчик событий формы

	лПерехватчикСобытийФормы = 0; // ссылка на этот перехватчик уже хранится внутри 1С++, поэтому можно удалить !

	Возврат 1; // Можно открывать форму
КонецФункции 



3. Создаешь класс - "ПерехватчикСобытийФормы"
Код
Выбрать все
Перем КонтФормы; // именно с этим контекстом мы будем работать !

Процедура Инит(Конт) Экспорт // сохраним нужный контекст
	КонтФормы = Конт;

	лПерехватчик = СоздатьОбъект("Перехватчик");  
	лПерехватчик.ПерехватитьСобытияГК(КонтФормы, Контекст);
	лПерехватчик = 0;
КонецПроцедуры

Функция Событие_ПриЗакрытии() Экспорт
	Сообщить("ПерехватчикФормы - событие ПриЗакрытии");
// или своя спец. обработка !!

	// при необходимости нужен вызов события из модуля формы
	// лПерехватчик = СоздатьОбъект("Перехватчик");  
	// Возврат 	лПерехватчик.ВызватьОригинальноеСобытиеГК(КонтФормы, "ПриЗакрытии");

	Возврат 1; // можно закрывать
КонецФункции 



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

Как видишь, все просто Улыбка
« Последняя редакция: 09. Августа 2007 :: 05:38 - artbear »  

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: как работает перехватчик объясните плиз
Ответ #2 - 07. Августа 2007 :: 15:02
Печать  
Сброс переменных в 0 - это просто указание, что они больше не будут использоваться.
В боевых классах естественно, этот код не нужен Улыбка
  

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: как работает перехватчик объясните плиз
Ответ #3 - 07. Августа 2007 :: 15:09
Печать  
Естественно, в боевой задаче нужно оптимизировать время обработки события.
Например, можно кешировать создание объекта Перехватчик и т.д.
Оставляю в качестве домашней работы Улыбка

ЗЫ слегка поправил свое объяснение Улыбка
  

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: как работает перехватчик объясните плиз
Ответ #4 - 07. Августа 2007 :: 15:12
Печать  
Также прошу не забывать, что указанный универсальный механизм будет работать для ЛЮБЫХ форм - т.е. как встроенных в конфу, так и для любых внешних отчетов/обработок !
  

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: как работает перехватчик объясните плиз
Ответ #5 - 07. Августа 2007 :: 15:14
Печать  
C помощью спец. методов класса "РасширениеФорм" ВК FormEx можно определить тип используемого контекста и выполянять соответствующие действия в обработчике событий в зависимости от этого типа.
Например, для разных типов форм могут быть различные классы-обработчики событий - Полиформизм, понимаешь Улыбка
  

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


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: как работает перехватчик объясните плиз
Ответ #6 - 08. Августа 2007 :: 01:36
Печать  
спасибо большое.
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: как работает перехватчик объясните плиз
Ответ #7 - 08. Августа 2007 :: 01:38
Печать  
и еще вопрос. а как будет отрабатываться обычная процедура ПриЗакрытии в данном случае
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: как работает перехватчик объясните плиз
Ответ #8 - 08. Августа 2007 :: 02:09
Печать  
что то не получилось у меня как в (2) описано
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: как работает перехватчик объясните плиз
Ответ #9 - 08. Августа 2007 :: 03:57
Печать  
все сделано как во втором ответе но никакой реакции не вижу при открытии или закрытии (открытие сам добавить пробовал
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: как работает перехватчик объясните плиз
Ответ #10 - 08. Августа 2007 :: 12:41
Печать  
Я тебе дал все подсказки.
Давай свой код.
Представленный тобой код отличается от моего, ищи разницу и изучай доку.
  

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: как работает перехватчик объясните плиз
Ответ #11 - 08. Августа 2007 :: 13:40
Печать  
Выложи тестовую конфу
  

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