Программное создание элементов УФ

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

Во всех примерах кода приняты следующие имена переменных:

  • ИмяЭлемента — имя элемента
  • Привязка — группа для вставки элемента
  • ЭтаФорма — ссылка на форму
  • Элемент — добавленный элемент

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

Поле ввода

Обычное поле ввода:

Элемент = ЭтаФорма.Элементы.Вставить(ИмяЭлемента, Тип("ПолеФормы"), Привязка);
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.Заголовок = "";
Элемент.ПутьКДанным = "";

Поле ввода-флажок:

Элемент = ЭтаФорма.Элементы.Вставить(ИмяЭлемента, Тип("ПолеФормы"), Привязка);
Элемент.Вид = ВидПоляФормы.ПолеФлажка;
Элемент.Заголовок = "";
Элемент.ПутьКДанным = "";

Если это реквизит формы, то в пути данных указывается просто его идентификатор ИмяРеквизита. Если это реквизит объекта формы, то Объект.ИмяРеквизита.

Команда и кнопка для нее

ИмяКоманды = "";
Команда = ЭтаФорма.Команды.Добавить(ИмяКоманды);
Команда.Заголовок = "";
Команда.Действие  = ИмяКоманды;                
Команда.Картинка = БиблиотекаКартинок.ИмяКартинки;
Команда.Отображение = ОтображениеКнопки.КартинкаИТекст;

КнопкаФормы = ЭтаФорма.Элементы.Вставить(ИмяКоманды, Тип("КнопкаФормы"),Привязка.Родитель, Привязка);
КнопкаФормы.ИмяКоманды = ИмяКоманды;           

&НаКлиенте
Процедура ИмяКоманды(Команда) Экспорт

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

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

Если в элементе должны отображаться реквизиты, их нужно добавить в форму.

Реквизит = Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("..."));
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(Реквизит);
ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов);

Особые виды полей формы

Добавление поля табличного документа:

ИмяЭлемента = "...";
Реквизит = Новый РеквизитФормы(ИмяЭлемента, Новый ОписаниеТипов("ТабличныйДокумент"));
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(Реквизит);
ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов);
	
Элемент = ЭтаФорма.Элементы.Вставить(ИмяЭлемента, Тип("ПолеФормы"), Элемент);
Элемент.Вид = ВидПоляФормы.ПолеТабличногоДокумента;
Элемент.ПутьКДанным = ИмяЭлемента;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;

Группы формы, страницы

Добавление группы формы:

Привязка = ...;
Группа = ЭтаФорма.Элементы.Вставить(ИмяЭлемента, Тип("ГруппаФормы"), Привязка);
Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
Группа.Заголовок = "...";
Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
Группа.Отображение = ОтображениеОбычнойГруппы.Нет; 

Элементы добавляются точно так же, в ЭтаФорма.Элементы, а не в Группа.

Если не указать заголовок, его не будет. Заговолок всегда выводится сверху, по умолчанию зеленым цветом, справа его не вывести штатно. Свойства для положения заголовка нет.

Добавление страницы:

Привязка = ...;
Группа = ЭтаФорма.Элементы.Вставить(ИмяЭлемента, Тип("ГруппаФормы"), Привязка);
Группа.Вид = ВидГруппыФормы.Страница;
Группа.Заголовок = "...";

Декорации формы

Декорация формы в виде картинки:

Элемент = ЭтаФорма.Элементы.Вставить(ИмяЭлемента, Тип("ДекорацияФормы"), Привязка);      
Элемент.Вид = ВидДекорацииФормы.Картинка;
Элемент.Картинка = БиблиотекаКартинок.ИмяКартинки;

Вычисляемые поля

Программно можно добавить и особые вычисляемые поля.

Например, чтобы посчитать итог по колонке Сумма табличной части таблицы Запасы, путь к данным элемента нужно прописать как Объект.Запасы.ИтогСумма (добавляем префикс Итог). Такой же путь надо прописывать и в поле ПутьКДаннымПодвала, если нужно разместить итог в подвале таблицы.

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

комментария 2

  1. rzd:

    Так а где библиотека?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *