Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) Научите как правильно перехватить событие ПриНачалеВыбораЗначения! (число прочтений - 10194 )
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Научите как правильно перехватить событие ПриНачалеВыбораЗначения!
Ответ #15 - 10. Февраля 2011 :: 10:14
Печать  
Всё зависит только от задачи.
Если нужно перехватывать воооообще все события (и всех форм) - перехватывай в глобальнике, если нужно только где-то конкретно, в конкретной форме - создавай локальный перехватчик, например,в послеОткрытия (пример - классы vandalsvq)
  
Наверх
 
IP записан
 
tciban
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 31. Января 2011
Re: Научите как правильно перехватить событие ПриНачалеВыбораЗначения!
Ответ #16 - 10. Февраля 2011 :: 11:29
Печать  
ну про ошибку я написал уже. Подробнее:
defcls и КлассПерехватСобытий сделаны как обработки в конфигурации, FormEx и ICPP последних версий.
в глобальном модуле ПриНачалеРаботыСистемы():
Попытка
           ЗагрузитьВнешнююКомпоненту ("1cpp.dll");
           
           НастройкиВК = СоздатьОбъект("УправлениеНастройками");
           НастройкиВК.Установить("ПерехватитьСобытияГК",1);
           НастройкиВК.Установить("ТурбоБЛ",1);
           НастройкиВК.Установить("Отладка",0);
           НастройкиВК.Включить("ТаблицаИсходнаяТаблица");

           ПерехватчикСобытийГМ = СоздатьОбъект("КлассПерехватСобытий");
           Перехватчик = СоздатьОбъект("Перехватчик");
           Перехватчик.ПерехватитьСобытияГлобальногоМодуля(ПерехватчикСобытийГМ);
           
     Исключение
           Сообщить ("Компонента 1С++ не загружена. Некоторые возможности перевода будут недоступны.");
           
     КонецПопытки;

В КлассПерехватСобытий:
Перем КонтФормы Экспорт;
Перем Перехватчик;

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

Процедура Событие_ПриНачалеВыбораЗначения(ИмяЭлемента,Флаг) Экспорт

     //определим тип выбираемого значения
    ФормаРасш = СоздатьОбъект("РасширениеФормы");
    ФормаРасш.УстановитьФорму(КонтФормы.Форма);
     
     Атр = ФормаРасш.ПолучитьАтрибут(ИмяЭлемента);
     ТипАтрибута = Атр.ТипЗначенияСтр();

     Если ТипАтрибута = "Дата" Тогда
           Флаг = 0;
           
           ЗначениеАтрибута = Атр.Значение;
           Если (глВыбратьДату(ЗначениеАтрибута,"Дата") > 0) Тогда
               Атр.Значение = ЗначениеАтрибута;
           КонецЕсли;
     ИначеЕсли ТипАтрибута = "Перечисление" Тогда
           Флаг = 0;
           
           ЗначениеАтрибута = Атр.Значение;
           Сп=СоздатьОбъект("СписокЗначений");
           
           Переч=Перечисление.ПолучитьАтрибут(ЗначениеАтрибута.Вид());
           
           Для К=1 По Переч.КоличествоЗначений() Цикл
                 ЗнПер = Переч.ЗначениеПоНомеру(К);
                 Сп.ДобавитьЗначение(ЗнПер, НайтиСловарнуюСтатью(Строка(ЗнПер)));
           КонецЦикла;
           
           Поз=0;
           Если (Сп.ВыбратьЗначение(ЗначениеАтрибута,,Поз,,2) > 0) Тогда
               Атр.Значение = ЗначениеАтрибута;
           КонецЕсли;
     
     КонецЕсли;

    Флаг);
КонецПроцедуры // ПриНачалеВыбораЗначения()

При начале выбора значения реквизита-перечисления на форме документа имеем:
КлассПерехватСобытий::Событие_ПриНачалеВыбораЗначения(Строка ИмяЭлемента=ПримечаниеОтпр, Число Флаг=0) : Значение не представляет агрегатный объект

Флаг);
{КлассПерехватСобытий@MD(55) }
  
Наверх
 
IP записан
 
tciban
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 31. Января 2011
Re: Научите как правильно перехватить событие ПриНачалеВыбораЗначения!
Ответ #17 - 10. Февраля 2011 :: 11:31
Печать  
Eprst писал(а) 10. Февраля 2011 :: 10:14:
Всё зависит только от задачи.


Перехватывать нужно событие ПриНачалеВыбораЗначения для всех форм.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Научите как правильно перехватить событие ПриНачалеВыбораЗначения!
Ответ #18 - 10. Февраля 2011 :: 11:38
Печать  
Я тебе пример дал постами выше - в нём всё работает как надо и ошибок нет.
Делай по-аналогии.

ЗЫ:
у тебя ошибка вот тут:
Код
Выбрать все
а,Флаг);
мяЭлемента,Флаг); 

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


1C++ rocks!

Сообщений: 19
Зарегистрирован: 31. Января 2011
Re: Научите как правильно перехватить событие ПриНачалеВыбораЗначения!
Ответ #19 - 10. Февраля 2011 :: 12:45
Печать  
Не понял! В чем ошибка? Если я действительно хочу  ВыполнитьСобытиеГК, а не ВыполнитьОригинальноеСобытиеГК?

Я хочу на всякий случай передать событие другим обработчикам (вдруг они потом будут Улыбка), а не сразу передать в обработчик события в форме. Или я что-то не правильно делаю?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Научите как правильно перехватить событие ПриНачалеВыбораЗначения!
Ответ #20 - 10. Февраля 2011 :: 12:59
Печать  
Версия 1cpp какая у тебя ?
У меня ошибок нет при твоём коде
ЗЫ: да, спутал я там выше - просто зачем вызывать в перехватчике тот же метод еще раз - не ясно.
  
Наверх
 
IP записан
 
tciban
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 31. Января 2011
Re: Научите как правильно перехватить событие ПриНачалеВыбораЗначения!
Ответ #21 - 10. Февраля 2011 :: 16:21
Печать  
3.2.3.9 версия Улыбка
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Научите как правильно перехватить событие ПриНачалеВыбораЗначения!
Ответ #22 - 11. Февраля 2011 :: 07:38
Печать  
Я делал так (у меня только локальные перехватчики используются):
классы-перехватчики у меня наследуют от единого класса ТПерехватчик.

ТПерехватчик при инициализации запоминает предыдущий перехватчик формы, и имеет обработчик для каждого события такого вида:

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



Классы-наследники же, при переопределении события, после своих действий перенаправляет исполнение в базовый класс.
Таким образом, к одной форме можно подключить несколько перехватчиков (например, для Привязок, для настроек отчета, etc) - и они все будут нормально взаимодействовать.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать