|
v7: 1С++. Перехват предопределенных методов формы (событий) в классе | ☑ | ||
---|---|---|---|---|
0
zelenprog
02.02.24
✎
10:46
|
Добрый день!
Нужно сделать несколько однотипных обработок, которые в предопределенных методах выполняют очень похожие действия. Также в этих обработках есть одинаковые "наборы" реквизитов, события (формулы) от которых, также выполняют очень похожие действия. Естественно, хочется программный код этих одинаковых действий минимизировать и переиспользовать. для этого все эти одинаковые действия я вынес во внешний 1С++ класс. Класс этот я назвал звучно - "КонтроллерМоейОбработки"! В модуле обработки объявлена переменная мКонтроллер и при открытии формы создается этот класс:
Во всех предопределенных методах, в обработчиках событий, в методах формул я просто вызываю (транслирую) соответствующую функцию этого контроллера. Например:
Однако, писать около двадцати таких "транслирующих" вызовов в каждой обработке - тоже довольно утомительно. Или я просто ленивый? А также эта "механическая" трансляция чревата ошибками. В общем, хочется еще больше упростить код. Можно ли это сделать? Может ли класс сам "назначить" обработчики на все эти события на "свои" "локальные" методы? Например, в методе КонтроллерМоейОбработки::УстановитьКонтекстФормы(пКонтекстФормы) написать что-то типа:
Читал про класс "Перехватчик", но так до конца не понял, можно ли с помощью Перехватчика это сделать? Или это надо делать каким-то другим способом? Можно ли вообще сделать задуманное? Подскажите, пожалуйста. |
|||
1
АЛьФ
02.02.24
✎
11:22
|
У нас используется класс Общие.Форма.Привязка. У него в модуле прописано:
Функция Сам(Конт) Возврат Конт; КонецФункции Процедура Конструктор() Перехватчик = СоздатьОбъект("Перехватчик"); ПерехваченныйКонтекст = Сам(Контекст).ПолучитьКонтекстОкружения(); ПерехватчикПредыдущий = Перехватчик.ПолучитьПерехватчикСобытийГК(ПерехваченныйКонтекст); Перехватчик.ПерехватитьСобытияГК(ПерехваченныйКонтекст, Сам(Контекст)); Все события с формы летят прямо в него. Процедура ПослеОткрытия() Экспорт Перехватчик.ВыполнитьСобытиеГК(ПерехватчикПредыдущий, ПерехваченныйКонтекст, "ПослеОткрытия"); //ЗаполнитьПривязку(); //_ПриИзмененииРазмераОкна(); КонецПроцедуры Процедура ПослеСозданияФормы() Экспорт Перехватчик.ВыполнитьСобытиеГК(ПерехватчикПредыдущий, ПерехваченныйКонтекст, "ПослеСозданияФормы"); ШиринаПривязки=РасширениеФормы.Ширина; ВысотаПривязки=РасширениеФормы.Высота; ЗаполнитьПривязку(); _ПриИзмененииРазмераОкна(); КонецПроцедуры |
|||
2
Ёпрст
02.02.24
✎
11:23
|
||||
3
zelenprog
02.02.24
✎
12:02
|
(1) У меня тоже есть такой класс.
Даже два: "Общие.Форма.Привязка" и "Общие.Форма.Привязка2". Но в них нету кода с Перехватчиками. А что делает "ПерехваченныйКонтекст = Сам(Контекст).ПолучитьКонтекстОкружения()"? Есть где-нибудь описание класса "Перехватчик"? В документации на 1С++ не нашел, вернее ссылка "Перехватчик" там просто не открывается: https://www.1cpp.ru/docum/icpp/html/extobjs.html |
|||
4
АЛьФ
02.02.24
✎
12:05
|
||||
5
АЛьФ
02.02.24
✎
12:08
|
2(3) по поводу "ПолучитьКонтекстОкружения": https://www.1cpp.ru/docum/icpp/html/classes.html#id13
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |