Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Странное поведение Перехватчика (число прочтений - 6256 )
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Странное поведение Перехватчика
18. Января 2012 :: 08:12
Печать  
Событие_ФормаПослеЗаписи()
На разных формах работает по разному.
Может вызываеть несколько раз.
Попробовал проследить от куда ноги растут и пришел к выводу:
Если на форме если ТП то событие вызывается стоко раз сколько ТП на форме + один раз от самой формы.
Т.е. если 4 ТП, то Событие_ФормаПослеЗаписи() вызовится 5 раз.
Кто как такие весчи отрезает.
Мне надо чтоб сработало разово.
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Странное поведение Перехватчика
Ответ #1 - 18. Января 2012 :: 10:04
Печать  
Вопрос снят.
Сделал просто.

Код
Выбрать все
Перем ПервыйПроход;

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

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

 



Может кому пригодиться.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Странное поведение Перехватчика
Ответ #2 - 18. Января 2012 :: 20:11
Печать  
Интересно.
На всякий случай, это форма документа или справочника?
Без перехватчика тоже зависит от количества ТП на форме?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Странное поведение Перехватчика
Ответ #3 - 18. Января 2012 :: 22:08
Печать  
А ты не классом УправлениеФормой пользуешься для привязок ТП случаем ? Тот, который в составе ПоставщикДанных от vandalsvq
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Странное поведение Перехватчика
Ответ #4 - 19. Января 2012 :: 06:59
Печать  
kms
Да это ДОкумент.
Eprst
Нет ТП вообще не привязываються.
Есть у кого соображения?
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Странное поведение Перехватчика
Ответ #5 - 19. Января 2012 :: 07:00
Печать  
kms писал(а) 18. Января 2012 :: 20:11:
Без перехватчика тоже зависит от количества ТП на форме?


Несовсем понял.
что значит зависит от количества ТП?
без Перехватчика ж такой процедуры и не будет.
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Странное поведение Перехватчика
Ответ #6 - 19. Января 2012 :: 08:09
Печать  
Плохи дела.
Не очень нормальное решение оказалось.
Почему?
Если Сделать сохранение формы без Закрытия то ФормаПослеЗаписи больше не сработает так как ПервыйПроход уже взведен.
Посему что-то надо делать с Перехватчиком.
негодиться многократный вызов этой процедуры.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Странное поведение Перехватчика
Ответ #7 - 19. Января 2012 :: 11:07
Печать  
ТП на форме - "чистый" объект, или используется класс-наследник от ТП?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Странное поведение Перехватчика
Ответ #8 - 19. Января 2012 :: 12:07
Печать  
Сделай простейший тест сабжа - простую базу, тестовая форма на которой 2 ТП, и покажи, что ошибка именно в Перехватчике, а не в твоем коде Печаль
Выложи базу/форму сюда.
  

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


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Странное поведение Перехватчика
Ответ #9 - 19. Января 2012 :: 12:15
Печать  
Шас навояем.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Странное поведение Перехватчика
Ответ #10 - 19. Января 2012 :: 12:21
Печать  
varelchik писал(а) 19. Января 2012 :: 07:00:
kms писал(а) 18. Января 2012 :: 20:11:
Без перехватчика тоже зависит от количества ТП на форме?


Несовсем понял.
что значит зависит от количества ТП?
без Перехватчика ж такой процедуры и не будет.

В смысле "не будет"?
"ФормаПослеЗаписи" к перехватчику не имеет никакого отношения.
Описание события здесь: http://www.1cpp.ru/docum/icpp/html/extobjs.html#id102
Кстати, у него есть параметр "флРезультат" - в него что передается при вызовах в твоем случае?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Странное поведение Перехватчика
Ответ #11 - 19. Января 2012 :: 12:32
Печать  
Вот простенькая базы.
Из комопнет 1С++ и FormEx
версии последние.
Имеем 2 Документа.
Один простой без ТП
Второй с Одним ТП.
После записи 1-го процедура срабатывает 2 раза.
т.е. От ТП и от Самого документа.
После записи 2-го срабатывает только один раз.
  

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


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Странное поведение Перехватчика
Ответ #12 - 19. Января 2012 :: 12:34
Печать  
kms писал(а) 19. Января 2012 :: 12:21:
varelchik писал(а) 19. Января 2012 :: 07:00:
kms писал(а) 18. Января 2012 :: 20:11:
Без перехватчика тоже зависит от количества ТП на форме?


Несовсем понял.
что значит зависит от количества ТП?
без Перехватчика ж такой процедуры и не будет.

В смысле "не будет"?

Пардон.
Я просто на перехватчика все взвалил.
через Форму не пробовал.
Шас спробуем просто через форму.
"ФормаПослеЗаписи" к перехватчику не имеет никакого отношения.
Описание события здесь: http://www.1cpp.ru/docum/icpp/html/extobjs.html#id102
Кстати, у него есть параметр "флРезультат" - в него что передается при вызовах в твоем случае?

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


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Странное поведение Перехватчика
Ответ #13 - 19. Января 2012 :: 12:46
Печать  
Так не в перехватчике а в Форме дело.
Отключил перехват и перенес в форму.
результат тотже.

Артур извени (за то что на перехватчика грешил) сам виноват.
НО.
Надо шото решать.
Пример с использованием процедуре в самой форме.
  

1Cv7_013.MD ( 108 KB | Загрузки )
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Странное поведение Перехватчика
Ответ #14 - 19. Января 2012 :: 15:08
Печать  
На самом деле сколько раз создан объект "Форма" столько раз и вызывается событие "ФормаПослеЗаписи".
Обычно классы-наследники от ТабличногоПоля и АктивИкс при создании создают объект "Форма". Но даже если просто в модуле формы документа или справочника где нет ничего вообще в методе "ПриОткрытии" написать:
ОбъектФорма1 = СоздатьОбъект("Форма");
ОбъектФорма1.УстановитьФорму(Форма);
ОбъектФорма2 = СоздатьОбъект("Форма");
ОбъектФорма2.УстановитьФорму(Форма);
ОбъектФорма3 = СоздатьОбъект("Форма");
ОбъектФорма3.УстановитьФорму(Форма);

То событие "ФормаПослеЗаписи" вызовется три раза.
(Ну и если и в перехватчике еще создается объект "Форма", то четыре раза).
Насколько я помню, это уже обсуждалось.
Лично я воспринимаю это как фичу. Но если это исправят, буду очень рад.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать