Переключение на Главную Страницу Страницы: 1 ... 4 5 [6] 7  ОтправитьПечать
Очень популярная тема (более 25 ответов) 1spy.dll: нужно добавить выполнение евентов (число прочтений - 32143 )
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #75 - 01. Ноября 2007 :: 10:53
Печать  
dnp писал(а) 31. Октября 2007 :: 16:05:
Хм. Выше, в (63) есть тестовая конфа. Я её качнул. Пользовательское событие генерирует совсем не то:
Код
Выбрать все
ПЕРЕХВАЧЕНА СИСТЕМНАЯ ЗАПИСЬ В ЖР: НекийТипСобытия -- НекоеСобытие -- 3 -- ТипаКомментарий -- =НекийОбъект= --
ПЕРЕХВАЧЕНА СИСТЕМНАЯ ЗАПИСЬ В ЖР: $НекийТипСобытия -- НекоеСобытие -- 3 -- ТипаКомментарий --  --  


Тоесть два события на одну пользовательскую запись в ЖР.

Это поведение 1С такое Печаль
Только при втором вызове будет происходить запись в ЖР, если разработчик не вернет 0 в событии ГМ.
  

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


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #76 - 01. Ноября 2007 :: 11:28
Печать  
эээ... а то, что ЗаписьЖурналаРегистрации(...) перехватывается как системное событие - это тоже непоправимо?
  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #77 - 12. Ноября 2007 :: 08:27
Печать  
Возможно я не совсем верно сформулировал. Переспрошу :

Впечатление, что
artbear писал(а) 31. Октября 2007 :: 15:50:
.....
Лично мне не удалось поймать момент его срабатывания Улыбка
Т.е. ИМХО это событие никогда не работает !!

возникает, вероятно, из-за того, что при программном вызове ЗаписьЖурналаРегистрации(...)
Перехватчик славливает это событие обработчиком
Событие_ЗаписьСобытияЖурналаРегистрации(...)
хотя должно было перехватиться
Событие_ЗаписьПользовательскогоСобытияЖурналаРегистрации(...)

Собственно вопрос :
Забить и сделать обход бага? Или?..
  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #78 - 12. Ноября 2007 :: 09:55
Печать  
Кстати, двойное срабатывание на пользовательское событие прекратилось, так что можно забыть про Событие_ЗаписьПользовательскогоСобытияЖурналаРегистрации(...)
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #79 - 14. Ноября 2007 :: 09:22
Печать  
dnp писал(а) 12. Ноября 2007 :: 09:55:
Кстати, двойное срабатывание на пользовательское событие прекратилось, так что можно забыть про Событие_ЗаписьПользовательскогоСобытияЖурналаРегистрации(...)

Точно прекратилось? Это очень хорошо Улыбка !!
ЗЫ Просто пока проверить не могу
  

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


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #80 - 14. Ноября 2007 :: 12:03
Печать  
artbear писал(а) 14. Ноября 2007 :: 09:22:
Точно прекратилось? Это очень хорошо Улыбка !!
ЗЫ Просто пока проверить не могу

Нет, к сожалению не прекратилось. Просто в попытках запустить КОП перехватывающий эти события я сам себя запутал и плохо читал советы Arta (в соседней ветке, ага), и принял за это исправление что-то другое. Что именно - сейчас, наверное, не восстановить (всё же завтра на работе проверю, есть одна мысль).
Картина такая, что первое срабатывание выглядит нормально (хоть и происходит не там), а во втором часть параметров искажена, часть очищена (и опять не там).

Так что опять я поторопился. Извиняюсь.
  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #81 - 15. Ноября 2007 :: 02:40
Печать  
artbear писал(а) 14. Ноября 2007 :: 09:22:
Точно прекратилось?

В общем, если не сцать, и не отдавать событие дальше (то есть из обработчика возвращать ноль), то пользовательское событие дубля не делает. Тоесть как бы - глюк, но только если хотим сохранить штатный МЛГ.
А если сохранять, то в 1cv7.mlg пишется именно дубль, тоесть поврежденный вариант.
  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #82 - 16. Ноября 2007 :: 09:18
