Переключение на Главную Страницу Страницы: 1 [2] 3 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) Перехватчик и ФормаПослеЗаписи (число прочтений - 17994 )
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и ФормаПослеЗаписи
Ответ #15 - 24. Августа 2010 :: 10:41
Печать  
Вроде бы делаю всё как ты говоришь. Не пашет.
А не прикрепленной здесь конфе пашет?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехватчик и ФормаПослеЗаписи
Ответ #16 - 24. Августа 2010 :: 10:41
Печать  
artbear, всегда интересовал следующий вопрос:
а обязательно в классе создавать каждый раз объект
перехватчика в методах класса:
Код
Выбрать все
Функция Событие_......
     Перехватчик=СоздатьОбъект("Перехватчик");
     ....
    Возврат Перехватчик.ВыполнитьОригинальноеСобытиеГК 



или достаточно объявить
Перем Перехватчик; и в конструкторе 1 раз создать объект Перехватчик... ?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и ФормаПослеЗаписи
Ответ #17 - 24. Августа 2010 :: 10:43
Печать  
JohnyDeath писал(а) 24. Августа 2010 :: 10:32:
У меня не получается.
Пробовал и "Функция ФормаПослеЗаписи" и "Функция Событие_ФормаПослеЗаписи"
Вот тестовая конфа. 1С++ положить в каталог ИБ

Вот ошибка - следующий код лишний Печаль
Цитата:
Перем ОбъектФорма Экспорт;

Время жизни объекта типа Форма совпадает со временем жизни самой формы.
Поэтому не нужно объявлять этот объект!
Комментируешь этот код, и все как у меня Улыбка

ЗЫ я даже не пытался объявлять эту переменную, поэтому у меня сразу все заработало Улыбка
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и ФормаПослеЗаписи
Ответ #18 - 24. Августа 2010 :: 10:45
Печать  
Eprst писал(а) 24. Августа 2010 :: 10:41:
artbear, всегда интересовал следующий вопрос:
а обязательно в классе создавать каждый раз объект
перехватчика в методах класса:
Код
Выбрать все
Функция Событие_......
     Перехватчик=СоздатьОбъект("Перехватчик");
     ....
    Возврат Перехватчик.ВыполнитьОригинальноеСобытиеГК 



или достаточно объявить
Перем Перехватчик; и в конструкторе 1 раз создать объект Перехватчик... ?

Один раз достаточно, конечно Улыбка

ЗЫ здесь, конечно, нужно было сделать красиво - типа спец.метод любого класса Перехватчик() по аналогии с вирт()
может быть, как-нибудь еще сделаем Улыбка
  

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и ФормаПослеЗаписи
Ответ #19 - 24. Августа 2010 :: 10:47
Печать  
artbear писал(а) 24. Августа 2010 :: 10:43:
Вот ошибка - следующий код лишний Печаль
Цитата:
Перем ОбъектФорма Экспорт;

Время жизни объекта типа Форма совпадает со временем жизни самой формы.
Поэтому не нужно объявлять этот объект!
Комментируешь этот код, и все как у меня Улыбка

Не помогает (
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и ФормаПослеЗаписи
Ответ #20 - 24. Августа 2010 :: 10:50
Печать  
А у кого как работает конфа из 13-го поста?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и ФормаПослеЗаписи
Ответ #21 - 24. Августа 2010 :: 10:51
Печать  
Вот мой код класса ПерехватГлобальника из теста
Цитата:
//Перем ОбъектФорма Экспорт; // одно единственное изменение
Перем КонтекстФормы Экспорт;
=====
Процедура Конструктор()
     
КонецПроцедуры      // Конструктор

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

//--------------------------------------------
Функция контВид(Конт) Экспорт
     стрТип=контТип(Конт);
     Если стрТип="Документ" Тогда Возврат Конт.Вид();
     ИначеЕсли стрТип="Справочник" Тогда Возврат Конт.Вид();
     ИначеЕсли стрТип="СписокЗначений" Тогда Возврат Конт.Получить("Вид");
     КонецЕсли;
     Попытка Возврат Конт.Вид(); Исключение КонецПопытки; // гр контекст
     Попытка Возврат Конт.Вид; Исключение КонецПопытки; // форма, класс, ТЗ
     Возврат "";
КонецФункции

//======================================================================
Функция Перехватчик()
     Возврат СоздатьОбъект("Перехватчик");;
КонецФункции // Перехватчик

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

КонецПроцедуры // Инит

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

//======================================================================
Функция Событие_ПриЗаписи() Экспорт
     Сообщить("Событие ПриЗаписи в Перехватчике");
     Возврат Перехватчик().ВыполнитьОригинальноеСобытиеГК(КонтекстФормы,"ПриЗаписи");
КонецФункции // Событие_ПриЗаписи

//======================================================================
Функция ФормаПослеЗаписи(ИсточникСобытия, флРезультат) Экспорт
     Сообщить("После записи в классе!","!");
    
     Перехватчик=СоздатьОбъект("Перехватчик");
     Возврат Перехватчик.ВыполнитьОригинальноеСобытиеГК(КонтекстФормы, "ФормаПослеЗаписи", ИсточникСобытия, флРезультат);
КонецФункции
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и ФормаПослеЗаписи
Ответ #22 - 24. Августа 2010 :: 10:59
Печать  
Да, всё так и есть. Символ в символ. Но не вижу я сообщения о перехвате события После записи в перехватчике. Вижу только:
Цитата:
Событие ПриЗаписи в Перехватчике
Отрабатывает модуль проведения документа.
После записи в Документе!
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и ФормаПослеЗаписи
Ответ #23 - 24. Августа 2010 :: 11:00
Печать  
Еще может быть глюк из-за неверной расстановки кода
Цитата:
ОбъектФорма                  = СоздатьОбъект("Форма");
     ОбъектФорма.УстановитьФорму(КонтекстФормы.Форма);
    
     Перехватчик=СоздатьОбъект("Перехватчик");            
     Перехватчик.ПерехватитьСобытияГК(КонтекстФормы, вирт());

на самом деле сначала нужно сделать перехват ГК, а уж потом создавать объект Форма Улыбка
  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехватчик и ФормаПослеЗаписи
Ответ #24 - 24. Августа 2010 :: 11:02
Печать  
у меня тоже не работает в моём классе Печаль
Только теперь, если включено ПерехватитьСобытияПроведенияДокумента
и вставлен код

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



При закрытии 1с вылета нет, но в процессах остается висеть процесс от 1с-ины!!!
Печаль
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и ФормаПослеЗаписи
Ответ #25 - 24. Августа 2010 :: 11:03
Печать  
С такой процедурой:
Код
Выбрать все
Процедура Инит(Конт) Экспорт
     КонтекстФормы=Конт;

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

     ОбъектФорма			= СоздатьОбъект("Форма");
     ОбъектФорма.УстановитьФорму(КонтекстФормы.Форма);
КонецПроцедуры // Инит 


Ничего не поменялось  Печаль

мне интересно, почему у тебя работает, а у меня нет?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехватчик и ФормаПослеЗаписи
Ответ #26 - 24. Августа 2010 :: 11:04
Печать  
artbear писал(а) 24. Августа 2010 :: 11:00:
на самом деле сначала нужно сделать перехват ГК, а уж потом создавать объект Форма Улыбка


Ты прав на все 100 !
Поменял местами - событие появилось!
Улыбка

ЗЫ: зато ошибка с вылетом при закрытии 1с осталась..
Печаль
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и ФормаПослеЗаписи
Ответ #27 - 24. Августа 2010 :: 11:04
Печать  
Жень, еще раз выложи свою конфу - последний вариант.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и ФормаПослеЗаписи
Ответ #28 - 24. Августа 2010 :: 11:10
Печать  
ЕЕЕС! Всё заработало после перестановки местами создания объекта Формы и перехвата контекста!!!! (просто в последний раз класс не тот сохранил)
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватчик и ФормаПослеЗаписи
Ответ #29 - 24. Августа 2010 :: 11:10
Печать  
Eprst писал(а) 24. Августа 2010 :: 11:04:
artbear писал(а) 24. Августа 2010 :: 11:00:
на самом деле сначала нужно сделать перехват ГК, а уж потом создавать объект Форма Улыбка


Ты прав на все 100 !
Поменял местами - событие появилось!
Улыбка

Вот, а я что говорю - Перехватчик все хавает Улыбка

Eprst писал(а) 24. Августа 2010 :: 11:04:
ЗЫ: зато ошибка с вылетом при закрытии 1с осталась..
Печаль

Тут без исходников никак не обойтись Печаль
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 
ОтправитьПечать