v8: Технология создания своих элементов управления
К сожалению, 1С не дает нам возможности использовать свои элементы управления, поэтому приходится на разных формах дублировать один и тот же код. Выходом было бы использование вложенных форм, но и это 1С не может дать программистам. Однако не все потеряно - при некотором старании можно добиться функционала элементов управления. | Автор статьи: Гений 1С | Редакторы: TormozIT Последняя редакция №3 от 26.02.07 | |
Ключевые слова: элемент управления,хитрость,продвинутый кодинг
В дальнейшем наш элемент управления будет называться контролом.
Контрол оформляется как форма некоторой обработки. В форме должны быть только те элементы управления, которые должны содержаться в контроле.
В форме, на которой планируется разместить контрол управления, на его месте размещается пустая панель без закладок.
Затем в процедуре ПриОткрытии вызывается стандартная функция обРазместитьЭлементУправления(Форма, Панель, Контрол), где:
* Форма - форма, на которую размещается контрол
* Панель - панель, на которую размещается контрол
* Контрол - ссылка на обработку контрола
Далее все элементы контрола копируются на форму.
При этом не копируются такие свойства, как: Данные, Значение, Имя, КнопкаПоУмолчанию, ИсточникДействий, КонтекстноеМеню, потому что они не имеют смысла в контексте формы-приемника и при копировании выдают ошибку.
К именам всех скопированных элементов управления будет добавляться префикс. Префикс формируется из уникального значения ГУИД. В форме создается поле ввода с именем, полученном из ГУИДа, значение поля ввода - ссылка на обрабоку, которая контролирует контрол.
В форму, которая использует контрол, должна быть вставлена ловушка на все события контрола.
Такую ловушку (список процедур) лучше записать одной строкой, чтобы не загромождать код формы.
Количество процедур в ловушке не зависит от числа контролов - всем контролам назначаются одни и те же ловушки. После копирования свойств назначаются ловушки для событий.
Далее вызывается метод контрола ПриМонтаже(Форма, Панель, Префикс), в котором контрол должен настроить те свойства, которые не были скопированы и вообще настроить себя.
При возникновении события в элементе управления контрола в процедуре ловушки по имени контрола определяется поле ввода, где хранится ссылка на обработку-обработчик события и вызывается метод этого обработчика с названием события, ссылкой на текущую форму и структурой П, содержащей параметры события.
Особенности программирования контролов в том, что у них нет данных, нужно обращаться не к данным, а непосредственно к свойству "Значение" контрола.
Можно использовать вложенные контролы.
TormozIT
Реализовал нечто подобное описанному приему. Назвал ее "Компоненты Управления Формами" (КУФ).
Одна обработка управляет один классом КУФ. Применил методику переопределения событий.
Таким образом КУФ можно подключать к имеющимся на форме элементам управления полностью прозрачно, т.е. все нужные события имеющихся элеметнов управления могут быть прозрачно обработаны КУФом и до и после штаной обработки. Тоже необходимо помещение в текст модуля формы 3-х блоков для каждого класса КУФ: переменной для хранения списка КУФ, трансляторы событий в обработку, инициализация.
Все включения в модуль формы происходят без привязки к штаному коду.
Очень эффективная технология. Позволяет избавиться от часто имеющего место дублирования кода обработчиков событий и групп элементов управления. В моей реализации упор сделан на функциональное расширение имеющихся элементов управления. Однако внедрение в форму новых элементов управления также поддерживается.