Печать  
Ещё поигрался с
Код
Выбрать все
СистемныйПерехватчик = СоздатьОбъект( "Перехватчик" );
Если ( ПустоеЗначение( СистемныйПерехватчик.ПолучитьПерехватчикСобытийГлобальногоМодуля() ) = 0 ) Тогда
    СистемныйПерехватчик.СнятьПерехватСобытийГлобальногоМодуля();
КонецЕсли;
СистемныйПерехватчик.ПерехватитьСобытияГлобальногоМодуля( Контекст );
 


с последующим выборочным включением перехвата событий из моей любимой тройки. Там вообще хитрые взаимозависимости оказались.
Имеет ли смысл рыть их и рассказывать здесь?
Просто работать можно и при существующем раскладе, хотя и непорядок.
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #83 - 16. Ноября 2007 :: 14:06
Печать  
Конечно, рассказывай.
Интересны любые подводные камни или баги или интересные фичи Улыбка
  

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


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #84 - 19. Ноября 2007 :: 06:24
Печать  
Вот результат первой серии тестов.
Таблица муторная, пришлось раскрашивать во все цвета радуги, поэтому креплю файл а не рисую в форуме.
Честно скажу, что не знаю, что все это значит, так что не ругайте))
Если будут пожелания - в каком порядке ещё погонять или куда посмотреть - wellcome.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #85 - 19. Ноября 2007 :: 11:27
Печать  
1. Нифига не понял схему включения/включения событий ГМ
2. В самом ГМ 1С есть соответствующие события СобытиеГМ_ХХХ ?
или они есть только в перехватчике ГМ, а в самом ГМ нет?
  

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


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #86 - 19. Ноября 2007 :: 11:35
Печать  
2. События только в Перехватчике, в ГМ я их заремил.
1. Схемы включения/выключения две,
    одна - это перезапустить 1С, и включить выбранные события
    вторая - показана в #82, развернуто она сейчас выглядит так (copy/pase):
Код
Выбрать все
//*******************************************
// ГенералХук::ВключитьПерехватСобытий(...)
Процедура ВключитьПерехватСобытий( флСистема, флОшибки, флПрограммная ) экспорт
    включен_Система 	= флСистема;
	включен_Ошибки		= флОшибки;
	включен_Программная	= флПрограммная;

	Регистратор = СоздатьОбъект( "ЖурналРегистрацииSQL" );

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

	СистемныйПерехватчик = СоздатьОбъект( "Перехватчик" );
	Если ( ПустоеЗначение( СистемныйПерехватчик.ПолучитьПерехватчикСобытийГлобальногоМодуля() ) = 0 ) Тогда
	    СистемныйПерехватчик.СнятьПерехватСобытийГлобальногоМодуля();
	КонецЕсли;
	СистемныйПерехватчик.ПерехватитьСобытияГлобальногоМодуля( Контекст );
	Если ( включен_Ошибки = 1 ) Тогда
		СистемныйПерехватчик.ПодключитьСобытие_НеобработаннаяОшибка();
	КонецЕсли;
	Если ( включен_Система = 1 ) Тогда
		СистемныйПерехватчик.ПодключитьСобытие_ЗаписьСобытияЖурналаРегистрации();
	КонецЕсли;
	Если ( включен_Программная = 1 ) Тогда
		страции();
	КонецЕсли;

КонецПроцедуры  //ВключитьПерехватСобытий
 

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #87 - 19. Ноября 2007 :: 12:03
Печать  
dnp писал(а) 19. Ноября 2007 :: 11:35:

1. Давно хотел сказать, что код
Код
Выбрать все
Если ( ПустоеЗначение( СистемныйПерехватчик.ПолучитьПерехватчикСобытийГлобальногоМодуля() ) = 0 ) Тогда
    СистемныйПерехватчик.СнятьПерехватСобытийГлобальногоМодуля();
