Переключение на Главную Страницу Страницы: 1 ... 3 4 [5] 6 7 ... 9 ОтправитьПечать
Очень популярная тема (более 25 ответов) СтатусВозврата в классе "Перехватчик" (число прочтений - 43277 )
Sergey
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 135
Зарегистрирован: 18. Октября 2006
Пол: Мужской
Re: СтатусВозврата в классе "Перехватчик"
Ответ #60 - 06. Апреля 2007 :: 10:57
Печать  
код класса-обработчика перехвата : ОбработчикСобытийГлобальногоМодуля

Функция Этот(Конт) Возврат Конт; КонецФункции

Функция Сам() Возврат Этот(Контекст) КонецФункции



Функция СобытиеГМ_ПриОткрытии(КонтФормы) Экспорт
     Попытка
     Сообщить("СобытиеГМ_ПриОткрытии(КонтФормы) ОбрСобГлМод");
     Сообщить(""+КонтФормы.Вид());
     Исключение
     КонецПопытки;
     
     Возврат 1;
КонецФункции



Было 2 варианта Либо во внешнем отчете Переменные все локальные

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

Либо в глобальном модуле Переменная глОбработчикСобытийГлобальногоМодуля глобальная экспортная

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


Управление настройками включил перехват и все остальное

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: СтатусВозврата в классе "Перехватчик"
Ответ #61 - 06. Апреля 2007 :: 10:57
Печать  
Chieftain писал(а) 06. Апреля 2007 :: 05:48:
Если в классе перехватывается событие ""ПослеОткрытия"", то она отрабатывает дважды, если вызывается оригинальное событие

Исправил, будет в ночной сборке.

ЗЫ оказывается, при исправлении ВызватьОригинальноеСобытиеГМ забыл сделать то же самое для ВызватьОригинальноеСобытиеГК Улыбка
  

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: СтатусВозврата в классе "Перехватчик"
Ответ #62 - 06. Апреля 2007 :: 11:02
Печать  
Цитата:

