[RClassMngr] Наследование форм v.1.1

26.03.09

Разработка - Математика и алгоритмы

Предлагаю методику наследования форм. Данная методика позволяет выделять блоки элементов управления форм, которые часто повторяются в разных формах, в отдельные классы.

UPDATE 26.03.2009 v.1.1

+ Добавил поддержку наследования типа КоманднаяПанель.


Методика предполагает использование компоненты RClassMngr, общего модуля конфигурации и определенного порядка организации элементов управления и реквизитов  родительской (базовой) и наследуемой форм. Множественное наследование не предусмотрено.

Для организации наследования необходимо выполнить следующее.

1.      Включить в состав конфигурации общий модуль НаследованиеФорм, зарегистрировать в  системе внешнюю компоненту RClassMngr (прилагаются в примере).

2.      Создать базовый класс на основе обработки.

2.1.   Добавить обработку, например, КлассВыборПериода.

2.2.   Добавить форму, например, Форма. Сделать ее основной. Обработка может содержать только одну базовую форму и она должна быть основной.

2.3.   Добавить реквизит формы имя Форма, тип Произвольный. Этот реквизит необходимо использовать вместо стандартного ЭлементыФормы для доступа к реквизитам базовой формы и их значениям в обработчиках базовой формы.

2.4.   Добавить на форму необходимые элементы управления. Элементы управления желательно не связывать с реквизитами формы. Обращаться к значениям элементов управления следует так: Форма.ИмяЭлементаУправления.Значение. Для обращения непосредственно к элементу управления – Форма.ИмяЭлементаУправления.

2.5.   Добавить необходимые обработчики событий для каждого элемента управления. В объявления процедур обработчиков следует добавить слово Экспорт. Иначе переадресация вызова обработчика из формы наследника в форму родителя работать не будет.

2.6.   После объявления процедур в теле модуля добавить следующий вызов: НаследованиеФорм.ИнитФормыКлассаРодителя(ЭтаФорма);

3.      Наследовать эту форму можно в любой форме конфигурации соблюдая следующий порядок действий. Например, Отчет ЖурналДокументов, форма ОсновнаяФорма.

3.1.   В модуль наследуемой формы добавить вызов НаследованиеФорм.ИнитФормыКлассаНаследника(ЭтаФорма);

3.2.   Добавить реквизит формы имя БазовыеКлассы, тип Произвольный.

3.3.   В модуль наследуемой формы добавить стандартные обработчики для элементов управления. Не буду приводить текст этих обработчиков, смотрите прилагаемый пример. Обращаю внимание! Текст этих обработчиков менять не следует! Форма может наследовать элементы сразу от нескольких разных родительских форм. При этом стандартные обработчики добавляются только один раз и работают сразу для всех родительских форм и унаследованных элементов управления. Изменять их не нужно. Их нужно просто скопировать из примера и просто вставить в модуль вашей формы.

3.4.   На наследуемую форму следует поместить Панель в то место на форме, где должны оказаться наследуемые элементы управления. Имя панели, например, клВыборПериода1.

3.5.   Добавить реквизит формы имя клВыборПериода1, тип Обработка.КлассВыборПериода. Внимание! Имя реквизита должно совпадать с именем панели на форме. Тип реквизита должен быть обработкой, в которой описан базовый класс.

Все. Теперь при выводе основной формы отчета ЖурналДокументов на месте панели вы увидите реквизиты из родительской формы.

 

Кроме того, доступны следующие возможности.

  1. Возможно переопределить свойства элемента управления в наследуемой форме. Для этого нужно поместить на форму элемент управления, например, скопировать его из родительской формы. Имя элемента должно быть составлено по следующему шаблону – ИмяПанели_ИмяЭлементаВРодительскойФорме. Можно изменить любые свойства элемента, они уже не будут изменены при связывании родительской формы и этого элемента. Обработчики событий можно не указывать. Они будут подхвачены из родительской формы.
  2. А можно изменить обработчики на собственные. Для этого достаточно указать обработчики для элемента в наследуемой форме стандартным способом. Тогда обработчики родительской формы будут игнорироваться.
  3. Возможно связать элементы управления, определенные в родительской форме, с данными, определенными в наследуемой форме. Для этого в Панели в свойстве Заголовок необходимо записать пары ИмяЭлемента=Данные через точку с запятой.
  4. В модуле наследуемой формы возможно обращение к элементам из родительской формы следующим образом. Для приведенного выше примера, БазовыеКлассы.Получить("клВыборПериода1").Форма. ИмяЭлементаУправления или ЭлементыФормы.клВыборПериода1_ИмяЭлементаУправления.
  5. Если в родительской форме привязать границы элементов управления к границам формы, то в наследуемой форме они будут привязаны к границам панели.
  6. Возможен вызов родительского обработчика из переопределенного обработчика. Например, вы хотите переопределить обработчик нажатия кнопки. Тогда вы указываете обработчик для кнопки клТест_Кнопка1Нажатие. А в модуль наследуемой формы добавляете, например, такую процедуру.

Процедура клТест_Кнопка1Нажатие(Элемент)

      Сообщить("Вызван переопределенный обработчик");

      СтандClick(Элемент);

КонецПроцедуры

 

Компоненту и конфигурацию с примером можно получить здесь //infostart.ru/projects/3629/


См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1870    stopa85    12    

34

Алгоритм симплекс-метода для решения задачи раскроя

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4662    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    7652    4    SpaceOfMyHead    17    

56

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7929    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4546    fishca    13    

36

Интересная задача на Yandex cup 2021

Математика и алгоритмы Бесплатно (free)

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8934    John_d    73    

46

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

Подробный разбор, с примером использования, встроенного механизма кластеризации 1С.

31.08.2021    7957    dusha0020    8    

70
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Арчибальд 2707 25.03.09 13:12 Сейчас в теме
Продолжаем, значит. И это правильно!
2. tormozit 7140 31.03.09 14:00 Сейчас в теме
А как события то обрабатывать будешь?
3. Robert 721 31.03.09 15:26 Сейчас в теме
(2) Обработчик события элемента управления записан в модуле формы родителя. Он и будет отрабатывать. Если только явно не переопределен в модуле формы наследника. Для этого нужно поместить на форму наследника аналогичный элемент управления из формы родителя и явно указать ему обработчик. Это описано выше.
Или я не понял вопрос?
Оставьте свое сообщение