КонецЕсли;
СистемныйПерехватчик.ПерехватитьСобытияГлобальногоМодуля( Контекст ); 


не нужен, достаточно просто написать
Код
Выбрать все
СистемныйПерехватчик.ПерехватитьСобытияГлобальногоМодуля( Контекст ); 


Т.е. Перехватчик при установке нового перехвата (на ГК или ГМ) сам освобождает предыдущий перехват, при этом возвращается предыдущий обработчик, если он есть Улыбка

2. Честно говоря, я таблицу вообще не понял Улыбка
Можешь какое-то резюме выложить как итог?
  

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


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #88 - 19. Ноября 2007 :: 14:49
Печать  
1. Знаешь, я этот код сделал после того, как на одинокое
Код
Выбрать все
СистемныйПерехватчик.ПерехватитьСобытияГлобальногоМодуля( ГенералХук ); 

получил вот это: Цитата:
СистемныйПерехватчик.ПерехватитьСобытияГлобальногоМодуля( ГенералХук );
{.... Файл такой-то.ЕРТ(17)}: На глобальный модуль уже установлен перехват!
Правда это были
  1С++ 2.5.0.4  Nightly build 2007-10-31
  FormEx 2.0.5.0 #45
Завтра на работе попробую на свежем.

2. Жалко, что таблицу вообще не понял Улыбка я оч старался.

Резюме :
  • Некоторые события могут возникать, даже если их не включить.
  • Если событие включить а потом выключить, то поведение перехвата в некоторых случаях не будет совпадать с поведением, если это событие и не включали вовсе.
   • Поскольку входных условий много, а сочетаний их - ещё больше, то выразить все это в виде текста ("Если делаем так-то, то получаем это, это и это. Если теперь сделать ещё вот так, то всё останется так же, кроме вот этого момента...") я решил будет хуже, чем сделать таблицу. Хм..


Всё таки дам пояснения к табличке, вдруг поможет Улыбка

Её нужно смотреть по строкам сверху вниз. Каждая строка - это описание моего воздействия и реакция обработчиков.
  Желтым отметил моменты (строки), когда состояние 1С "сбрасывается" -- закрываю 1С совсем и запускаю заново.
  Бежевым отметил строки, когда меняю набор обработчиков (кодом приведенным в #86) , без выгрузки 1С; "ДА" - я включил перехват, "НЕТ" - не включил.

1. С первой колонки начинаются мои комментарии и промежуточные выводы. Это не выполнявшиеся действия, только пояснения.
2. Во второй колонке указано моё действие - запуск 1С, или генерация какого-либо события. Если это событие породило более чем одну сработку обработчиков, то будет дополнительная строка, где генерируемое событие уже не указано (фактически ведь оно было одно, хоть сработок и много (точнее - две))
3,4,5. Остальные колонки - это инфа по сработавшим перехватам (в заголовке таблицы есть подписи).
   • "1" или "0" - это что данный функция-обработчик вернет системе (от этого зваисит дальнейшее поведение 1С),
   • "ок" или "бяка" - это качество полученной обработчиком в параметрах инфы (есть случаи искажения)
   • ячейка может быть покрашена в голубой цвет -- посмотри по этой колонке вверх, и увидишь, что обработчик-то выключен..., эта сработка есть, хотя мы, вроде, не заказывали.

Большая часть строк этой таблицы не содержит в себе указания на ошибку в поведении, они предназначены для того, чтобы показать - "В этом месте всё нормально, получаем ожидаемый результат" или предназначены для сравнения "ага, вот оно ещё нормально, а вот, тремя строчками ниже - уже колбасит"
Могу выложить завтра текущее состояние тестовой конфы, из которой это поведение выковыривал.
  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1spy.dll: нужно добавить выполнение евентов
Ответ #89 - 19. Ноября 2007 :: 14:57
Печать  
блин. ты уже читаешь. я там подправил самый хвост текста, перечти.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 4 5 [6] 7 
ОтправитьПечать