Просьба - оформляй свой код, плиз.
Например, изучи кнопку "Диез" (черная решетка")
  

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


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СтатусВозврата в классе "Перехватчик"
Ответ #63 - 06. Апреля 2007 :: 11:10
Печать  
artbear писал(а) 06. Апреля 2007 :: 10:57:
Chieftain писал(а) 06. Апреля 2007 :: 05:48:
Если в классе перехватывается событие ""ПослеОткрытия"", то она отрабатывает дважды, если вызывается оригинальное событие

Исправил, будет в ночной сборке.

ЗЫ оказывается, при исправлении ВызватьОригинальноеСобытиеГМ забыл сделать то же самое для ВызватьОригинальноеСобытиеГК Улыбка


Сэнкс...
А "ПриНачалеВыбораЗначения" посмотришь?
  
Наверх
ICQ  
IP записан
 
Sergey
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 135
Зарегистрирован: 18. Октября 2006
Пол: Мужской
Re: СтатусВозврата в классе "Перехватчик"
Ответ #64 - 06. Апреля 2007 :: 11:12
Печать  
Хорошо изучу. Только сегодня страшно некогда
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СтатусВозврата в классе "Перехватчик"
Ответ #65 - 06. Апреля 2007 :: 11:17
Печать  
Цитата:
код класса-обработчика перехвата : ОбработчикСобытийГлобальногоМодуля



Специально попробовал - в таком варианте все работает

ЗЫ.. А версия 1С++ какая?
  
Наверх
ICQ  
IP записан
 
Sergey
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 135
Зарегистрирован: 18. Октября 2006
Пол: Мужской
Re: СтатусВозврата в классе "Перехватчик"
Ответ #66 - 06. Апреля 2007 :: 11:25
Печать  
Сегодняшняя ночная сборка. Возможно дело в журнале документов. У меня есть Процедура

Процедура ПриВыбореСтроки()
    глПриВыбореСтрокиЖурналаДокументов(Контекст);
КонецПроцедуры


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

           Иначе
                 ОткрытьФорму(ТД);
           КонецЕсли;
     Иначе
           ОткрытьФорму(ТД);
     КонецЕсли;
КонецПроцедуры



Короче в глобальнике применяеться ОткрытьФорму(ТД);

Возможно вот изза этого
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СтатусВозврата в классе "Перехватчик"
Ответ #67 - 06. Апреля 2007 :: 11:31
Печать  
Цитата:


Просто в журнале сделай так:
Код
Выбрать все
Процедура ПриВыбореСтроки()
     СтатусВозврата(0);
     глПриВыбореСтрокиЖурналаДокументов(Контекст);
КонецПроцедуры
 



...однако...
без "СтатусВозврата(0)" документ открывается, но перехват "ПриОткрытии" не отрабатывает ни для перехватчика глобального модуля, ни для перехватчика группового контекста
  
Наверх
ICQ  
IP записан
 
Sergey
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 135
Зарегистрирован: 18. Октября 2006
Пол: Мужской
Re: СтатусВозврата в классе "Перехватчик"
Ответ #68 - 06. Апреля 2007 :: 11:39
Печать  
Хм. Попробую вечерком. Спасибо. А разве так как у меня не должно работать. Ведь фактически документ то открываеться?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: СтатусВозврата в классе "Перехватчик"
Ответ #69 - 06. Апреля 2007 :: 11:43
Печать  
Chieftain писал(а) 06. Апреля 2007 :: 11:10:
artbear писал(а) 06. Апреля 2007 :: 10:57:
Chieftain писал(а) 06. Апреля 2007 :: 05:48:
Если в классе перехватывается событие ""ПослеОткрытия"", то она отрабатывает дважды, если вызывается оригинальное событие



А "ПриНачалеВыбораЗначения" посмотришь?

Мое исправление и этот баг поправило Улыбка
Просто забыл упомянуть!
  

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: СтатусВозврата в классе "Перехватчик"
Ответ #70 - 06. Апреля 2007 :: 11:45
Печать  
Скачайте завтра ночную сборку и проверьте на своем коде.
Потом сообщите в ветку, ок?
  

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


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СтатусВозврата в классе "Перехватчик"
Ответ #71 - 06. Апреля 2007 :: 11:46
Печать  
artbear писал(а) 06. Апреля 2007 :: 11:45:
Скачайте завтра ночную сборку и проверьте на своем коде.
Потом сообщите в ветку, ок?


Будем тестить... Очень довольный
  
Наверх
ICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СтатусВозврата в классе "Перехватчик"
Ответ #72 - 06. Апреля 2007 :: 11:49
Печать  
Цитата:
Хм. Попробую вечерком. Спасибо. А разве так как у меня не должно работать. Ведь фактически документ то открываеться?


Я просто принимаю как факт:
Если ты заменяешь действие предопределенной процедуры, то ты должен указать одинесине, что ты сам обработаешь. А для этого существует "СтатусВозврата" и "ФлагСтандартнойОбработки"
  
Наверх
ICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СтатусВозврата в классе "Перехватчик"
Ответ #73 - 07. Апреля 2007 :: 07:42
Печать  
artbear писал(а) 06. Апреля 2007 :: 11:45:
Скачайте завтра ночную сборку и проверьте на своем коде.
Потом сообщите в ветку, ок?


В ночной сборке вопрос по вдойному вызову перехватываемой процедуры решен.

По поводу "ПриНачалеВыбораЗначения" и "ПриВыбореСтроки" - ничего не изменилось:

  

Test_005.rar ( 17 KB | Загрузки )
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: СтатусВозврата в классе "Перехватчик"
Ответ #74 - 09. Апреля 2007 :: 05:25
Печать  
Нашлась одна неявная фича/баг при использовании перехватчика.
При вызове из класса-перехватчика оригинальных обработчиков глобальника или группового контекста через "ВызватьОригинальноеСобытие..." для обработки значений, передаемых по ссылке, нужно после вызова "ВызватьОригинальноеСобытие..." восстанавливать нужное значение из переданного списка.
Например, я на днях обнаружил, что при перехвате события ГМ "ОбработкаЯчейкиТаблицы" у меня не всегда работала расшифровка.
Т.е. нужно использовать следующий код
Код
Выбрать все
Функция СобытиеГМ_ОбработкаЯчейкиТаблицы(Значение, ФлагСтандОбраб, Таблица, Адрес) Экспорт

	// если поставить ФлагСтандОбраб = 1, тогда в большинстве случаев на экран при расшифровке будет выдаваться ненужное предупреждение типа "СписокЗначений"

	Результат = , "{Значение, ФлагСтандОбраб, Таблица, Адрес}", Значение, ФлагСтандОбраб, Таблица, Адрес);
	Если Результат = 1 Тогда
		СписокАргументов = СоздатьОбъект("СписокЗначений");
		СписокАргументов.ДобавитьЗначение(Значение);
		СписокАргументов.ДобавитьЗначение(ФлагСтандОбраб);
		СписокАргументов.ДобавитьЗначение(Таблица);
		СписокАргументов.ДобавитьЗначение(Адрес);
		Результат = ", СписокАргументов);

// !!!!!! вот оно
		ФлагСтандОбраб = СписокАргументов.ПолучитьЗначение(2);
// !!!!!! вот оно

	КонецЕсли;

	Возврат Результат;
КонецФункции
 



Без использования подобной установки ( ФлагСтандОбраб =  СписокАргументов.ПолучитьЗначение(2) ) не будет работать стандартная обработка, например, справочников и документов
  

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