Программное создание реквизитов формы в 1С
При разработке конфигураций 1С часто возникает необходимость создавать элементы формы программным путем. Сегодня мы разберем, как создать простую форму с полем ввода и кнопкой без использования конфигуратора.
Что мы создадим:
Форму с горизонтальным расположением элементов, содержащую поле ввода для текста и кнопку, при нажатии на которую будет выводиться введенное значение.
Настройка заголовка формы
Начнем с отключения автоматического заголовка и установки своего:
ЭтаФорма.АвтоЗаголовок = Ложь;
ЭтаФорма.Заголовок = "Работа с реквизитами";
Для удобного расположения элементов установим горизонтальную группировку:
ЭтаФорма.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
Создание реквизита
Создадим реквизит типа "Строка" используя конструктор РеквизитФормы
:
РеквизитСтрока = Новый РеквизитФормы("МояСтрока", Новый ОписаниеТипов("Строка"), , "Введите текст");
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(РеквизитСтрока);
ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов);
Создание элементов управления
Добавляем поле ввода и связываем его с реквизитом:
ПолеВвода = Элементы.Добавить("ПолеМояСтрока", Тип("ПолеФормы"));
ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
ПолеВвода.ПутьКДанным = "МояСтрока";
Создаем команду и кнопку для вывода значения:
НоваяКоманда = Команды.Добавить("КомандаПоказатьСтроку");
НоваяКоманда.Действие = "ПоказатьСтроку";
НоваяКоманда.Заголовок = "Показать строку";
НоваяКнопка = Элементы.Добавить("КнопкаПоказать", Тип("КнопкаФормы"));
НоваяКнопка.ИмяКоманды = "КомандаПоказатьСтроку";
Полный код решения:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ)
//////////////////////////////////////
// Настройка внешнего вида формы
//////////////////////////////////////
// Отключаем автоматический заголовок, чтобы система не добавляла свою информацию
ЭтаФорма.АвтоЗаголовок = Ложь;
// Устанавливаем пользовательский заголовок формы
ЭтаФорма.Заголовок = "Работа с реквизитами";
// Устанавливаем горизонтальное выравнивание элементов
// Все элементы будут размещаться в строку слева направо
ЭтаФорма.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
//////////////////////////////////////
// Создание и настройка реквизита
//////////////////////////////////////
// Создаем реквизит типа "Строка"
// Параметры:
// 1. "МояСтрока" - имя реквизита
// 2. Новый ОписаниеТипов("Строка") - тип реквизита
// 3. Пустая строка (пропущен) - путь к данным
// 4. "Введите текст" - заголовок для поля ввода
РеквизитСтрока = Новый РеквизитФормы("МояСтрока", Новый ОписаниеТипов("Строка"), , "Введите текст");
// Создаем массив реквизитов и добавляем в него наш реквизит
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(РеквизитСтрока);
// Добавляем реквизит на форму
// После этой команды реквизит становится доступен через ЭтаФорма
ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов);
//////////////////////////////////////
// Создание элементов управления
//////////////////////////////////////
// Создаем поле ввода и связываем его с реквизитом
ПолеВвода = Элементы.Добавить("ПолеМояСтрока", Тип("ПолеФормы"));
ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
// ПутьКДанным определяет, с каким реквизитом будет связано поле
ПолеВвода.ПутьКДанным = "МояСтрока";
// Создаем команду для кнопки
// Команда позволяет отделить внешний вид от функциональности
НоваяКоманда = Команды.Добавить("КомандаПоказатьСтроку");
НоваяКоманда.Действие = "ПоказатьСтроку"; // Имя процедуры-обработчика
НоваяКоманда.Заголовок = "Показать строку";
// Создаем кнопку и привязываем к ней команду
НоваяКнопка = Элементы.Добавить("КнопкаПоказать", Тип("КнопкаФормы"));
НоваяКнопка.ИмяКоманды = "КомандаПоказатьСтроку";
КонецПроцедуры
//////////////////////////////////////
// Обработчик нажатия кнопки
//////////////////////////////////////
&НаКлиенте
Процедура ПоказатьСтроку(Команда)
// Получаем значение реквизита через контекст формы
// Важно! Обращение к динамическому реквизиту только через ЭтаФорма
Сообщить(ЭтаФорма.МояСтрока);
КонецПроцедуры