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



Сообщений: 21
Местоположение: Тула
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
20. Августа 2012 :: 09:35
Печать  
Перехват:
Код
Выбрать все
Функция Событие_ОбработкаПроведения(КонтекстДокумента, ПараметрыПроведения) Экспорт
	Статус = ОбъектПерехватчик.ВыполнитьОригинальноеСобытиеГК(КонтекстДокумента, "ОбработкаПроведения", ПараметрыПроведения);
	Возврат Статус;
КонецФункции  



В модуле проведения:
Код
Выбрать все
Процедура ОбработкаПроведения()
	а=1/0;
КонецПроцедуры 



При проведении документа выдается сообщение об ошибке. Но... ОбъектПерехватчик.ВыполнитьОригинальноеСобытиеГК возвращает 1 и документ проводится... Не пойму, в чем проблема  Озадачен
  
Наверх
ICQ  
IP записан
 
Begemot
Junior Member
**
Отсутствует



Сообщений: 21
Местоположение: Тула
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
Ответ #1 - 20. Августа 2012 :: 11:10
Печать  
Тестовая база:
  

____.7z ( 512 KB | Загрузки )
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
Ответ #2 - 21. Августа 2012 :: 06:03
Печать  
Дык ВыполнитьОригинальноеСобытиеГК возвразает СтатусВозврата выполненного модуля, который не изменился.

Вот и = 1.
  
Наверх
 
IP записан
 
Begemot
Junior Member
**
Отсутствует



Сообщений: 21
Местоположение: Тула
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
Ответ #3 - 21. Августа 2012 :: 06:45
Печать  
Гм... а как же тогда правильно отработать эту ситуацию?

Если мы пытаемся провести документ без перехвата, то возникает ошибка и проведение останавливается...

В случае с перехватом получается, что ошибка вылетела а документ встал в статус проведен...

Конструкция  Попытка-Исключение:
Код
Выбрать все
Функция Событие_ОбработкаПроведения(КонтекстДокумента, ПараметрыПроведения) Экспорт

	Попытка
		Статус = ОбъектПерехватчик.ВыполнитьОригинальноеСобытиеГК(КонтекстДокумента, "ОбработкаПроведения", ПараметрыПроведения);
	Исключение
		Статус = 0
	КонецПопытки;
	Сообщить("Статус проведения = " + Статус);

	Возврат Статус;

КонецФункции // Событие_ОбработкаПроведения 


тоже не отрабатывает (((
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
Ответ #4 - 21. Августа 2012 :: 07:04
Печать  
Были подобные темы, вроде народ как-то проблему решал Печаль
Попробуй поискать по Событие_ОбработкаПроведения
  

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


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
Ответ #5 - 22. Августа 2012 :: 09:55
Печать  
Попробуй вместо ВыполнитьОригинальноеСобытиеГК() использовать конструкицю
Рез = Перехватчик.ВыполнитьСобытиеГК(, КонтДок, "ОбработкаПроведения", ПарамПроведения);

Ибо у меня обработка проведения перехватывается (параллельным соединением пишется статистика проведения) и такие фокусы (а = 1/0), ЕМНИП, проверялись.

UPD сечас попробовал поменять у себя на ВыполнитьСобытиеГК() - тоже все работает.
Какая версия 1С++ ? Ибо что-то мне вспоминается про баг в старых версиях ДЛЛки...
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
Ответ #6 - 22. Августа 2012 :: 10:55
Печать  
Satans Claws писал(а) 22. Августа 2012 :: 09:55:
Какая версия 1С++ ? Ибо что-то мне вспоминается про баг в старых версиях ДЛЛки...

Я также помню, что баг с исключениями я правил для Перехватчика в свое время, но народ все равно жаловался изредка.
так что сейчас гарантировать ничего не могу Печаль
  

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



Сообщений: 21
Местоположение: Тула
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
Ответ #7 - 22. Августа 2012 :: 11:01
Печать  
Satans Claws писал(а) 22. Августа 2012 :: 09:55:
Попробуй вместо ВыполнитьОригинальноеСобытиеГК() использовать конструкицю
Рез = Перехватчик.ВыполнитьСобытиеГК(, КонтДок, "ОбработкаПроведения", ПарамПроведения);


Результат тот же  Печаль

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



Сообщений: 21
Местоположение: Тула
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
Ответ #8 - 22. Августа 2012 :: 11:03
Печать  
Satans Claws писал(а) 22. Августа 2012 :: 09:55:
Какая версия 1С++ ? Ибо что-то мне вспоминается про баг в старых версиях ДЛЛки...

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
Ответ #9 - 22. Августа 2012 :: 11:49
Печать  
пробуй на 3.2.3.20
или на
3.2.4.0 rc2

Хотя, думаю, будет всё тоже самое
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
Ответ #10 - 23. Августа 2012 :: 02:08
Печать  
Самое веселое при перехвате - это ошибка в ПриЗакрытии... вечный кайф!
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
Ответ #11 - 23. Августа 2012 :: 04:54
Печать  
Begemot писал(а) 22. Августа 2012 :: 11:03:
3.2.2.0


У меня 3.2.3.16.


Dmitry The Wing писал(а) 23. Августа 2012 :: 02:08:
Самое веселое при перехвате - это ошибка в ПриЗакрытии... вечный кайф!

О, да!

НО!
Если использовать методологию zk96 (при создании контекста на него вешается некий перехватчик-менеджер, а остальные классы дергают метод этого менеджера, объявляя себя подписантами. При возникновении события менеджер последовательно вызывает соотв методы классов-подписантов), то проблема решается просто - достаточно перенаправление потока исполнения в класс-подписант обернуть в Попытка ... Исключение.

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

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


Но она не спасает от ошибки, возникающей в "самом верхнем" перехватчике - тогда снова "вечный кайф".
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
Ответ #12 - 23. Августа 2012 :: 06:10
Печать  
В том то и косяк, что перехватчик вызывает метод, внутри которого возникает ошибка, но сам перехватчик этой ошибки не чует. Он лишь получает 0 и честно возвращает его. Это не раз обсуждалось на форуме. Если не  понятно, уточняю: попытка не поймает ошибку, т.к. она обрабатывается ранее (в самой ВК).
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
Ответ #13 - 25. Августа 2012 :: 05:56
Печать  
Для событий формы и событий глобального модуля исключения внутри  перехватчиков или оригинальных событий выводятся в 1С.
ИМХО исключения пропускаются также штатно.
я это давно переделывал.
у меня вроде даже тесты были/есть на это поведение.
С проведением другая заморочка, вот здесь гарантированного решения, похоже, так и не получилось сделать до момента моего отхода от 77 и 1С++ Печаль
  

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



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Перехватчик. Ошибка кода модуля проведения не вызывает отмену проведения
Ответ #14 - 05. Сентября 2012 :: 10:36
Печать  
artbear писал(а) 21. Августа 2012 :: 07:04:
Были подобные темы, вроде народ как-то проблему решал Печаль

Народ в лице меня жаловался и пытался что-то решить но так и не решил. Вот отголоски той войны:
http://www.1cpp.ru/bugs/show_bug.cgi?id=4238
http://www.1cpp.ru/forum/YaBB.pl?num=1248167893/3#
http://www.1cpp.ru/forum/YaBB.pl?num=1254820409/17#17
В последней ветке как раз и решение той проблемы. И именно тобой Улыбка, за что еще раз спасибо!
И было это аккурат два года назад! Но Begemot умудрился где-то раздобыть версию DLL аккурат  предшествующую версии с "фиксом". Это-ж надо было так подгадать Улыбка Так что берите последнюю версию DLL (у меня в 3.2.4.0 rc2 все работает правильно) и не "канифольте" моск Артуру! Хватит того что я ему "канифолил" моск два года (с момента регистрации бага до момента его закрытия)   Смущённый
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать