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



Сообщений: 39
Местоположение: Москва
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Перехватчик и Операция и ЖурналРасчетов
17. Ноября 2011 :: 11:32
Печать  
Вопрос знатокам.

Получилось ли у кого-нибудь с помощью Перехватчика перехватить события
контекстов формы Операции и формы ЖурналаРасчетов,
не меняя код соответствующих модулей форм?

У меня при открытии этих форм не отрабатывает событие "СобытиеГМ_СозданиеКонтекста"
и, соответственно, не устанавливается перехват.
Для любых других форм всё работает.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехватчик и Операция и ЖурналРасчетов
Ответ #1 - 17. Ноября 2011 :: 14:29
Печать  
Всё работает..
  
Наверх
 
IP записан
 
KonstSV
Junior Member
**
Отсутствует



Сообщений: 39
Местоположение: Москва
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Перехватчик и Операция и ЖурналРасчетов
Ответ #2 - 21. Ноября 2011 :: 07:00
Печать  
Уважаемый, Eprst, если вас не затруднит - взгляните на небольшой пример.

При открытии журнала "Операции-Журналы документов-Полный" - перехват не срабатывает.
При открытии созданного в конфигурации журнала "Общий" - перехват срабатывает.
При открытии созданного в конфигурации журнала расчетов "Зарплата" - перехват не срабатывает.
При открытии формы Операции - перехват не срабатывает.

OS: Windows XP SP3
1C: 7.70.027
1CPP: 3.2.3.16
FormEx: 2.0.5.107
  

Test____________.zip ( 966 KB | Загрузки )
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехватчик и Операция и ЖурналРасчетов
Ответ #3 - 21. Ноября 2011 :: 08:32
Печать  
На системные окошки не установишь - там даже контекста формы нет.
На полный журнал установишь, воткни галку в любом общем журнале - использовать как полный журнал документов.
На ЖР не знаю, не использую.
  
Наверх
 
IP записан
 
KonstSV
Junior Member
**
Отсутствует



Сообщений: 39
Местоположение: Москва
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Перехватчик и Операция и ЖурналРасчетов
Ответ #4 - 21. Ноября 2011 :: 10:04
Печать  
Так вот в том-то и дело, что у Операции есть и Контекст, и Форма операции (с Диалогом и Модулем).
Именно, контекст Формы операции не перехватывается, а контекст ФормыСписка Операции - перехватывается.
Такая же ситуация и Журналами расчетов.
Т.е. если в модуль ЖурналаРасчетов добавить код :

Процедура ПриОткрытии()
     
     Конт = глВернутьКонтекст(Контекст);
     
     Сообщить("ПриОткрытии() - ЖурналРасчетов.Зарплата.Форма.ФормаСписка");

КонецПроцедуры // ПриОткрытии

то этот код отрабатывает, Контекст существует, но не перехватывается Перехватчиком.
ТипЗначенияСтр(Конт) возвращает "ГрупповойКонтекст".

Тоже самое и с Формой операции.

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и Операция и ЖурналРасчетов
Ответ #5 - 21. Ноября 2011 :: 11:52
Печать  
Насколько я помню, у этих окон нет контекста или он какой-то хитрый Печаль Потому и не ловится Печаль
  

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



Сообщений: 39
Местоположение: Москва
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Перехватчик и Операция и ЖурналРасчетов
Ответ #6 - 22. Ноября 2011 :: 13:28
Печать  
После дальнейшего изучения ситуация выглядит следующим образом.

Только для двух видов форм:
ЖурналРасчетов.<Идентификатор>.Форма.ФормаСписка.Форма и
Операция.Форма

функция СобытиеГМ_СозданиеКонтекста(Конт) в классе-перехватчике НЕ перехватывается, а

функция СобытиеГМ_ПриОткрытии(Конт, ФлагЧтенияНастройки) - уже перехватывается.

Так что, в-принципе, можно обойтись и этим. Будем считать, что вопрос закрыт.
  
Наверх
 
IP записан
 
KonstSV
Junior Member
**
Отсутствует



