Переключение на Главную Страницу Страницы: 1 ... 6 7 [8] 9 10 11 ОтправитьПечать
Очень популярная тема (более 25 ответов) Перехватчик. Для каких событий необходим ручной вызов оригинального? (число прочтений - 75675 )
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #105 - 31. Августа 2011 :: 03:17
Печать  
artbear писал(а) 30. Августа 2011 :: 07:53:
Как-то видел сообщение на форуме, что есть какие-то ошибки при проведении или отмене проведения, типа документ не провелся, а проводки сели, или наоборот.
кто-то говорил, что есть баг, кто-то говорил,что все решается.
Поищи по форуму
или кто-то из помнящих эту историю поделится своими мыслями.


Видел, да (стараюсь все темы по перехватчику отслеживать).
По моему, там у человека была форменная НЁХ.
  
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #106 - 30. Сентября 2011 :: 18:47
Печать  
artbear писал(а) 30. Августа 2011 :: 07:53:
Satans Claws писал(а) 29. Августа 2011 :: 09:06:
Dmitry The Wing писал(а) 29. Августа 2011 :: 08:20:
При нажатии "Провести" выполняются две операции: Записать и Провести. Видимо, статус возврата влияет только на вторую.

Ну, все сходится к тому.
Значит, можно выпускать в релиз.

Как-то видел сообщение на форуме, что есть какие-то ошибки при проведении или отмене проведения, типа документ не провелся, а проводки сели, или наоборот.
кто-то говорил, что есть баг, кто-то говорил,что все решается.
Поищи по форуму
или кто-то из помнящих эту историю поделится своими мыслями.

Если имеется ввиду вот этот баг http://www.1cpp.ru/bugs/show_bug.cgi?id=4238 то ты-же его благополучно закрыл - за что огромное спасибо! Улыбка
Но таки да, помню эту ветку, там пытались все это решить весьма извращенными способами - но так ничего и не вышло пока ты не убрал этот баг в самой компоненте
  
Наверх
ICQ  
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 855
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #107 - 30. Мая 2012 :: 10:15
Печать  
Вопрос. Если при перехвате события, например Событие_ПриВыбореСтроки(), в оригинальном событии в разных местах разное число параметров, то в событии Перехватчика нужно указать их максимальное количество?
Т.е. к примеру в одном месте

ПриВыбореСтроки(Парам1),

а в другом

ПриВыбореСтроки(Парам1, Парам2)

то в Перехватчике нужно прописать как

Событие_ПриВыбореСтроки(Парам1, Парам2)?
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #108 - 30. Мая 2012 :: 11:57
Печать  
нет.
Нужно в зависимости от контекста вызывать свой метод с нужным числом параметров - иначе нарвешься на ошибку.
  
Наверх
 
IP записан
 
an2
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 43
Зарегистрирован: 23. Марта 2012
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #109 - 30. Мая 2012 :: 11:58
Печать  
Я указываю максимальное количество параметров.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #110 - 30. Мая 2012 :: 12:00
Печать  
примерчик, для понимания:

Код
Выбрать все
//======================================================================
Функция  Событие_ПриОткрытии(ФлагЧтенияНастройки) Экспорт
//свой код перехвата

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

  
Наверх
 
IP записан
 
an2
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 43
Зарегистрирован: 23. Марта 2012
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #111 - 30. Мая 2012 :: 12:03
Печать  
У тебя неоднозначный вопрос. Поэтому получается два разных ответа.

Например как делал я:
Функция ПриЗаписи(СписокПериодРекв="") Экспорт
     Если ЕстьВГК.ПриЗаписи = 1 Тогда
           Если ЭтоСправочник = 1 Тогда
                 Если глПерехватчик.ВыполнитьСобытиеГК(,ГК,"ПриЗаписи",СписокПериодРекв) = 0 Тогда
                       Статус = 0;
                 КонецЕсли;
           Иначе
                 Если глПерехватчик.ВыполнитьСобытиеГК(,ГК,"ПриЗаписи",) = 0 Тогда
                       Статус = 0;
                 КонецЕсли;
           КонецЕсли;
     КонецЕсли;
     
     ВыбратьСобытие("ПриЗаписи");
     Пока итМенеджер.ПолучитьСтроку("Событие") = 1 Цикл
           Если итМенеджер.ИмяКОП = "Справочник" Тогда
                 Если итМенеджер.КОП.ПриЗаписи(СписокПериодРекв) = 0 Тогда
                       Статус = 0;
                 КонецЕсли;
           Иначе
                 Если итМенеджер.КОП.ПриЗаписи() = 0 Тогда
                       Статус = 0;
                 КонецЕсли;
           КонецЕсли;
     КонецЦикла;
     Возврат Статус;
