Предположим, что хотим добавить на форму таблицу ПоляПоиска с колонками, заданными в массиве структур МассивПоляПоиска – массив структур с полями Имя (имя колонки таблицы ПоляПоиска), Тип (тип колонки).
Описание текста процедуры модуля формы для программного добавления реквизитов и элементов:
1. Заполняем массив реквизитов формы к удалению (на случай, если на форме уже есть реквизит с именем ПоляПоиска, удалим его). ВНИМАНИЕ! Для удаления реквизита формы – «колонки таблицы» нужно указать «ИмяТаблицы.ИмяКолонки», для удаления реквизита формы – «таблицы» нужно указать «ИмяТаблицы».
2. Добавляем в массив новых реквизитов элемент: имя — ПоляПоиска, тип — ТаблицаЗначений.
3. В цикле для каждого элемента массива МассивПоляПоиска создаем реквизит формы (колонку таблицы значений ПоляПоиска) и добавляем в массив новых реквизитов.
4. ЭтаФорма.ИзменитьРеквизиты() – добавляем на форму реквизиты из массива МассивДобавляемыхРеквизитов, удаляем реквизиты из массива МассивУдаляемыхРеквизитов.
5. Если на форме уже есть элемент с именем ПоляПоиска, то удаляем его колонки (ПодчиненныеЭлементы), иначе добавляем на форму элемент ПоляПоиска с типом ТаблицаФормы в группу ГруппаПоляПоиска.
6. Добавляем элементы формы – колонки таблицы ПоляПоиска.
&НаСервере Процедура СформироватьРеквизитыИЭлементыФормы(МассивПоляПоиска) МассивДобавляемыхРеквизитов = Новый Массив; МассивУдаляемыхРеквизитов = Новый Массив; Если НЕ НовыйРеквизитФормы("ПоляПоиска", ЭтаФорма) Тогда МассивУдаляемыхРеквизитов.Добавить("ПоляПоиска"); КонецЕсли; МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ПоляПоиска", Новый ОписаниеТипов("ТаблицаЗначений"))); Для Каждого ЭлементПоляПоиска Из МассивПоляПоиска Цикл МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ЭлементПоляПоиска.Имя, ЭлементПоляПоиска.Тип, "ПоляПоиска")); КонецЦикла; ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов, МассивУдаляемыхРеквизитов); ЭлементФормыПоляПоиска = Элементы.Найти("ПоляПоиска"); Если ЭлементФормыПоляПоиска <> Неопределено Тогда МассивЭлементовКУдалению = Новый Массив; Для Каждого ЭлементКУдалению Из ЭлементФормыПоляПоиска.ПодчиненныеЭлементы Цикл МассивЭлементовКУдалению.Добавить(ЭлементКУдалению); КонецЦикла; Для Каждого ЭлементКУдалению Из МассивЭлементовКУдалению Цикл Элементы.Удалить(ЭлементКУдалению); КонецЦикла; Иначе ЭлементФормыПоляПоиска = Элементы.Добавить("ПоляПоиска", Тип("ТаблицаФормы"), Элементы.ГруппаПоляПоиска); ЭлементФормыПоляПоиска.ПутьКДанным = "ПоляПоиска"; ЭлементФормыПоляПоиска.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; КонецЕсли; Для Каждого ЭлементПоляПоиска Из МассивПоляПоиска Цикл ЭлементФормыКолонкаТаблицы = Элементы.Добавить("ПоляПоиска" + ЭлементПоляПоиска.Имя, Тип("ПолеФормы"), Элементы.ПоляПоиска); ЭлементФормыКолонкаТаблицы.Вид = ВидПоляФормы.ПолеВвода; ЭлементФормыКолонкаТаблицы.ПутьКДанным = "ПоляПоиска." + ЭлементПоляПоиска.Имя; КонецЦикла; КонецПроцедуры &НаСервере Функция НовыйРеквизитФормы(ИмяРеквизита, СтруктураФормы) Экспорт ПроверкаРеквизитаФормы = Новый УникальныйИдентификатор; СтруктураДляПроверки = Новый Структура(ИмяРеквизита, ПроверкаРеквизитаФормы); ЗаполнитьЗначенияСвойств(СтруктураДляПроверки, СтруктураФормы); Если СтруктураДляПроверки[ИмяРеквизита] = ПроверкаРеквизитаФормы Тогда Возврат Истина; Иначе Возврат Ложь; КонецЕсли; КонецФункции