Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Как правильно пользоваться перехватчиком для перехвата проведения? (число прочтений - 10216 )
Andrekr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 21. Июля 2009
Как правильно пользоваться перехватчиком для перехвата проведения?
21. Июля 2009 :: 09:18
Печать  
У меня в ПриНачалеРаботыСистемы следующий код:
[font=Courier]      КлассПерехватСобытийГК=СоздатьОбъект("КлассПерехватчикГК");
     Перехватчик=СоздатьОбъект("Перехватчик");
     
     Для сч=1 По Метаданные.Документ() Цикл
           фикатор,КлассПерехватСобытийГК);
           Состояние(Метаданные.Документ(сч).Идентификатор);
     КонецЦикла;
[/font]
А в файле реализации класса КлассПерехватчикГК:
[font=Courier]
Функция Событие_ОбработкаПроведения(Конт,ДопПараметр) Экспорт      
     Перехватчик=СоздатьОбъект("Перехватчик");
     аметр);
     
     Возврат Рез;
КонецФункции
[/font]

У некоторых пользователей работает, а у некоторых нет. "Не работает" выражается в том, что документы проводятся, но движений никаких не делают.
Кроме того заметил, что если при перепроведении документа нажать Esc и прервать обработку, то старые движения, которые были до этого очищаются. А если не использовать перехватчик, то старые движения остаются.
Может я что-то не правильно делаю?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как правильно пользоваться перехватчиком для перехвата проведения?
Ответ #1 - 21. Июля 2009 :: 10:40
Печать  
1. При начале работы ты включаешь возможность перехвата, как написано в доке?
2. По прерыванию работы модуля проведения ничего не могу сказать, не тестировал подобный вариант, но вроде бы у пользователей вопросов не возникает.

Давай более подробный тест.
  

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


1C++ rocks!

Сообщений: 6
Зарегистрирован: 21. Июля 2009
Re: Как правильно пользоваться перехватчиком для перехвата проведения?
Ответ #2 - 22. Июля 2009 :: 17:36
Печать  
Вот более подробный тест.
В архиве - конфигурация.
Открываем журнал. Создаем документ. Жмем включить перехватчик.
Жмем "Провести документ и сделать движения". Смотрим результат нажав на кнопку "Показать движения".
Жмем "Провести с сообщениями для прерывания ЕSC'ейпом обработки проведения".
В обработке проведения будет запущен бесконечный цикл. Прерываем его ESC.
Жмем "Показать движения" - движений нет.
Если тоже проделать с отключенным перехватчиком. То в конце движения останутся.
  

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



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Как правильно пользоваться перехватчиком для перехвата проведения?
Ответ #3 - 03. Августа 2009 :: 21:09
Печать  
[quote author=Andrekr link=1248167893/0#0 date=1248167893]
У некоторых пользователей работает, а у некоторых нет. "Не работает" выражается в том, что документы проводятся, но движений никаких не делают.
Кроме того заметил, что если при перепроведении документа нажать Esc и прервать обработку, то старые движения, которые были до этого очищаются. А если не использовать перехватчик, то старые движения остаются.
Может я что-то не правильно делаю?[/quote]

Похоже это еще мною зарегистрированный баг  №4238
[url]http://www.1cpp.ru/bugs/show_bug.cgi?id=4238[/url]
К сожалению так до сих пор и не пофиксен :(
Так что использовать перехватчик обработки проведения я-бы не советовал. Получить "полупроведенный документ" - еще то удовольствие :)
  
Наверх
ICQ  
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: Как правильно пользоваться перехватчиком для перехвата проведения?
Ответ #4 - 08. Октября 2009 :: 12:11
Печать  
Была такая дрянь... лечится
Код
Выбрать все
	УправлениеНастройками=СоздатьОбъект("УправлениеНастройками");
	УправлениеНастройками.Включить("ПерехватитьСобытияГК");
	УправлениеНастройками.Включить("EnableTableSourceTable");

	УправлениеНастройками.Включить("EnableTurboBL");
 


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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как правильно пользоваться перехватчиком для перехвата проведения?
Ответ #5 - 08. Октября 2009 :: 12:28
Печать  
[quote author=avgreen link=1248167893/0#3 date=1249333779]
Похоже это еще мною зарегистрированный баг  №4238
[url]http://www.1cpp.ru/bugs/show_bug.cgi?id=4238[/url]
К сожалению так до сих пор и не пофиксен :(
Так что использовать перехватчик обработки проведения я-бы не советовал. Получить "полупроведенный документ" - еще то удовольствие :)
[/quote]
Можешь проверить свой же тест с учетом предыдущего замечания по правке реестра?
  

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: Как правильно пользоваться перехватчиком для перехвата проведения?
Ответ #6 - 08. Октября 2009 :: 14:42
Печать  
[quote author=artbear link=1248167893/0#5 date=1255004926][quote author=avgreen link=1248167893/0#3 date=1249333779]
Похоже это еще мною зарегистрированный баг  №4238
[url]http://www.1cpp.ru/bugs/show_bug.cgi?id=4238[/url]
К сожалению так до сих пор и не пофиксен :(
Так что использовать перехватчик обработки проведения я-бы не советовал. Получить "полупроведенный документ" - еще то удовольствие :)
[/quote]
Можешь проверить свой же тест с учетом предыдущего замечания по правке реестра?[/quote]

Все по прежнему
[code]а = 0/0;      [/code] последи модуля проведения дает полупроведенный документ :(
  
Наверх
ICQ  
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: Как правильно пользоваться перехватчиком для перехвата проведения?
Ответ #7 - 08. Октября 2009 :: 18:40
Печать  
смотри HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Options\1C++ Components & Class\название базы\V7\юзер базы
значение EnableTurboBL должно быть 1
вчера как раз с этим разбирался.
Так-же проверяется так:
в форме документа создай переменную (назовем ее "хрень"),
далее
Код
Выбрать все
конт="";
открытьформу(док,конт);
сообщить(конт.хрень);
 


Если выдаст ошибку, то чегото не сработало.
  
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Как правильно пользоваться перехватчиком для перехвата проведения?
Ответ #8 - 09. Октября 2009 :: 06:13
Печать  
kriblya писал(а) 08. Октября 2009 :: 18:40:
смотри HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Options\1C++ Components & Class\название базы\V7\юзер базы
значение EnableTurboBL должно быть 1

Да у меня там какраз и есть единичка
Цитата:
вчера как раз с этим разбирался.
Так-же проверяется так:
в форме документа создай переменную (назовем ее "хрень"),
далее
Код
Выбрать все
конт="";
открытьформу(док,конт);
сообщить(конт.хрень);
 


Если выдаст ошибку, то чегото не сработало.

И этой "хренью" я давно пользуюсь в некоторых местах - все работает. Но на СтатусВозврата(0) от модуля проведения при включенном перехватчике проведения это никак не влияет Печаль

2 artbear А эту идею проверял http://www.1cpp.ru/forum/YaBB.pl?num=1242732564/60#60 или не было времени? Просто интересно - есть надежда или она уже умерла ..... последней  Смех
  
Наверх
ICQ  
IP записан
 
Andrekr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 21. Июля 2009
Re: Как правильно пользоваться перехватчиком для перехвата проведения?
Ответ #9 - 09. Октября 2009 :: 09:19
Печать  
kriblya писал(а) 08. Октября 2009 :: 12:11:
Была такая дрянь... лечится
Код
Выбрать все
	УправлениеНастройками=СоздатьОбъект("УправлениеНастройками");
	УправлениеНастройками.Включить("ПерехватитьСобытияГК");
	УправлениеНастройками.Включить("EnableTableSourceTable");

	УправлениеНастройками.Включить("EnableTurboBL");
 


Правит реестр.


Тест перехватчика с учетом вышенаписанного кода. Архив разархивировать и скопировать в каталог базы 1cpp.dll.
Результат не изменился. По-прежнему при перепроведении с ошибкой либо при прерывании перепроведения все движения очищаются.
  

TestHooker2.7z ( 14 KB | Загрузки )
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Как правильно пользоваться перехватчиком для перехвата проведения?
Ответ #10 - 09. Октября 2009 :: 12:20
Печать  
Andrekr писал(а) 09. Октября 2009 :: 09:19:
kriblya писал(а) 08. Октября 2009 :: 12:11:
Была такая дрянь... лечится
Код
Выбрать все
	УправлениеНастройками=СоздатьОбъект("УправлениеНастройками");
	УправлениеНастройками.Включить("ПерехватитьСобытияГК");
	УправлениеНастройками.Включить("EnableTableSourceTable");

	УправлениеНастройками.Включить("EnableTurboBL");
 


Правит реестр.


Тест перехватчика с учетом вышенаписанного кода. Архив разархивировать и скопировать в каталог базы 1cpp.dll.
Результат не изменился. По-прежнему при перепроведении с ошибкой либо при прерывании перепроведения все движения очищаются.


Подожди! Я что-то не понял. При проведении с ошибкой движения не очищаются. Т.е. те движения которые сделаны ДО возникновения ошибки остаются, а те что после естественно не делаются. Но документ проводится. Т.е. окошко "Документ не проведен + Ок" не появляется. Т.е. получается ПОЛУпроведенный документ. Или у тебя не так?
  
Наверх
ICQ  
IP записан
 
Andrekr
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 21. Июля 2009
Re: Как правильно пользоваться перехватчиком для перехвата проведения?
Ответ #11 - 09. Октября 2009 :: 12:49
Печать  
Вот смотри как у меня. (В тесте там все ясно. Скачай.)
Например, пользователь провел документ. Сделались движения. Потом он заходит в уже проведенный документ и снова нажимает "провести" (т.е. не отменяет проведение и потом проводит, а перепроводит уже проведенный документ).
Если при перепроведении документа возникает какая-либо ошибка или пользователь отменяет перепроведение, то движения документа, должны восстановится и быть такими как после первого проведения, как были до перепроведения.
Должно быть что-то типа транзакции. Транзакция - проведение - не прошло - происходит отмена и все восстанавливается как было раньше.
При использовании перехватчика проведения все делается, как будто не в транзакции.

Самое плохое в такой ситуации, что документ помечается проведенным, а проводок (ну или движений) никаких нет.
Наверно наполовину проведенный документ - это более общий пример, а мой частный, но просто это то с чем я столкнулся. Да и источник проблемы общий.
  
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Как правильно пользоваться перехватчиком для перехвата проведения?
Ответ #12 - 09. Октября 2009 :: 13:47
Печать  
Andrekr писал(а) 09. Октября 2009 :: 12:49:
[skip]
Самое плохое в такой ситуации, что документ помечается проведенным, а проводок (ну или движений) никаких нет.
Наверно наполовину проведенный документ - это более общий пример, а мой частный, но просто это то с чем я столкнулся. Да и источник проблемы общий.

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как правильно пользоваться перехватчиком для перехвата проведения?
Ответ #13 - 13. Октября 2009 :: 04:52
Печать  
avgreen писал(а) 09. Октября 2009 :: 13:47:
Источник проблемы в том что СтатусВозврата(0) не передается из модуля проведения в перехватчик, т.е. в место вызова ВыполнитьОригинальноеСобытиеГК() - это если одним предложением сказать то что мы сейчас наговорили на пол-треда  Смех

http://www.1cpp.ru/forum/YaBB.pl?num=1254820409/13#13
Проверь.
  

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


1C++ rocks!

Сообщений: 55
Зарегистрирован: 23. Апреля 2009
Re: Как правильно пользоваться перехватчиком для перехвата проведения?
Ответ #14 - 13. Октября 2009 :: 07:25
Печать  
Проверь вот такую конструкцию. У меня вроде работает =)
Код
Выбрать все
Функция Событие_ОбработкаПроведения(Конт,ДопПараметр) Экспорт
	Перем Результат;

	Перехватчик=СоздатьОбъект("Перехватчик");
	Перехватчик.СнятьПерехватСобытийПроведенияДокумента(Конт.Вид());

	Модуль	= СоздатьОбъект("ВыполняемыйМодуль");
	Параметры	= СоздатьОбъект("СписокЗначений");
	Параметры.ДобавитьЗначение(ДопПараметр);
	Результат	= Модуль.ВыполнитьПроцедуруКонтекста(Конт, "ОбработкаПроведения", Параметры);

	КлассПерехватСобытийГК=СоздатьОбъект("КлассПерехватчикГК");
	Перехватчик.ПерехватитьСобытияПроведенияДокумента(Конт.Вид(), КлассПерехватСобытийГК);

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

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать