Управляемая форма
Управляемая форма — это объект конфигурации 1С, который создаётся на сервере, затем загружается на клиенте. Взаимодействие пользователя с формой осуществляется посредством элементов, расположенных на этой форме.
Элементы формы могут быть добавлены непосредственно в конфигураторе на панели редактирования формы, либо в модуле программным образом (с помощью встроенного языка и редактора текстов и модулей).
В данной статье рассмотрим программное добавление реквизитов формы.
Реквизиты
Реквизит формы — это некоторые данные, которые привязаны к форме, создаются, хранятся, редактируются и отображаются на самой форме. Вне контекста формы существовать не могут.
С помощью метода «ПолучитьРеквизиты» можно получить Массив реквизитов формы:
ПолучитьРеквизиты(<Путь>)
Путь — строка, в которой можно указать имя родительского реквизита, чтобы получить все реквизиты ниже уровня родителя. Если параметр не указан, то будут получены все реквизиты формы.
Элементы формы
Элементы — свойство формы, содержащее все элементы формы клиентского приложения.
Элементы можно программно добавлять, изменять их свойства и поведение, удалять и перемещать внутри дерева элементов.
Добавление программно
Создание описания реквизита формы
Для создания описания будущего реквизита формы используется следующая конструкция:
Новый РеквизитФормы(<Имя>, <Тип>, <Путь>, <Заголовок>, <СохраняемыеДанные>)
Параметры:
Параметр | Обязательный | Тип | Описание | Пример |
Имя | Да | Строка | Имя реквизита | «СуммаВЮанях» |
Тип | Да | ОписаниеТипов | Тип реквизита | Новый ОписаниеТипов(«Число») |
Путь | Нет | Строка | Путь к создаваемому реквизиту. Не включает имя реквизита. | «» или «ТаблицаТовары», если реквизит таблицы формы |
Заголовок | Нет | Строка | Содержит отображаемый текст реквизита. | «Сумма в Юанях» |
СохраняемыеДанные | Нет | Булево | Реквизит содержит сохраняемые данные. Истина – значение будет сохранятся. | Истина |
Реквизит1 = Новый РеквизитФормы(«СуммаВКопейках», Новый ОписаниеТипов(«Число»), , «Сумма в копейках», Ложь) ; Реквизит2 = Новый РеквизитФормы(«НовыйКонтрагент», Новый ОписаниеТипов(«СправочникСсылка.Контрагенты»), , «Новый поставщик», Истина) ;
Добавление реквизита табличной части формы:
РеквизитТаблицаТовары = Новый РеквизитФормы(«ТаблицаТовары», Новый ОписаниеТипов(«ТаблицаЗначений»), , «Товары») ; РеквизитНоменклатура = Новый РеквизитФормы(«Номенклатура», Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»), РеквизитТаблицаТовары.Имя, «Товар») ; РеквизитСумма = Новый РеквизитФормы(«Сумма», Новый ОписаниеТипов(«Число»), РеквизитТаблицаТовары.Имя, «Сумма») ;
Добавление реквизитов доступно только на сервере.
Чтобы исключить дублирование имён реквизитов и появление ошибки «Неуникальное имя реквизита» можно использовать следующий вариант:
ИмяРеквизита = "ДобавляемыйРеквизит_" + СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "_"); ТипРеквизита = Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»); ЗаголовокРеквизита = «Номенклатура аналога»; Реквизит3 = Новый РеквизитФормы(ИмяРеквизита, ТипРеквизита , ЗаголовокРеквизита) ;
Изменить структуру реквизитов формы
После создания описания реквизитов, которые необходимо добавить на форму, необходимо модифицировать саму форму. Для этого используется конструкция:
ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>)
ДобавляемыеРеквизиты — Массив, содержащий элементы РеквизитФормы.
УдаляемыеРеквизиты — Массив, содержащий строки, описывающие пути к удаляемым реквизитам.
ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); ИзменитьРеквизиты(ДобавляемыеРеквизиты);
Метод «ИзменитьРеквизиты» также может удалить реквизиты, которые были ранее добавлены этим же методом:
УдаляемыеРеквизиты = Новый Массив; УдаляемыеРеквизиты.Добавить(«РеквизитТовар»); ИзменитьРеквизиты(, УдаляемыеРеквизиты);
Таким образом указанным методом можно удалить ненужные и/или добавить новые реквизиты.
ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты);
Сначала происходит удаление реквизитов, затем добавление.
Следует отметить, что операция изменения состава реквизитов является ресурсоёмкой, поэтому выполняется пакетным образом.
Добавление элемента формы
Следующим действием будет добавление элемента формы с помощью метода «Добавить» свойства формы Элементы:
Добавить(<Имя>, <ТипЭлемента>, <Родитель>)
Имя — тип Строка, уникальное имя добавляемого элемента, может быть задано как имя реквизита.
ТипЭлемента — тип Тип, указывается тип добавляемого элемента, например Тип(«ПолеФоры») или Тип(«ПолеНадписи»).
Родитель — существующий элемент формы (ГруппаФормы, ТаблицаФормы или Форма), указывается, если необходимо добавляемый элемент расположить внутри какой-либо группы формы или страницы формы, например, Элементы.ГруппаДополнительно.
Добавление элементов формы доступно только на сервере.
Эл = Элементы.Добавить(«НовыйПоставщик», Тип("ПолеФормы")); Эл.ПутьКДанным = «НовыйПоставщик»; Эл.Вид = ВидПоляФормы.ПолеВвода; ЭлементГруппа = Элементы.Добавить(«ГруппаДополнительно», Тип("ГруппаФормы")); ЭлементГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа; ЭлГруппа.Заголовок = "Дополнительно"; Эл = Элементы.Добавить(«НовыйПоставщик», Тип("ПолеФормы"), ЭлементГруппа); Эл.ПутьКДанным = «НовыйПоставщик»; Эл.Вид = ВидПоляФормы.ПолеВвода; Эл = Элементы.Добавить(«ТаблицаТовары», Тип("ТаблицаФормы"), ЭлементГруппа); Эл.ПутьКДанным = «ТаблицаТовары»; Эл = Элементы.Добавить(«ТоварыНоменклатура», Тип("ПолеФормы"), Элементы.ТаблицаТовары); Эл.ПутьКДанным = «ТаблицаТовары.Номенклатура»; Эл.Вид = ВидПоляФормы.ПолеВвода;
Для каждого добавляемого элемента дополнительно необходимо заполнить свойство «Вид»:
Тип элемента | Вид | Возможные значения |
ПолеФормы | ВидПоляФормы | ПолеВвода ПолеНадписи ПолеКартинки ПолеИндикатора ПолеФлажка … |
ГруппаФормы | ВидГруппыФормы | ГруппаКнопок ГруппаКолонок ОбычнаяГруппа … |
Эл.Вид = ВидПоляФормы.ПолеНадписи;
Свойства элементов формы
У элемента форма есть множество свойств, при настройке которых можно добиться желаемого визуального отображения реквизита и поведения на форме клиентского приложения. Вот некоторые из них:
- Заголовок
- ШрифтЗаголовка
- Подсказка
- РежимРедактирования
- Доступность
- ПоложениеЗаголовка
- ТолькоПросмотр
- ЦветТекстаЗаголовка
События элемента формы
Также можно для элемента установить привязку события к действию (процедуре модуля формы):
УстановитьДействие(<ИмяСобытия>, <Действие>)
ИмяСобытия – наименование определённого события. Список событий для определённого элемента можно посмотреть в палитре свойств этого элемента.
Действие — имя процедуры модуля формы (обработчика), которая должна выполняться при наступлении указанного события.
Эл.УстановитьДействие(«ПриИзменении», «ПриИзмененииНоменклатурыПоставщика»);
Пример кода
ИмяРеквизита = "ДобавляемыйРеквизит_" + СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "_"); ТипРеквизита = Новый ОписаниеТипов(«СправочникСсылка.Контрагенты»); ЗаголовокРеквизита = «Новый поставщик»; НовыйРеквизит = Новый РеквизитФормы( ИмяРеквизита, ТипРеквизита, , ЗаголовокРеквизита); // Изменяем состав реквизитов формы ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); ИзменитьРеквизиты(ДобавляемыеРеквизиты); // Добавляем элементы формы ЭлементГруппа = Элементы.Добавить(«ГруппаДополнительно», Тип("ГруппаФормы")); ЭлементГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа; ЭлементГруппа.Заголовок = "Дополнительно"; ЭлементПоставщик = Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), ЭлементГруппа); ЭлементПоставщик.ПутьКДанным = ИмяРеквизита; ЭлементПоставщик.Вид = ВидПоляФормы.ПолеВвода; // Устанавливаем действия на события элемента формы ЭлементПоставщик.УстановитьДействие(«ПриИзменении», «ПриИзмененииПоставщика»); ЭлементПоставщик.УстановитьДействие(«НачалоВыбора», «НачалоВыбораПоставщика»);
Данный пример демонстрирует возможности платформы 1С. Для реализации на конкретном проекте рекомендуется модифицировать код для оптимальной работы приложения.