В управляемом приложении, как и в обычном, предусмотрена возможность программного создания элементов формы. В обычных формах доступно программное добавление только элементов формы. В отличии от обычных форм, в управляемых формах можно программно создавать элементы и реквизиты формы. В основном элементы и реквизиты формы задаются статически в конфигураторе, но иногда требуется динамическое создание. В языке программирования для решения данной задачи существуют специальные методы и свойства.
Добавление поля ввода управляемой формы
В данном примере, реализован механизм программного добавления поля ввода управляемой формы. Перед добавление элемента формы необходимо создать реквизит формы для хранения данных. Если реквизит уже существует, то его ненужно создавать программно.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//Добавление реквизита
МассивРеквизитов = Новый Массив;
ОписаниеТипа = Новый ОписаниеТипов("Строка");
Реквизит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-каналы с уроками программирования Сайты для обучения программированию Лекции и уроки