Статьи 1С программиста

заметки и другая полезная информация по 1С

Программное создание реквизитов формы в 1С

402
29 октября 2024

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

Что мы создадим:

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

Настройка заголовка формы

Начнем с отключения автоматического заголовка и установки своего:

ЭтаФорма.АвтоЗаголовок = Ложь;
ЭтаФорма.Заголовок = "Работа с реквизитами";

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


ЭтаФорма.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;

Создание реквизита

Создадим реквизит типа "Строка" используя конструктор РеквизитФормы:


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

Создание элементов управления

Добавляем поле ввода и связываем его с реквизитом:


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

Создаем команду и кнопку для вывода значения:


НоваяКоманда = Команды.Добавить("КомандаПоказатьСтроку");
НоваяКоманда.Действие = "ПоказатьСтроку";
НоваяКоманда.Заголовок = "Показать строку";

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

Полный код решения:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ)
    //////////////////////////////////////
    // Настройка внешнего вида формы
    //////////////////////////////////////

    // Отключаем автоматический заголовок, чтобы система не добавляла свою информацию
    ЭтаФорма.АвтоЗаголовок = Ложь;

    // Устанавливаем пользовательский заголовок формы
    ЭтаФорма.Заголовок = "Работа с реквизитами";

    // Устанавливаем горизонтальное выравнивание элементов
    // Все элементы будут размещаться в строку слева направо
    ЭтаФорма.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;

    //////////////////////////////////////
    // Создание и настройка реквизита
    //////////////////////////////////////

    // Создаем реквизит типа "Строка"
    // Параметры:
    // 1. "МояСтрока" - имя реквизита
    // 2. Новый ОписаниеТипов("Строка") - тип реквизита
    // 3. Пустая строка (пропущен) - путь к данным
    // 4. "Введите текст" - заголовок для поля ввода
    РеквизитСтрока = Новый РеквизитФормы("МояСтрока", Новый ОписаниеТипов("Строка"), , "Введите текст");

    // Создаем массив реквизитов и добавляем в него наш реквизит
    МассивРеквизитов = Новый Массив;
    МассивРеквизитов.Добавить(РеквизитСтрока);

    // Добавляем реквизит на форму
    // После этой команды реквизит становится доступен через ЭтаФорма
    ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов);

    //////////////////////////////////////
    // Создание элементов управления
    //////////////////////////////////////

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

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

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

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

//////////////////////////////////////
// Обработчик нажатия кнопки
//////////////////////////////////////

&НаКлиенте
Процедура ПоказатьСтроку(Команда)
    // Получаем значение реквизита через контекст формы
    // Важно! Обращение к динамическому реквизиту только через ЭтаФорма
    Сообщить(ЭтаФорма.МояСтрока);
КонецПроцедуры

402
29 октября 2024