Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Опять про Перехватчик и перехват событий ГК. (число прочтений - 3311 )
Kran
Junior Member
**
Отсутствует



Сообщений: 51
Местоположение: Волжский Волгоградской обл.
Зарегистрирован: 27. Августа 2007
Пол: Мужской
Опять про Перехватчик и перехват событий ГК.
17. Октября 2007 :: 05:21
Печать  
Помогите пжлст разобраться до конца.
1. в Глобальнике:
[code]
лУправлениеНастройками = СоздатьОбъект("УправлениеНастройками");
лУправлениеНастройками.Включить("ПерехватитьСобытияГК");
ПерехватГМ = СоздатьОбъект("ПерехватГМ");
Перехватчик = СоздатьОбъект("Перехватчик");
Перехватчик.ПерехватитьСобытияГлобальногоМодуля(ПерехватГМ);[/code]
2. в классе ПерехватГМ
[code]
Функция СобытиеГМ_ПриОткрытии(Конт) Экспорт
     Если ПустоеЗначение(Конт) = 0 Тогда
           Перехватчик = СоздатьОбъект("Перехватчик");
           ПерехватчикСобытий = Перехватчик.ПолучитьПерехватчикСобытийГК(Конт);
           Если ПустоеЗначение(ПерехватчикСобытий) = 1 Тогда
                 ПерехватчикСобытий = СоздатьОбъект("ПерехватГК"); //твой класс перехвата всех форм
                 Перехватчик.ПерехватитьСобытияГК(Конт, ПерехватчикСобытий);
           КонецЕсли;
     КонецЕсли;
     Возврат 1;
КонецФункции[/code]
3. в классе ПерехватГК
[code]
Процедура Событие_ПриОткрытии(Конт) Экспорт
     Сообщить("ПриОткрытии");
     Перехватчик = СоздатьОбъект("Перехватчик");
     Перехватчик.ВыполнитьОригинальноеСобытиеГК(Конт, "ПриОткрытии");
КонецПроцедуры[/code]

1С падает при выполнении (субъективное мнение)
[code]
Перехватчик.ВыполнитьОригинальноеСобытиеГК(Конт, "ПриОткрытии");[/code]

[color=#cc0000][b]Что не так? Подскажите пжлст.[/b][/color]
  

Prob_001.zip ( 10 KB | Загрузки )
Наверх
wwwICQ  
IP записан
 
Kran
Junior Member
**
Отсутствует



Сообщений: 51
Местоположение: Волжский Волгоградской обл.
Зарегистрирован: 27. Августа 2007
Пол: Мужской
Re: Опять про Перехватчик и перехват событий ГК.
Ответ #1 - 17. Октября 2007 :: 05:36
Печать  
Забыл сказать:
1C рел.27
1C++ 2.5.0.4
Formex 2.0.76
  
Наверх
wwwICQ  
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Опять про Перехватчик и перехват событий ГК.
Ответ #2 - 17. Октября 2007 :: 05:46
Печать  
Уважаемый!
Вы наступили на теже грабли что и я.
Все намного проще.
Глобальный:
     глПерехватчикСобытий=СоздатьОбъект("ПерехватГМ");
     глПерехватчикСобытий.ВключитьПерехватСобытий();

Реализация дву классов:
ПерехватГМ::
Процедура ВключитьПерехватСобытий() Экспорт
     
     лУправлениеНастройками = СоздатьОбъект("УправлениеНастройками");
     лУправлениеНастройками.Включить("ПерехватитьСобытияГК");

     _Перехватчик = СоздатьОбъект("Перехватчик");   
     _Перехватчик.ПерехватитьСобытияГлобальногоМодуля(Контекст);
     
     _фПерехватВключен = 1;
КонецПроцедуры      // ВключитьПерехватСобытий


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

Перехват::
Перем _Перехватчик;
Перем _КонтФормы;
Перем рФорма;

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


Функция Событие_ПриОткрытии(Флаг) Экспорт
     рФорма.УстановитьФорму(_КонтФормы.Форма);
     тип=рФорма.ТипОбъекта();
     Если тип="Документ" Тогда
           //Возврат 0;
     КонецЕсли;
     Возврат _Перехватчик.ВыполнитьОригинальноеСобытиеГК(_КонтФормы,"ПриОткрытии");
КонецФункции      // гл


Функция Событие_ПриЗаписи(Флаг) Экспорт
     рФорма.УстановитьФорму(_КонтФормы.Форма);
     тип=рФорма.ТипОбъекта();
     Сообщить(тип);
     Если тип="Документ" Тогда
           к);
     ИначеЕсли тип="Справочник" Тогда
           ПриИзмененииОбъектаМОД(_КонтФормы, _КонтФормы.ТекущийЭлемент(), РабочаяДата());
     КонецЕсли;
     Возврат _Перехватчик.ВыполнитьОригинальноеСобытиеГК(_КонтФормы,"ПриЗаписи");
КонецФункции      // ПриЗактытии


//Функция Событие_ПриЗакрытии(Флаг) Экспорт
//      //Сообщить(Конт);
//      //Сообщить("Перехват::ПриЗакрытии");
//      Возврат 1;
//КонецФункции      // Событие_ПриЗакрытии

Функция Событие_ПриПереносеЭлементаВДругуюГруппу(Спр, Группа) Экспорт
     Сообщить("Перехват::ПриПереносеЭлементаВДругуюГруппу");
     Возврат 1;
КонецФункции      // Событие_ПриПереносеЭлементаВДругуюГруппу(Спр, Группа)
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Опять про Перехватчик и перехват событий ГК.
Ответ #3 - 17. Октября 2007 :: 05:47
Печать  
в (3) у тебя ошибка.
Конт это не контекст формы а флаг.
вот комментарий Артура:
перехваченные методы в классе Перехватчике ГК по параметрам должен совпадать с соответствующими методами в модуле формы
  
Наверх
 
IP записан
 
Kran
Junior Member
**
Отсутствует



Сообщений: 51
Местоположение: Волжский Волгоградской обл.
Зарегистрирован: 27. Августа 2007
Пол: Мужской
Re: Опять про Перехватчик и перехват событий ГК.
Ответ #4 - 17. Октября 2007 :: 06:08
Печать  
varelchik писал(а) 17. Октября 2007 :: 05:47:
в (3) у тебя ошибка.
Конт это не контекст формы а флаг.
вот комментарий Артура:
перехваченные методы в классе Перехватчике ГК по параметрам должен совпадать с соответствующими методами в модуле формы

Понял. Заработало. Спасибо.
Думаю, что можно по перехватчику немного доделать документацию - просто вставить ваш пост в качестве примера реализации и станет меньше таких тупых вопросов как мой.
  
Наверх
wwwICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать