Книга: Разработка интерфейса прикладных решений на платформе "1С:Предприятие 8"
Назад: Общие подходы
Дальше: Добавление динамического списка

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

Разберем пример с добавлением поля так, как мы делали бы его в конфигураторе, –средствами визуального конструирования.

Сначала мы добавим реквизит формы типа Строка (рис. 3.211).

Рис. 3.211. Реквизит формы «РеквизитКомментарий»

После этого добавим элемент формы Поле, который в дальнейшем будет отображать значение реквизита (рис. 3.212).

Рис. 3.212. Поле «ПолеКомментарий»

Затем свяжем между собой элемент формы и реквизит формы (рис. 3.213).

Рис. 3.213. Связь поля и реквизита

И в заключение для элемента формы назначим обработчик события При изменении, который заранее заготовлен в модуле нашей формы (рис. 3.214).

Рис. 3.214. Назначение обработчика события «При изменении»

Теперь все те же самые действия выполним программно, из встроенного языка.

Примечание

Пример можно посмотреть в демонстрационной базе «Программное изменение формы», общая форма Форма, команда Добавить поле. Это локальная команда этой формы.

Для изменения формы сразу же выполним контекстный вызов сервера, в котором и будем модифицировать форму (листинг 3.166).

Листинг 3.166. Контекстный вызов сервера для модификации формы

&НаКлиенте

Процедура ДобавитьПоле(Команда)

 

ДобавитьПолеНаСервере();

 

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

 

&НаСервере

Процедура ДобавитьПолеНаСервере()

В серверной процедуре сначала добавим реквизит формы РеквизитКомментарий (листинг 3.167).

Листинг 3.167. Добавление реквизита формы

// Добавить реквизит.

ТипыРеквизита = Новый Массив;

ТипыРеквизита.Добавить(Тип("Строка"));

 

ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизита);

 

НовыйРеквизит = Новый РеквизитФормы("РеквизитКомментарий", // имя

ОписаниеТиповДляРеквизита, // тип

, // путь

"Комментарий", // заголовок

Истина); // сохраняемые данные

 

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

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

 

ИзменитьРеквизиты(ДобавляемыеРеквизиты);

В этом фрагменте мы сначала создаем объект, описывающий тип добавляемого реквизита. Поскольку в общем случае реквизит может иметь составной тип, т. е. включать в себя сразу несколько типов, то для описания его типа используется объект ОписаниеТипов. Этот объект создается на основе массива, содержащего нужные типы.

Наш реквизит будет иметь тип Строка, поэтому мы создаем массив ТипыРеквизита, содержащий единственный элемент. Затем на основании этого массива создаем описание типов – ОписаниеТиповДляРеквизита. Это описание типов мы используем при конструировании реквизита формы – НовыйРеквизитФормы(…).

В параметрах конструктора мы указываем:

После того как реквизит создан, мы добавляем его в массив и этот массив передаем в метод формы ИзменитьРеквизиты() первым параметром. То есть как те реквизиты, которые нужно добавить в форму.

Теперь мы имеем состояние, аналогичное тому, которое было показано на рисунке 3.211.

На втором этапе, как мы говорили выше, нужно создать элемент формы. Для этого мы используем следующий код (листинг 3.168).

Листинг 3.168. Добавление элемента формы

// Добавить элемент формы и связать его с реквизитом.

НовыйЭлемент = Элементы.Добавить("ПолеКомментарий", Тип("ПолеФормы"));

В результате мы имеем состояние, которое было показано на рисунке 3.212.

Теперь мы связываем элемент формы и реквизит. Для этого в свойстве элемента ПутьКДанным мы указываем имя нашего реквизита (листинг 3.169).

Листинг 3.169. Связь элемента с реквизитом

НовыйЭлемент.ПутьКДанным = "РеквизитКомментарий";

Теперь мы имеем состояние, которое было показано на рисунке 3.213.

После того как элемент добавлен и связан с реквизитом, установим некоторые его свойства. Во-первых, укажем, что это не просто поле, а поле ввода, а во-вторых – отобразим в нем кнопку очистки (листинг 3.170).

Листинг 3.170. Установка свойств поля

НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;

НовыйЭлемент.КнопкаОчистки = Истина;

Теперь нам осталось выполнить последний шаг – назначить обработчик события для только что добавленного элемента формы (листинг 3.171).

Листинг 3.171. Назначение обработчика события

// Установить обработчик события.

НовыйЭлемент.УстановитьДействие("ПриИзменении", "ОбработчикПриИзмененииПоляКомментарий");

Здесь мы указываем имя события и имя процедуры, которая будет обрабатывать это событие. Эта процедура должна быть создана в модуле формы заранее, на этапе конфигурирования (листинг 3.172).

Листинг 3.172. Обработчик события «При изменении»

&НаКлиенте

Процедура ОбработчикПриИзмененииПоляКомментарий(Элемент)

 

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = ЭтотОбъект["РеквизитКомментарий"];

Сообщение.Сообщить();

 

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

После этого можно запустить систему в режиме 1С:Предприятие и посмотреть, как работает наша команда Добавить поле.

В результате ее выполнения внизу формы появится поле ввода Комментарий. При изменении значения этого поля будет обрабатываться событие, и новое значение поля будет выводиться в окно сообщений (рис. 3.215).

Рис. 3.215. Поле ввода в форме

Назад: Общие подходы
Дальше: Добавление динамического списка