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

Aug 19, 2022 09:35

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

Добавление поля ввода управляемой формы

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

//Добавление реквизита

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

//Добавление поля ввода

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

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

Добавление кнопки управляемой формы

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Команда1 = ЭтаФорма.Команды.Добавить("Команда1");
Команда1.Действие = "ИмяПроцедуры";
Команда1.Заголовок = "Команда 1";

Элемент1 = ЭтаФорма.Элементы.Добавить("Кнопка1", Тип("КнопкаФормы"), ЭтаФорма);
Элемент1.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
Элемент1.ИмяКоманды = "Команда1";

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

&НаКлиенте
Процедура ИмяПроцедуры()
Сообщить("Нажата кнопка Команда 1");
КонецПроцедуры

Если создаваемый элемент нужно поместить в какую-либо группу, то это делается при создании этого элемента, указыванием нужного родителя:

Элемент = ЭтаФорма.Элементы.Добавить("Кнопка1", Тип("КнопкаФормы"), ЭтаФорма.Элементы.Группа1);

В данном случае кнопка добавиться в элемент с названием «Группа1» и будет отображаться в соответствие со свойствами этого элемента.

Добавление надписи (декорации) управляемой формы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Элемент1 = ЭтаФорма.Элементы.Добавить("Декорация1", Тип("ДекорацияФормы"), ЭтаФорма);
Элемент1.Заголовок = "Текст надписи";

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

//Добавление команды формы
Команда = Команды.Добавить(
"ПоказатьПредупреждение"); //Имя команды
Команда.Заголовок = "Показать предупреждение";
Команда.Действие = "КомандаПоказатьПредупреждение"; //Имя связанной процедуры

//Полный перечень свойств команды в синтакс-помощнике
// Интерфейс (управляемый)->Форма клиентского приложения->КомандаФормы

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

КнопкаФормы.ИмяКоманды = "ПоказатьПредупреждение"; //Связь с командой по имени

//Возможные варианты вида кнопки:
// -Гиперссылка
// -ГиперссылкаКоманднойПанели
// -КнопкаКоманднойПанели
// -ОбычнаяКнопка
//Если контейнер для формы - командная панель
//то вид кнопки должен быть КнопкаКоманднойПанели
КнопкаФормы.Вид = ВидКнопкиФормы.ОбычнаяКнопка;

//Полный перечень свойств кнопки формы в синтакс-помощнике
// Интерфейс (управляемый)->Кнопка формы

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

//Процедура вызываемая командой "ПоказатьПредупреждение"
&НаКлиенте
Процедура КомандаПоказатьПредупреждение(Команда)

ПоказатьПредупреждение(, "ОК!");

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

//Пример:
//Добавление реквизита с именем "АдресДоставки", тип Строка

ДобавляемыеРеквизиты = Новый Массив;

ТипРеквизита = Новый ОписаниеТипов("Строка");

РеквизитФормы = Новый РеквизитФормы(
"АдресДоставки", //Имя реквизита формы
ТипРеквизита, //Тип
"", //Путь (Пусто, "Объект", ИмяТЧ)
// например "Объект.Товары"
"Адрес доставки");//Заголовок

ДобавляемыеРеквизиты.Добавить(РеквизитФормы);

//Заставляем форму создать новые реквизиты
ИзменитьРеквизиты(ДобавляемыеРеквизиты);

//Обращение к реквизиту формы из кода
ЭтаФорма.АдресДоставки = "ул. Пушкина";

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

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

Группа = Элементы.Добавить(
"ГруппаШапка",
Тип("ГруппаФормы"),
ЭтаФорма);

Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;

Группа.Заголовок = "Реквизиты объекта:";

//Добавить поле ввода в группу
ПолеВвода = Элементы.Добавить("ФормаКомментарий", Тип("ПолеФормы"), Группа);
ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
ПолеВвода.ПутьКДанным = "Объект.Комментарий";

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

//Пример:
//Добавление группы страниц
//Добавление страниц
//Добавление элементов на страницы

СтраницыФормы = Элементы.Добавить(
"СтраницыФормы",
Тип("ГруппаФормы"),
ЭтаФорма);

СтраницыФормы.Вид = ВидГруппыФормы.Страницы;

//Подключить обработчик при смене страницы
СтраницыФормы.УстановитьДействие("ПриСменеСтраницы", "ДействиеПриСменеСтраницы");

//Добавление 1-й страницы
СтраницаФормы1 = Элементы.Добавить(
"Страница1",
Тип("ГруппаФормы"),
СтраницыФормы);

СтраницаФормы1.Вид = ВидГруппыФормы.Страница;
СтраницаФормы1.Заголовок = "Первая страница";

//Добавление 2-й страницы
СтраницаФормы2 = Элементы.Добавить(
"Страница2",
Тип("ГруппаФормы"),
СтраницыФормы);

СтраницаФормы2.Вид = ВидГруппыФормы.Страница;
СтраницаФормы2.Заголовок = "Вторая страница";

//Добавить поле ввода на страницу 1
ПолеВвода = Элементы.Добавить("ФормаКомментарий", Тип("ПолеФормы"), СтраницаФормы1);
ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
ПолеВвода.ПутьКДанным = "Объект.Комментарий";

//Добавить поле ввода на страницу 2
ПолеВвода = Элементы.Добавить("ФормаКомментарий2", Тип("ПолеФормы"), СтраницаФормы2);
ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
ПолеВвода.ПутьКДанным = "Объект.Комментарий";

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

&НаКлиенте
Процедура ДействиеПриСменеСтраницы(Элемент)

Сообщить("Изменена страница");

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

Как программно добавить колонку в ТЧ?

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

Как программно вывести табличную часть документа на управляемую форму?

ГруппаТовары = Элементы.ГруппаТовары;
ТаблицаТовары = Элементы.Добавить("ТаблицаТовары", Тип("ТаблицаФормы"),ГруппаТовары;
ТаблицаТовары.ПутьКДанным = "Объект.Товары";
// для создания колонок в созданной таблице используется метод описанный выше "Как программно добавить колонку в ТЧ"

Как Добавить программно флажок на форму?

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

Как установить событие для программно созданного элемента?

НовыйРеквизит = ЭлементыФормы.Добавить("ЭтоИностранныйПоставщик", Тип("ПолеФормы"), ГруппаТовары);
НовыйРеквизит.Заголовок = "Это иностранный поставщик";
НовыйРеквизит.Вид = ВидПоляФормы.ПолеФлажка;
НовыйРеквизит.ПутьКДанным = "Объект.ЭтоИностранныйПоставщик";
НовыйРеквизит.УстановитьДействие("ПриИзменении", "ЭтоИностранныйПоставщикПриИзменении"); // ЭтоИностранныйПоставщикПриИзменении - это название процедуры которая находится в модуле формы

Источники:
Программное создание элементов формы в управляемом приложении
Программное добавление элементов управляемых форм
Программное добавление элементов на управляемую форму
Программное создание элементов управляемых форм 1C

Смотрите также:
Электронный учебник по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Игра "Кто хочет стать миллионером?" с вопросами на определенную тематику (язык программирования JavaScript, английские, немецкие, французские, испанские, португальские, ни­дер­ландские, итальянские слова, электробезопасность, промышленная безопасность, бокс и т.п.), написанная на 1С
Программирование в 1С 8.3 с нуля - краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

программирование

Previous post Next post
Up