Предположим, что хотим добавить на форму таблицу ПоляПоиска с колонками, заданными в массиве структур МассивПоляПоиска – массив структур с полями Имя (имя колонки таблицы ПоляПоиска), Тип (тип колонки).

Описание текста процедуры модуля формы для программного добавления реквизитов и элементов:

1. Заполняем массив реквизитов формы к удалению (на случай, если на форме уже есть реквизит с именем ПоляПоиска, удалим его). ВНИМАНИЕ! Для удаления реквизита формы – «колонки таблицы» нужно указать «ИмяТаблицы.ИмяКолонки», для удаления реквизита формы – «таблицы» нужно указать «ИмяТаблицы».

2. Добавляем в массив новых реквизитов элемент: имя – ПоляПоиска, тип – ТаблицаЗначений.

3. В цикле для каждого элемента массива МассивПоляПоиска создаем реквизит формы (колонку таблицы значений ПоляПоиска) и добавляем в массив новых реквизитов.

4. ЭтаФорма.ИзменитьРеквизиты() – добавляем на форму реквизиты из массива МассивДобавляемыхРеквизитов, удаляем реквизиты из массива МассивУдаляемыхРеквизитов.

5. Если на форме уже есть элемент с именем ПоляПоиска, то удаляем его колонки (ПодчиненныеЭлементы), иначе добавляем на форму элемент ПоляПоиска с типом ТаблицаФормы в группу ГруппаПоляПоиска.

6. Добавляем элементы формы – колонки таблицы ПоляПоиска.

 

&НаСервере
Процедура СформироватьРеквизитыИЭлементыФормы(МассивПоляПоиска)
                МассивДобавляемыхРеквизитов = Новый Массив;
                МассивУдаляемыхРеквизитов = Новый Массив;
               
                Если НЕ НовыйРеквизитФормы("ПоляПоиска", ЭтаФорма) Тогда
                               МассивУдаляемыхРеквизитов.Добавить("ПоляПоиска");
                КонецЕсли;
               
                МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ПоляПоиска", Новый ОписаниеТипов("ТаблицаЗначений")));          
                Для Каждого ЭлементПоляПоиска Из МассивПоляПоиска Цикл
                               МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ЭлементПоляПоиска.Имя, ЭлементПоляПоиска.Тип, "ПоляПоиска"));
                КонецЦикла;
               
                ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов, МассивУдаляемыхРеквизитов);
               
                ЭлементФормыПоляПоиска = Элементы.Найти("ПоляПоиска");
                Если ЭлементФормыПоляПоиска <> Неопределено Тогда
                               МассивЭлементовКУдалению = Новый Массив;
                              
                               Для Каждого ЭлементКУдалению Из ЭлементФормыПоляПоиска.ПодчиненныеЭлементы Цикл
                                               МассивЭлементовКУдалению.Добавить(ЭлементКУдалению);
                               КонецЦикла;
                              
                               Для Каждого ЭлементКУдалению Из МассивЭлементовКУдалению Цикл
                                               Элементы.Удалить(ЭлементКУдалению);
                               КонецЦикла;
                Иначе
                               ЭлементФормыПоляПоиска = Элементы.Добавить("ПоляПоиска", Тип("ТаблицаФормы"), Элементы.ГруппаПоляПоиска);
                               ЭлементФормыПоляПоиска.ПутьКДанным = "ПоляПоиска";
                               ЭлементФормыПоляПоиска.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;   
                КонецЕсли;                      
                              
                Для Каждого ЭлементПоляПоиска Из МассивПоляПоиска Цикл
                               ЭлементФормыКолонкаТаблицы = Элементы.Добавить("ПоляПоиска" + ЭлементПоляПоиска.Имя, Тип("ПолеФормы"), Элементы.ПоляПоиска);
                               ЭлементФормыКолонкаТаблицы.Вид = ВидПоляФормы.ПолеВвода;
                               ЭлементФормыКолонкаТаблицы.ПутьКДанным = "ПоляПоиска." + ЭлементПоляПоиска.Имя;        
                КонецЦикла;   
КонецПроцедуры

&НаСервере
Функция НовыйРеквизитФормы(ИмяРеквизита, СтруктураФормы) Экспорт                             
                ПроверкаРеквизитаФормы = Новый УникальныйИдентификатор;
                СтруктураДляПроверки = Новый Структура(ИмяРеквизита, ПроверкаРеквизитаФормы);
               
ЗаполнитьЗначенияСвойств(СтруктураДляПроверки, СтруктураФормы);
               
Если СтруктураДляПроверки[ИмяРеквизита] = ПроверкаРеквизитаФормы Тогда                     
Возврат Истина;
                Иначе
                               Возврат Ложь;
                КонецЕсли;      
КонецФункции