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


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Как перехватить и обработать процедуру модуля проведения не меняя конфигура
06. Октября 2009 :: 09:13
Печать  
У меня подключены компаненты 1с++ и Formex. Можно ли как-нибудь перехватить и переопределить процедуру проведения документа?
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
slider26
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 256
Зарегистрирован: 01. Июня 2006
Re: Как перехватить и обработать процедуру модуля проведения не меняя конфигура
Ответ #1 - 06. Октября 2009 :: 09:48
Печать  
Смотри класс "Перехватчик"
  
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Как перехватить и обработать процедуру модуля проведения не меняя конфигура
Ответ #2 - 08. Октября 2009 :: 11:52
Печать  
slider26 писал(а) 06. Октября 2009 :: 09:48:
Смотри класс "Перехватчик"

Лучше не смотри! Посмотри сначала сюда http://www.1cpp.ru/forum/YaBB.pl?num=1248167893/3#3 (последнее сообщение .... ) а потом решай - так-ли тебе это нужно Улыбка
  
Наверх
ICQ  
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

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

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

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



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

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


Что именно лечится? Что что в ветке не которую ссылка - может и лечится а баг №4238 не лечится Печаль
  
Наверх
ICQ  
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: Как перехватить и обработать процедуру модуля проведения не меняя конфигура
Ответ #5 - 09. Октября 2009 :: 05:41
Печать  
Не понял
у док модульдокумента
Код
Выбрать все
Процедура ОбработкаПроведения()
	  ДвигаемРегистры();
	а = 10/0;
КонецПроцедуры
 


у перехватчика:
Код
Выбрать все
Процедура Событие_ОбработкаПроведения(КонтекстДокумента) Экспорт
	записатьВБДПризнакПроведенности(КонтекстДокумента,1);
	ОбъектПерехватчик.ВыполнитьОригинальноеСобытиеГК(КонтекстДокумента, "ОбработкаПроведения");
КонецПроцедуры	// СобытиеГМ_СозданиеКонтекста
 




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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как перехватить и обработать процедуру модуля проведения не меняя конфигура
Ответ #6 - 09. Октября 2009 :: 06:35
Печать  
Цитата:
     записатьВБДПризнакПроведенности(КонтекстДокумента,1);

Код этого метода?
  

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


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: Как перехватить и обработать процедуру модуля проведения не меняя конфигура
Ответ #7 - 09. Октября 2009 :: 12:22
Печать  
в мускул записывается Все содержимое документа+ признак проведения, для просмотра истории
Потом можно просто посмотреть все редакции документа.
Этот же метод срабатывает призаписи
  
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Как перехватить и обработать процедуру модуля проведения не меняя конфигура
Ответ #8 - 09. Октября 2009 :: 12:26
Печать  
kriblya писал(а) 09. Октября 2009 :: 05:41:
Не понял
у док модульдокумента
Код
Выбрать все
Процедура ОбработкаПроведения()
	  ДвигаемРегистры();
	а = 10/0;
КонецПроцедуры
 


у перехватчика:
Код
Выбрать все
Процедура Событие_ОбработкаПроведения(КонтекстДокумента) Экспорт
	записатьВБДПризнакПроведенности(КонтекстДокумента,1);
	ОбъектПерехватчик.ВыполнитьОригинальноеСобытиеГК(КонтекстДокумента, "ОбработкаПроведения");
КонецПроцедуры	// СобытиеГМ_СозданиеКонтекста
 




и все работает

Конечно работает. А не должно работать! Должно сказать "Документ не проведен + Ок"  и отменить транзакцию
А если сделать так
Код
Выбрать все
Процедура ОбработкаПроведения()
	  ДвигаемРегистры();
	а = 10/0;
	  ДвигаемДругиеРегистры();
КонецПроцедуры 


то что у тебя получится? По первым регистам есть движения а по вторым нету. Но документ проведен. Это нормально?! Меня за пару таких документов бухи чуть к стенке не поставили. "С одного склада ушло а на другой не пришло - в пути рассосалось!"  Улыбка
  
Наверх
ICQ  
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: Как перехватить и обработать процедуру модуля проведения не меняя конфигура
Ответ #9 - 09. Октября 2009 :: 12:27
Печать  
Я кажется понял о чем речь идет
Код
Выбрать все
ОбработкаПроведения
	    двигаемрегист_1();
	    двигаемрегист_2();
	    двигаемрегист_3();
		    а=10/0; Вызов ошибки
	    двигаемрегист_4();
КонецПроцедуры
 



в регистрах движение 1,2,3, и нет движения 4
Так я понимаю?
Ну помоему за этим самому следить нужно,
а потом помему всю эту хрень в транзакцию не запихать?
  
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Как перехватить и обработать процедуру модуля проведения не меняя конфигура
Ответ #10 - 09. Октября 2009 :: 12:39
Печать  
kriblya писал(а) 09. Октября 2009 :: 12:22:
в мускул записывается Все содержимое документа+ признак проведения, для просмотра истории
Потом можно просто посмотреть все редакции документа.
Этот же метод срабатывает призаписи