КонецФункции
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 855
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #112 - 30. Мая 2012 :: 12:06
Печать  
Eprst, вопрос в том, как прописать саму процедуру Событие_ПриОткрытии(). У тебя сейчас прописан один параметр ФлагЧтенияНастройки. А если где-то (гипотетически) оригинальное событие прописано с двумя параметрами? Как прописывать обработчик? Как Событие_ПриОткрытии(ФлагЧтенияНастройки, Парам2) - так?

То, что дальше нужно делать вызов оригинального события с разным указанием параметров - это понятно.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 855
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #113 - 30. Мая 2012 :: 12:11
Печать  
Еще какая-то ерунда происходит с обработкой событий.

У меня в одном классе обработка и Глобальных и Контекстных событий.

При включении перехвата события Событие_ПриВыбореСтроки() перестала работать обработка события СобытиеГМ_Событие_ЗаписьСобытияЖурналаРегистрации.
Заметил так. Открываю журнал документов. Даблклик в списке на документе - срабатывает Событие_ПриВыбореСтроки() и далее СобытиеГМ_ПриОткрытии(). А если Событие_ПриВыбореСтроки() отключить - тогда перед СобытиеГМ_ПриОткрытии() нормально отрабатывает событие записи в журнал.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
an2
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 43
Зарегистрирован: 23. Марта 2012
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #114 - 30. Мая 2012 :: 12:21
Печать  
Лично я так понял, что мухи должны быть отдельно а котлеты отдельно.

Есть 3 типа перехватываемых событий

1 События глобального модуля.
2 События Группового контекста.
3 События проведения.

У меня на каждый тип событий свой класс.
Почему?
Потому, что События Группового контекста удобнее собирать персональным для каждого контекста сборщиком.
А события глобального модуля и события проведения удобнее собирать одним.
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 855
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #115 - 30. Мая 2012 :: 12:33
Печать  
Пробовал разнести в разные классы. Не получилось - событие записи в журнал не перехватывается (именно в том случае, как описал выше, в остальных - перехватывается).
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
an2
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 43
Зарегистрирован: 23. Марта 2012
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #116 - 30. Мая 2012 :: 12:41
Печать  
Попробовал
У меня тоже СобытиеГМ_Событие_ЗаписьСобытияЖурналаРегистрации не перехватывается.

У меня вызов нарисован прямо в глобальном Событие_ЗаписьСобытияЖурналаРегистрации
это событие работает.
  
Наверх
 
IP записан
 
an2
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 43
Зарегистрирован: 23. Марта 2012
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #117 - 30. Мая 2012 :: 12:55
Печать  
Методом чтения документации и научного тыка вывел:
Работает если выполняем действия в таком порядке:

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

// Так правильней:
глПерехватчик=СоздатьОбъект("Перехватчик");
ФабрикаСобытийГМ = СоздатьОбъект("Мой_КОП_Выполняющий_Роль_ФабрикиСобытийГМ");
глПерехватчик.ПерехватитьСобытияГлобальногоМодуля(ФабрикаСобытийГМ);
глПерехватчик.ПодключитьСобытие_ЗаписьСобытияЖурналаРегистрации();
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 855
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #118 - 30. Мая 2012 :: 12:56
Печать  
Да, в глобально модуле событие отлавливается. Я вообще изначально это событие записи в журнал регистрации в глобальнике прописывал, а когда вплотную стал разбираться с Перехватчиком и классом обработки событий, то и запихнул в этот класс все события, включая запись в журнал.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 855
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Перехватчик. Для каких событий необходим ручной вызов оригинального?
Ответ #119 - 30. Мая 2012 :: 12:59
Печать  
ПерехватчикГМ - это имя твоего класса? Если да, то я так и делаю. В ПриНачалеРаботыСистемы()
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 6 7 [8] 9 10 11
ОтправитьПечать