3 универсальные функции программного управления формой

3 универсальные функции программного управления формой

Стас Ганиев

В последнее время всё чаще приходится работать с формами, делая что-то с ними из кода (привет расширениям!). Всё это я упаковываю в подключаемое расширение Простые алгоритмы, и скоро выйдет его новая версия. А пока хочу поделиться тремя алгоритмами, которые, на мой взгляд, являются "китами" инструментария разработчика интерфейсов.

1 Добавление команды формы

Чтобы предоставить пользователю возможность что-то сделать нажатием кнопки, нужна команда формы:

Расположение команд формы в интерактивном конструкторе
Процедура ДобавитьКомандуФормы(ЭтаФорма, ИмяКоманды, Действие, Заголовок, ДополнительныеСвойства = Неопределено) Экспорт
 
 Команда = ЭтаФорма.Команды.Добавить(ИмяКоманды);
 Команда.Действие = Действие;
 Команда.Заголовок = Заголовок;
 
 Если ДополнительныеСвойства <> Неопределено Тогда
  ЗаполнитьЗначенияСвойств(Команда, ДополнительныеСвойства);
 КонецЕсли;
 
КонецПроцедуры

Среди дополнительных свойств наиболее часто используются Картинка, Отображение и Подсказка. При желании можно их добавить в формальные параметры процедуры, чтобы точно не забыть.

2 Добавление реквизита формы

Эти товарищи нам нужны для отображения дополнительной информации на форме, либо хранения переменных в контекстве формы.

Реквизиты формы
Процедура ДобавитьРеквизитФормы(ЭтаФорма, ИмяРеквизита, ТипРеквизита, Путь = "", Заголовок = "", ДополнительныеСвойства = Неопределено, СохраняемыеДанные = Ложь) Экспорт
 
 РеквизитФормы = Новый РеквизитФормы(ИмяРеквизита, ТипРеквизита, Путь, Заголовок, СохраняемыеДанные);
 
 ДобавляемыеРеквизиты = Новый Массив;
 ДобавляемыеРеквизиты.Добавить(РеквизитФормы);
 ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
 
 Если ДополнительныеСвойства <> Неопределено Тогда
  РеквизитФормы = ЭтаФорма[ИмяРеквизита];
  ЗаполнитьЗначенияСвойств(РеквизитФормы, ДополнительныеСвойства);
 КонецЕсли;
 
КонецПроцедуры

Данный вариант предусматривает добавление одного реквизита формы, однако массив ДобавляемыеРеквизиты может содержать и больше одного значения, для обработки за один раз.

3 Добавление элемента диалога

Как же без них родимых? Из этого же и состоят формы :)

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

В коде ниже в отдельном условии собраны необходимые свойства по типам элемента, а в комментариях указаны их типы (извините за тафтологию). Другой вариант реализации - создать для каждого типа элемента отдельную функцию, с выводом требуемых свойств в формальные параметры.

Функция ДобавитьЭлементДиалогаФормы(Элементы, Имя, ТипЭлемента, ГруппаРодитель, ПередЭлементом, ДопСвойства = Неопределено) Экспорт
 
 Если ПередЭлементом = Неопределено Тогда
  Элемент = Элементы.Добавить(Имя, ТипЭлемента, ГруппаРодитель);
 Иначе
  Элемент = Элементы.Вставить(Имя, ТипЭлемента, ГруппаРодитель, ПередЭлементом);
 КонецЕсли;
 
 Если ТипЭлемента = Тип("ГруппаФормы") Тогда
  Элемент.Вид = ДопСвойства.Вид; // ВидГруппыФормы
  Элемент.Группировка = ДопСвойства.Группировка; // ГруппировкаПодчиненныхЭлементовФормы
 ИначеЕсли ТипЭлемента = Тип("ПолеФормы") Тогда
  Элемент.Вид = ДопСвойства.Вид; // ВидПоляФормы
  Элемент.ПутьКДанным = ДопСвойства.ПутьКДанным; // Строка
 ИначеЕсли ТипЭлемента = Тип("КнопкаФормы") Тогда
  Элемент.Вид = ДопСвойства.Вид; // ВидКнопкиФормы
  Элемент.ИмяКоманды = ДопСвойства.ИмяКоманды; // Строка
 ИначеЕсли ТипЭлемента = Тип("ДекорацияФормы") Тогда
  Элемент.Вид = ДопСвойства.Вид; // ВидДекорацииФормы
 ИначеЕсли ТипЭлемента = Тип("ТаблицаФормы") Тогда
  Элемент.ПутьКДанным = ДопСвойства.ПутьКДанным; // Строка
 КонецЕсли;
 
 Если ДопСвойства <> Неопределено Тогда
  ЗаполнитьЗначенияСвойств(Элемент, ДопСвойства);
 КонецЕсли;
 
 Возврат Элемент;
 
КонецФункции


Report Page