А, ну это типа журнал регистрации. Можно перехватить запись в Журнал Регистрации и оттуда писать. Хотя конечно состояние документа он не запишет, только событие.....
У меня есть для этого отдельный класс - я тоже параноик  Смех
  
Наверх
ICQ  
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Как перехватить и обработать процедуру модуля проведения не меняя конфигура
Ответ #11 - 09. Октября 2009 :: 12:45
Печать  
kriblya писал(а) 09. Октября 2009 :: 12:27:
Я кажется понял о чем речь идет
Код
Выбрать все
ОбработкаПроведения
	    двигаемрегист_1();
	    двигаемрегист_2();
	    двигаемрегист_3();
		    а=10/0; Вызов ошибки
	    двигаемрегист_4();
КонецПроцедуры
 



в регистрах движение 1,2,3, и нет движения 4
Так я понимаю?

Да! Именно так!
Цитата:
Ну помоему за этим самому следить нужно,

Как именно следить? Все ошибки исключить на 100% невозможно.
Цитата:
а потом помему всю эту хрень в транзакцию не запихать?

А не нужно запихивать! Отключи перехват - оно само сработает так как нужно. А перехват меняет логику работы программы. А не должен по идее.....
  
Наверх
ICQ  
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: Как перехватить и обработать процедуру модуля проведения не меняя конфигура
Ответ #12 - 09. Октября 2009 :: 17:35
Печать  
Цитата:
У меня есть для этого отдельный класс - я тоже параноик

я не параноик,
но пример:
заказ от клиента -10 позиций товара, далее через день меняют, потом еще раз, и так раз 10, потом какой-то вариант оплачивают, а их менагер в отпуске, и они сами не знают чего оплатили... открыл отчет по редакциям дока, и все видишь.
или контроль работы своих менагеров... Журнал регистрации дает только данные об открытии, записи и проведении, а мои данные дают мне ВСЕ интерактивные изменения, и любые проведения доков и справочников. это- же позволяет по инету смотреть что происходит в офисе...
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как перехватить и обработать процедуру модуля проведения не меняя конфигура
Ответ #13 - 13. Октября 2009 :: 04:50
Печать  
kriblya писал(а) 09. Октября 2009 :: 05:41:
у перехватчика:
Код
Выбрать все
Процедура Событие_ОбработкаПроведения(КонтекстДокумента) Экспорт
	записатьВБДПризнакПроведенности(КонтекстДокумента,1);
	ОбъектПерехватчик.ВыполнитьОригинальноеСобытиеГК(КонтекстДокумента, "ОбработкаПроведения");
КонецПроцедуры	// СобытиеГМ_СозданиеКонтекста
 



А по-правильному ведь нужно так:
Цитата:
Функция Событие_ОбработкаПроведения(КонтекстДокумента) Экспорт
     записатьВБДПризнакПроведенности(КонтекстДокумента,1);
     Возврат ОбъектПерехватчик.ВыполнитьОригинальноеСобытиеГК(КонтекстДокумента, "ОбработкаПроведения");
КонецФункции

Т.е. для работы со статусом возврата нужно юзать функцию-обработчик перехвата и возврат 0 или 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 - 13. Октября 2009 :: 05:27
Печать  
artbear писал(а) 13. Октября 2009 :: 04:50:
kriblya писал(а) 09. Октября 2009 :: 05:41:
[skip]

А по-правильному ведь нужно так:
Цитата:
Функция Событие_ОбработкаПроведения(КонтекстДокумента) Экспорт
     записатьВБДПризнакПроведенности(КонтекстДокумента,1);
     Возврат ОбъектПерехватчик.ВыполнитьОригинальноеСобытиеГК(КонтекстДокумента, "ОбработкаПроведения");
КонецФункции

Т.е. для работы со статусом возврата нужно юзать функцию-обработчик перехвата и возврат 0 или 1 будет учитываться в качестве возврата.


Да у меня в принцыпе так и написано. С самого начала. Но IMHO проблема не в том чтобы перехватчик был функцией а чтобы перехватываемое событие было функцией. Это видно на примере Перехвата диалога сохранения/открытия файлов http://www.1cpp.ru/forum/YaBB.pl?num=1242732564/45
Как писал metaeditor Цитата:
да, у меня перехватчик тоже не видит статус возврата.
вобщем я переделал событие ДиалогВыбораФайлаПриОткрытии на функцию, так работает.

Но вот как переделать стандартное 1С-ное событие на функцию..... у кого-нибудь есть идеи?
Я попробовал тупо написать
Код
Выбрать все
Функция ОбработкаПроведения(Знач Режим)
......
КонецФункции 


Синтаксис-контроль не ругается, все работает, но работает по прежнему - т.е. статуса возврата не видит!  Злой
Цитата:
Проверьте этот вариант для своих багах и отпишитесь.

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