Сообщений: 39
Местоположение: Москва
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Перехватчик и Операция и ЖурналРасчетов
Ответ #7 - 22. Ноября 2011 :: 14:36
Печать  
Поторопился.
СобытиеГМ_ПриОткрытии - перехватывается, но сам перехват (ПерехватитьСобытияГК(...)) не устанавливается  Плачущий
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и Операция и ЖурналРасчетов
Ответ #8 - 23. Ноября 2011 :: 05:52
Печать  
KonstSV писал(а) 22. Ноября 2011 :: 14:36:
Поторопился.
СобытиеГМ_ПриОткрытии - перехватывается, но сам перехват (ПерехватитьСобытияГК(...)) не устанавливается  Плачущий

Надеюсь, ТипЗначения(Тип контекста из СобытиеГМ_ПриОткрытии) = 100 ?
Более точное описание типа контекста из СобытиеГМ_ПриОткрытии через ФормЕкс посмотри.
  

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



Сообщений: 39
Местоположение: Москва
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Перехватчик и Операция и ЖурналРасчетов
Ответ #9 - 23. Ноября 2011 :: 06:24
Печать  
Да, ТипЗначения - 100.

Опишу общую схему перехвата. (Названия КОП классов - условные)

1. ПриНачалеРаботыСистемы - создание КОП-класса ПерехватчикСобытийГМ - Установка перехвата событий ГМ.
2. При перехвате события СобытиеГМ_СозданиеКонтекста - создание КОП-класса ПерехватчикСобытийФормы -
    установка перехвата событий ГК (с помощью метода ПерехватитьСобытияГК()).
3. Любые формы (ГК) прекрасно перехватываются, кроме форм двух видов:
    - Операция.Форма,
    - ЖурналРасчетов.<Идентификатор>.Форма.ФормаСписка.Форма.

Попробовал использовать перехват события СобытиеГМ_ПриОткрытии. Перехватывается.
С помощью языка 1С и в отладчике Контекст, пришедший в это событие от этих форм (см. пункт 3), ничем не отличается
от Контекстов любых других форм. Создаю тот же самый КОП-класс ПерехватчикСобытийФормы и устанавливаю
перехват событий ГК с помощью метода ПерехватитьСобытияГК(Конт, Я()). Всё отрабатывает без ошибок, но
перехват не устанавливается.

Если сразу после метода ПерехватитьСобытияГК(Конт, Я()) вызвать метод ПолучитьПерехватчикСобытийГК(Конт),
то для этих форм (см. пункт 3) он вернет пустое значение, хотя для любых других форм возвращается объект КОП-класса.

Вот такая картина. Смущённый
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и Операция и ЖурналРасчетов
Ответ #10 - 23. Ноября 2011 :: 07:35
Печать  
ПерехватитьСобытияГК(Конт, Я()) в каком объекте вызываешь?
  

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



Сообщений: 39
Местоположение: Москва
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Перехватчик и Операция и ЖурналРасчетов
Ответ #11 - 23. Ноября 2011 :: 12:18
Печать  
Схематично (без подробностей).

КОП-класс - ПерехватчикСобытийГМ :

...

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


Функция   СобытиеГМ_СозданиеКонтекста(Конт) Экспорт
     
     ПерехватитьСобытияКонтекста(Конт);
     
     Возврат 1;      
     
КонецФункции

...

КОП-класс - ПерехватчикСобытийФормы :

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

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

...

Процедура Конструктор()
     Перехватчик = СоздатьОбъект("Перехватчик");   
КонецПроцедуры

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и Операция и ЖурналРасчетов
Ответ #12 - 23. Ноября 2011 :: 12:33
Печать  
Да, по схеме все нормально.
  

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



Сообщений: 39
Местоположение: Москва
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Перехватчик и Операция и ЖурналРасчетов
Ответ #13 - 23. Ноября 2011 :: 12:41
Печать  
artbear, повторюсь, но всё работает абсолютно без проблем, кроме этих 2-х видов форм (см.выше).

Наверное контекст, как вы уже писали, "какой-то хитрый".
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать