Программное добавление элементов на управляемую форму

Публикация № 997060

Программирование - Работа с интерфейсом

УФ Программное Управляемая Команда Элемент Реквизит

13
Пример добавления Команд, Полей ввода, Групп, Страниц, Реквизитов, Обработчиков событий.

Преимущества программной доработки форм:

  • Можно использовать в расширениях
  • Легко копировать / переносить доработки
  • Различия видны при сравнении конфигурации
  • Легче производить обновление конфигурации

В данном примере все элементы формы будут добавлены в событии формы ПриСозданииНаСервере() 

 
 Добавление команды
 
 Добавление поля ввода
 
 Добавление реквизита формы
 
 Добавление группы формы
 
 Добавление страниц формы

Обработка тестировалась на релизе платформы 8.3.13.1513.

13

Скачать файлы

Наименование Файл Версия Размер
Обработка с примерами
.epf 17,67Kb
13.02.19
8
.epf 1.0.0.0 17,67Kb 8 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. mvgfirst 4 13.02.19 12:46 Сейчас в теме
Смысл добавлять реквизиты и элементы программно, если обработчики для них нужно прописывать в коде формы.
Было бы больше пользы - если бы показали "типовые приемы" обработки событий программно добавленных элементов.
2. ViperGSV 13.02.19 14:28 Сейчас в теме
(1) Смысл в том что элементы формы могут "слететь" при обновлении конфигурации. А если их задавать программно, то объединение кода намного проще, особенно если пользоваться KDiff например.
Я давно перешел на такой способ добавления реквизитов на форму (в шапки документа, в табличную часть). Правда основной кусок кода выносится в Общие модули.
3. spec8s 300 13.02.19 16:44 Сейчас в теме
(1) В примере добавления поля ввода, показано добавление обработчика

/Можно добавить обработчик события
//См. синтакс-помощник чтобы узнать список событий
// Интерфейс (управляемый) -> Поле формы -> ПолеФормы -> События
// а так же остальные варианты расширения поля формы в зависимости от вида кнопки
// Интерфейс (управляемый) -> Поле формы -> Расширение поля ввода -> События
// и прочее
ПолеВвода.УстановитьДействие(
"ПриИзменении", //Имя события
"ПриИзмененииКомментария"); //Имя процедуры обработчика
8. mvgfirst 4 14.02.19 15:32 Сейчас в теме
(3) Как добавить обработчик не расположенный в форме? В тех случаях когда я из внешней (по отношению к форме) части программы хочу добавить кнопку или поле ввода. Насколько я знаю (могу и ошибаться) назначить обработчик можно только расположенный в модуле формы. А значит надо исполнять "танцы с бубном" по вызову своих обработчиков (расположенных например в общем модуле) из обработчиков расположенных на форме. И тут получается несостыковочка. Вроде бы форму можно полностью построить программно. Но не полностью .... т.к. обработчики должны быть в форме заранее.

Если есть какой-то способ обойти это "ограничение" - буду рад если поделитесь со мной.
4. Boneman 218 13.02.19 16:59 Сейчас в теме
(1) в современных конфигурациях, про обработчики уже позаботились. В формах есть подключаемая процедурка
Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
которая ведет в общий модуль СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду

Там в свою очередь, есть вызов ОбщегоМодуля МодификацияКонфигурацииКлиентПереопределяемый.ВыполнитьПереопределяемуюКоманду(Форма, Команда, ДополнительныеПараметры);

где по имени команды и формы, можно определить свою, и напилить свои обработчики.

В итоге, получим абсолютно неизмененный объект, на поддержке...но в нем, программно добавленная кнопка и свой обработчик событий...
единственное, что у некоторых элементов параметров, предполагается много...и они как бы будут недоступны..но тут приходится или маневры искать, или немного усовершенствовать.. но в простых случаях, вполне себе все решаемо
9. mvgfirst 4 14.02.19 15:48 Сейчас в теме
(4) Так-то оно так. Если дело касается добавления какой-нибудь "некузявой" кнопочки, или чего-то незначительно-дополняющего функциональность формы или объекта который форма представляет.
Но если копнуть глубже, и рассматривать некую систему в которой есть оснастка, в которую разные модули (подсистемы) добавляют нужные им элементы управления (списки, диаграммы, таблицы со связью один ко многим и т.п.). Да еще и замахнуться на механику, когда пользователь сам решает какие модули и подсистемы ему нужны... Другими словами, разработать решение в стиле "плагинов" как во всяких там WinAmp-ах и прочих модных штуках. И тут получается нужно в форме-оснастке предусмотреть все возможные типы событий (который на ИТС кстати рекомендуют обрамлять префиксом "Подключаемый_"), а потом еще и у этих событий предусмотреть модель поведения когда нужны: а) только клиентские вызовы, б) клиентские и внеконтекстные сервеные, в) клиентские и контекстные серверные вызовы.

Поэтому да, многое можно, но навык "танец с бубном" должен быть 99lvl

И речь в данном случае не о "сферическом слоне в вакууме", а о например Рабочем Месте, которое настраивается в зависимости от роли пользователя, подразделении пользователя, полномочиям которые ему делегировали временно или постоянно и т.п.

В целом, я не пытаюсь очернить, или критиковать подходы. Просто думаю разумно было бы - побольше раскрыть нюансы именно обработки событий программно-добавленных элементов. Описать на какие подводные грабли можно наступить, как обойти.
5. ret 40 13.02.19 17:26 Сейчас в теме
Если УФ и платформа больше 8.3.10, то имхо, проще заюзать расширение. В нем нагляднее и конфа не снимается с поддержки.
6. spec8s 300 13.02.19 18:27 Сейчас в теме
(5) Не соглашусь, таким образом невозможно понять, какие реквизиты были добавлены в расширении, а какие уже были в исходной конфигурации.

Когда придет время обновлять расширение, эти вопросы обязательно могут возникнуть.
7. ret 40 14.02.19 08:13 Сейчас в теме
С расширением порядок проблем при обновлении намного меньше. С 8.3.6 их начал юзать, и функционал расширений только улучшается.
Ранее да, на ОФ именно программным кодом пользовался, и вот ни разу не визуально, и весьма проблематично. Пользовался обработкой с инфостарта по декомпиляции форм. Т.е. сперва визуально делаешь, потом в програмный код. Так вот телодвижений и в УФ осталось много. С расширением все намного проще. Мое имхо, конечно же.
Оставьте свое сообщение