///////////////////////////////////////////////////////////////////////////////////
//Модуль - Программное создание элементов формы
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
//Создание описание типов
&НаСервере
Функция ОписаниеТипаСтрока(ДлинаСтроки = 0) Экспорт
	Возврат Новый ОписаниеТипов("Строка",,кСтрока(ДлинаСтроки));
КонецФункции
&НаСервере
Функция ОписаниеТипаЧисло(ДлинаЧисла = 15,ТочностьЧисла = 2) Экспорт
	Возврат Новый ОписаниеТипов("Число",кЧисло(ДлинаЧисла,ТочностьЧисла));
КонецФункции
//ДатаВремя - строка, значения "Дата", "Время", "ДатаВремя"
&НаСервере
Функция ОписаниеТипаДатаВремя(ДатаВремя = "ДатаВремя") Экспорт
	Возврат Новый ОписаниеТипов("Дата",,,кДатаВремя(ДатаВремя));
КонецФункции
///////////////////////////////////////////////////////////////////////////////////
//Создание квалификаторов
&НаСервере
Функция кСтрока(ДлинаСтроки = 0) Экспорт
	Возврат Новый КвалификаторыСтроки(ДлинаСтроки);
КонецФункции
&НаСервере
Функция кЧисло(ДлинаЧисла = 15,ТочностьЧисла = 2) Экспорт
	Возврат Новый КвалификаторыЧисла(ДлинаЧисла,ТочностьЧисла);
КонецФункции
//ДатаВремя - строка, значения "Дата", "Время", "ДатаВремя"
&НаСервере
Функция кДатаВремя(ДатаВремя = "ДатаВремя") Экспорт
	Возврат Новый КвалификаторыДаты(ЧастиДаты[ДатаВремя]);
КонецФункции
///////////////////////////////////////////////////////////////////////////////////
//Создание реквизитов
//Если требуется создать один реквизит
&НаСервере
Процедура СоздатьРеквизит(ИмяРеквизита,ОписаниеТипа,ТекущаяФорма) Экспорт
	
	структураРеквизитов = Новый Структура;
	структураРеквизитов.Вставить(ИмяРеквизита,ОписаниеТипа);
	СоздатьРеквизиты(структураРеквизитов,ТекущаяФорма); 
	
КонецПроцедуры
//Если требуется создать несколько реквизитов
&НаСервере
Процедура СоздатьРеквизиты(структураРеквизитов,ТекущаяФорма) Экспорт
	
	ДобавляемыеРеквизиты = Новый Массив;
	Для Каждого тРеквизит Из структураРеквизитов Цикл 
		НовыйРеквизит = Новый РеквизитФормы(тРеквизит.Ключ,тРеквизит.Значение); 
		ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); 
	КонецЦикла;
	ТекущаяФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); 
	
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////
//Создание элементов
&НаСервере
Функция СоздатьОбычнуюГруппуБезОтображения(ЭтаФорма,
	ИмяГруппы,
	РодительГруппы,
	ГруппировкаОбычнойГруппы = 0,
	РастягиватьГоризонтально = 0,
	РастягиватьВертикально = 0,
	СтруктураСвойств = Неопределено,
	ЭлементПеред = Неопределено) Экспорт
	
	Перем ВидГруппы;
	
	Если СтруктураСвойств = Неопределено Тогда
		СтруктураСвойств = Новый Структура;
	КонецЕсли;	
	
	Если ЭлементПеред = Неопределено Тогда
		НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы);
	Иначе
		НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы,ЭлементПеред);		
	КонецЕсли;
	                  
	НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
	НовыйЭлемент.Отображение = ОтображениеОбычнойГруппы.Нет;
	НовыйЭлемент.ОтображатьЗаголовок = ЛОЖЬ;
	
	Если ГруппировкаОбычнойГруппы = 1 Тогда
		НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;		
	ИначеЕсли ГруппировкаОбычнойГруппы = 2 Тогда
		НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно;	
	ИначеЕсли ГруппировкаОбычнойГруппы = 3 Тогда
		НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;			
	КонецЕсли;
	
	Если РастягиватьГоризонтально = 1 Тогда
		НовыйЭлемент.РастягиватьПоГоризонтали = ИСТИНА;	
	ИначеЕсли РастягиватьГоризонтально = 2 Тогда
		НовыйЭлемент.РастягиватьПоГоризонтали = ЛОЖЬ;	
	КонецЕсли;	
	
	Если РастягиватьВертикально = 1 Тогда
		НовыйЭлемент.РастягиватьПоВертикали = ИСТИНА;	
	ИначеЕсли РастягиватьВертикально = 2 Тогда
		НовыйЭлемент.РастягиватьПоВертикали = ЛОЖЬ;	
	КонецЕсли;	
	Для Каждого Элемента Из СтруктураСвойств Цикл
		НовыйЭлемент[Элемента.Ключ] = Элемента.Значение;	
	КонецЦикла;
	
	Возврат НовыйЭлемент;
	
КонецФункции
&НаСервере
Функция СоздатьОбычнуюГруппу(ЭтаФорма,
	ИмяГруппы,
	РодительГруппы,
	Заголовок = "",
	ГруппировкаОбычнойГруппы = 0,
	РастягиватьГоризонтально = 0,
	РастягиватьВертикально = 0,
	СтруктураСвойств = Неопределено,
	ЭлементПеред = Неопределено) Экспорт
	
	Перем ВидГруппы;
	
	Если СтруктураСвойств = Неопределено Тогда
		СтруктураСвойств = Новый Структура;
	КонецЕсли;	
	
	Если ЭлементПеред = Неопределено Тогда
		НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы);
	Иначе
		НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы,ЭлементПеред);		
	КонецЕсли;
	                  
	НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
	НовыйЭлемент.Отображение = ОтображениеОбычнойГруппы.СлабоеВыделение;
	НовыйЭлемент.ОтображатьЗаголовок = ИСТИНА;
	
	Если ГруппировкаОбычнойГруппы = 1 Тогда
		НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;		
	ИначеЕсли ГруппировкаОбычнойГруппы = 2 Тогда
		НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно;	
	ИначеЕсли ГруппировкаОбычнойГруппы = 3 Тогда
		НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;			
	КонецЕсли;
	
	Если РастягиватьГоризонтально = 1 Тогда
		НовыйЭлемент.РастягиватьПоГоризонтали = ИСТИНА;	
	ИначеЕсли РастягиватьГоризонтально = 2 Тогда
		НовыйЭлемент.РастягиватьПоГоризонтали = ЛОЖЬ;	
	КонецЕсли;	
	
	Если РастягиватьВертикально = 1 Тогда
		НовыйЭлемент.РастягиватьПоВертикали = ИСТИНА;	
	ИначеЕсли РастягиватьВертикально = 2 Тогда
		НовыйЭлемент.РастягиватьПоВертикали = ЛОЖЬ;	
	КонецЕсли;	
	Если Заголовок <> "" Тогда НовыйЭлемент.Заголовок = Заголовок КонецЕсли;
	
	Для Каждого Элемента Из СтруктураСвойств Цикл
		НовыйЭлемент[Элемента.Ключ] = Элемента.Значение;	
	КонецЦикла;
	
	Возврат НовыйЭлемент;
	
КонецФункции
&НаСервере
Функция СоздатьГруппуСтраницы(ЭтаФорма,
	ИмяГруппы,
	РодительГруппы,
	РастягиватьГоризонтально = 0,
	РастягиватьВертикально = 0,
	ПриСменеСтраницы = "",
	СтруктураСвойств = Неопределено,
	ЭлементПеред = Неопределено) Экспорт
	
	Перем ВидГруппы;
	
	Если СтруктураСвойств = Неопределено Тогда
		СтруктураСвойств = Новый Структура;
	КонецЕсли;	
	
	Если ЭлементПеред = Неопределено Тогда
		НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы);
	Иначе
		НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы,ЭлементПеред);		
	КонецЕсли;
	                  
	НовыйЭлемент.Вид = ВидГруппыФормы.Страницы;
		
	Если РастягиватьГоризонтально = 1 Тогда
		НовыйЭлемент.РастягиватьПоГоризонтали = ИСТИНА;	
	ИначеЕсли РастягиватьГоризонтально = 2 Тогда
		НовыйЭлемент.РастягиватьПоГоризонтали = ЛОЖЬ;	
	КонецЕсли;	
	
	Если РастягиватьВертикально = 1 Тогда
		НовыйЭлемент.РастягиватьПоВертикали = ИСТИНА;	
	ИначеЕсли РастягиватьВертикально = 2 Тогда
		НовыйЭлемент.РастягиватьПоВертикали = ЛОЖЬ;	
	КонецЕсли;	
	
	Если ПриСменеСтраницы <> "" Тогда НовыйЭлемент.ПриСменеСтраницы = ПриСменеСтраницы КонецЕсли;	
	
	Для Каждого Элемента Из СтруктураСвойств Цикл
		НовыйЭлемент[Элемента.Ключ] = Элемента.Значение;	
	КонецЦикла;
	
	Возврат НовыйЭлемент;
	
КонецФункции
&НаСервере
Функция СоздатьСтраницу(ЭтаФорма,
	ИмяСтраницы,
	ГруппаСтраницы,
	Заголовок = "",
	ГруппировкаОбычнойГруппы = 0,
	РастягиватьГоризонтально = 0,
	РастягиватьВертикально = 0,
	СтруктураСвойств = Неопределено,
	СтраницаПеред = Неопределено) Экспорт
	
	Перем ВидГруппы;
	
	Если СтруктураСвойств = Неопределено Тогда
		СтруктураСвойств = Новый Структура;
	КонецЕсли;	
	
	Если СтраницаПеред = Неопределено Тогда
		НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяСтраницы, Тип("ГруппаФормы"),ГруппаСтраницы);
	Иначе
		НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяСтраницы, Тип("ГруппаФормы"),ГруппаСтраницы,СтраницаПеред);		
	КонецЕсли;
	                  
	НовыйЭлемент.Вид = ВидГруппыФормы.Страница;
	
	Если ГруппировкаОбычнойГруппы = 1 Тогда
		НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;		
	ИначеЕсли ГруппировкаОбычнойГруппы = 2 Тогда
		НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно;	
	ИначеЕсли ГруппировкаОбычнойГруппы = 3 Тогда
		НовыйЭлемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;			
	КонецЕсли;
	
	Если РастягиватьГоризонтально = 1 Тогда
		НовыйЭлемент.РастягиватьПоГоризонтали = ИСТИНА;	
	ИначеЕсли РастягиватьГоризонтально = 2 Тогда
		НовыйЭлемент.РастягиватьПоГоризонтали = ЛОЖЬ;	
	КонецЕсли;	
	
	Если РастягиватьВертикально = 1 Тогда
		НовыйЭлемент.РастягиватьПоВертикали = ИСТИНА;	
	ИначеЕсли РастягиватьВертикально = 2 Тогда
		НовыйЭлемент.РастягиватьПоВертикали = ЛОЖЬ;	
	КонецЕсли;	
	Если Заголовок <> "" Тогда НовыйЭлемент.Заголовок = Заголовок КонецЕсли;
	
	Для Каждого Элемента Из СтруктураСвойств Цикл
		НовыйЭлемент[Элемента.Ключ] = Элемента.Значение;	
	КонецЦикла;
	
	Возврат НовыйЭлемент;
	
КонецФункции
&НаСервере
Функция СоздатьГруппу(ЭтаФорма,
	ИмяГруппы,
	РодительГруппы,	
	СтруктураСвойств,
	ЭлементПеред = Неопределено) Экспорт
	
	Перем ВидГруппы;
	
	Если ЭлементПеред = Неопределено Тогда
		НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы);
	Иначе
		НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяГруппы, Тип("ГруппаФормы"),РодительГруппы,ЭлементПеред);		
	КонецЕсли;
	                  	
	Для Каждого Элемента Из СтруктураСвойств Цикл
		НовыйЭлемент[Элемента.Ключ] = Элемента.Значение;	
	КонецЦикла;
	
	Возврат НовыйЭлемент;
	
КонецФункции
//Общая функция создания элемента Поле
&НаСервере
Функция СоздатьПоле(ЭтаФорма,
	ИмяПоля,
	РодительПоля,
	ШифрВидаПоля = 0,
	ПутьКДанным = "",
	СтруктураСвойств = Неопределено,
	СтруктураСобытий = Неопределено,
	ЭлементПеред = Неопределено) Экспорт
	
	Перем ВидПоля;
	
	Если ШифрВидаПоля <> 0 Тогда
		НаборВидов = "ПолеВвода
		|ПолеФлажка		
		|ПолеИндикатора
		|ПолеПереключателя
		|ПолеПериода
		|ПолеHTMLДокумента";
		ВидПоля = СокрЛП(СтрПолучитьСтроку(НаборВидов,ШифрВидаПоля));
	КонецЕсли;
	
	Если СтруктураСвойств = Неопределено Тогда
		СтруктураСвойств = Новый Структура;
	КонецЕсли;	
	
	Если СтруктураСобытий = Неопределено Тогда
		СтруктураСобытий = Новый Структура;
	КонецЕсли;
	
	Если ЭлементПеред = Неопределено Тогда
		НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяПоля, Тип("ПолеФормы"),РодительПоля);
	Иначе
		НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяПоля, Тип("ПолеФормы"),РодительПоля,ЭлементПеред);		
	КонецЕсли;
	
	Если ШифрВидаПоля <> 0 Тогда НовыйЭлемент.Вид = ВидПоляФормы[ВидПоля] КонецЕсли;
	Если ПутьКДанным <> "" Тогда НовыйЭлемент.ПутьКДанным = ПутьКДанным КонецЕсли;
	
	Для Каждого Свойства Из СтруктураСвойств Цикл
		НовыйЭлемент[Свойства.Ключ] = Свойства.Значение;	
	КонецЦикла;
	
	Для Каждого События Из СтруктураСобытий Цикл
		НовыйЭлемент.УстановитьДействие(События.Ключ,События.Значение);	
	КонецЦикла;
	
	Возврат НовыйЭлемент;
	
КонецФункции
//Быстрая функция по созданию декорации надпись
&НаСервере
Функция СоздатьДекорациюНадпись(ЭтаФорма,
	ИмяДекорации,
	РодительДекорации,
	ЗаголовокДекорации,
	РастягиватьПоГоризонтали = ИСТИНА,
	ЭлементПеред = Неопределено) Экспорт
	
	Если ЭлементПеред = Неопределено Тогда
		НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяДекорации, Тип("ДекорацияФормы"),РодительДекорации);
	Иначе
		НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяДекорации, Тип("ДекорацияФормы"),РодительДекорации,ЭлементПеред);		
	КонецЕсли;
	
	НовыйЭлемент.Заголовок = ЗаголовокДекорации;
	НовыйЭлемент.РастягиватьПоГоризонтали = РастягиватьПоГоризонтали;
	
	Возврат НовыйЭлемент;
	
КонецФункции
//Общая функция создания декорации с видом надпись и картинка
&НаСервере
Функция СоздатьДекорацию(ЭтаФорма,
	ИмяДекорации,
	РодительДекорации,
	СтруктураСвойств = Неопределено,
	СтруктураСобытий = Неопределено,
	ЭлементПеред = Неопределено) Экспорт
	
	Если СтруктураСвойств = Неопределено Тогда СтруктураСвойств = Новый Структура; КонецЕсли;
	Если СтруктураСобытий = Неопределено Тогда СтруктураСобытий = Новый Структура; КонецЕсли;
	
	Если ЭлементПеред = Неопределено Тогда
		НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяДекорации, Тип("ДекорацияФормы"),РодительДекорации);
	Иначе
		НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяДекорации, Тип("ДекорацияФормы"),РодительДекорации,ЭлементПеред);		
	КонецЕсли;
	
	Для Каждого Свойства Из СтруктураСвойств Цикл
		НовыйЭлемент[Свойства.Ключ] = Свойства.Значение;	
	КонецЦикла;
	
	Для Каждого События Из СтруктураСобытий Цикл
		НовыйЭлемент.УстановитьДействие(События.Ключ,События.Значение);	
	КонецЦикла;
	
	Возврат НовыйЭлемент;
	
КонецФункции
&НаСервере
Функция СоздатьКнопку(ЭтаФорма,
	ИмяКнопки,
	РодительКнопки,
	ЗаголовокКнопки = "",
	ИмяКоманды = "",
	СтруктураСвойств = Неопределено,	
	ЭлементПеред = Неопределено) Экспорт
	
	Если СтруктураСвойств = Неопределено Тогда СтруктураСвойств = Новый Структура; КонецЕсли;
	
	Если ЭлементПеред = Неопределено Тогда
		НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяКнопки, Тип("КнопкаФормы"),РодительКнопки);
	Иначе
		НовыйЭлемент = ЭтаФорма.Элементы.Вставить(ИмяКнопки, Тип("КнопкаФормы"),РодительКнопки,ЭлементПеред);		
	КонецЕсли;
	
	Если ЗаголовокКнопки <> "" Тогда НовыйЭлемент.Заголовок = ЗаголовокКнопки; КонецЕсли;
	Если ИмяКоманды <> "" Тогда НовыйЭлемент.ИмяКоманды = ИмяКоманды; КонецЕсли;
	
	Для Каждого Свойства Из СтруктураСвойств Цикл
		НовыйЭлемент[Свойства.Ключ] = Свойства.Значение;	
	КонецЦикла;
	Возврат НовыйЭлемент;
	
КонецФункции
///////////////////////////////////////////////////////////////////////////////////
//Создание команды
&НаСервере
Процедура СоздатьКоманду(ЭтаФорма,ИмяКоманды,КомандаЗаголовок,КомандаДействия) Экспорт
    НоваяКоманда = ЭтаФорма.Команды.Добавить(ИмяКоманды);
    НоваяКоманда.Заголовок = КомандаЗаголовок;
	НоваяКоманда.Действие = КомандаДействия;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////
//Создание динамического списка
&НаСервере
Процедура СозданиеДинамическогоСписка(ЭтаФорма,
	ИмяСписка = "Список", 			//тип строка - имя будущего списка на форме и реквизита
	ТекстЗапроса = "", 				//тип строка - запрос, если он не указан, необходимо указать таблицу
	МассивКолонок,                  //тип массив - массив создаваемых колонок, значения тип строка. Пример: "Д,ДоговораКонтрагента" значит будет создана колонка
									//				с заголовком "Д" и колонкой списка "ДоговораКонтрагента". Если указать просто "ДоговораКонтрагента", 
									//				заголовок будет идентичен заголовку по умолчанию типа "Договор контрагента".
	СписокДействий = Неопределено,  //типа структура - структура содержит действия (свойства) динамического списка, можно указать только те которые необходимы.
									//				пример: СписокДействий = Новый Структура("Выбор,ПриАктивизацииСтроки","СписокВыбор","СписокПриАктивизацииСтроки")
	ТаблицаСписка = "",				//тип строка - содержит имя основной таблицы, пример: "Документ.РеализацияТоваровУслуг"	
	ДобавитьВ = "",                 //тип строка - имя элемента на который будет размещен список, если пустое, тогда добавляется на форму
	ВставитьПеред = "",             //тип строка - имя элемента перед которым будет размещен список, если пустое, будет просто добавлен в конец
	СвояКоманднаяПанель = ЛОЖЬ,     //тип булево - если ИСТИНА, скрывает стандартную панель и создает свою пустую для будушего наполнения ИмяСписка+"КоманднаяПанель2"
	ПараметрыЗапроса = Неопределено)//тип структура - содержит перечень параметров, если они используются в запросе.
	
	//Защита от дурака
	Если ТекстЗапроса = "" И ТаблицаСписка = "" Тогда Сообщить("Ошибка формирования динамического списка, укажите запрос или таблицу"); Возврат; КонецЕсли;
																									
	//Создаем свою командную панель, тот случай когда я не нашел способа снять галочку "Автозаполнение"
	Если СвояКоманднаяПанель Тогда
		Если ВставитьПеред = "" Тогда
			ГруппаДинамическогоСписка  = ЭтаФорма.Элементы.Добавить("Группа" + ИмяСписка 
			+ "CоСвоейКоманднойПанелью",Тип("ГруппаФормы"),?(ДобавитьВ = "",ЭтаФорма,ЭтаФорма.Элементы[ДобавитьВ]));
		Иначе
			ГруппаДинамическогоСписка  = ЭтаФорма.Элементы.Вставить("Группа" + ИмяСписка 
			+ "CоСвоейКоманднойПанелью",Тип("ГруппаФормы"),?(ДобавитьВ = "",ЭтаФорма,ЭтаФорма.Элементы[ДобавитьВ]),ЭтаФорма.Элементы[ВставитьПеред]);			
		КонецЕсли;
		ГруппаДинамическогоСписка.Вид = ВидГруппыФормы.ОбычнаяГруппа;
		ГруппаДинамическогоСписка.ОтображатьЗаголовок = Ложь;
		ГруппаДинамическогоСписка.Отображение = ОтображениеОбычнойГруппы.Нет;
		ГруппаДинамическогоСписка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
		КоманднаяПанельСписка  = ЭтаФорма.Элементы.Добавить(ИмяСписка + "КоманднаяПанель2",Тип("ГруппаФормы"),ГруппаДинамическогоСписка);
		КоманднаяПанельСписка.Вид = ВидГруппыФормы.КоманднаяПанель;			
	КонецЕсли;
									
	//Создаем реквизит формы
	ТипыРеквизита = Новый Массив;                             
	ТипыРеквизита.Добавить(Тип("ДинамическийСписок"));
	ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизита); 
	ДинамическийСписок = Новый РеквизитФормы(ИмяСписка, ОписаниеТиповДляРеквизита,,"",ЛОЖЬ); //Имя реквизита
	ДобавляемыеРеквизиты = Новый Массив;
	ДобавляемыеРеквизиты.Добавить(ДинамическийСписок);        
	
	//Задаем свойства реквизиту
	ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);        
	РеквизитДинамическийСписок = ЭтаФорма[ИмяСписка]; //Имя реквизита
	Если ТекстЗапроса = "" Тогда
		РеквизитДинамическийСписок.ПроизвольныйЗапрос = ЛОЖЬ;
		РеквизитДинамическийСписок.ОсновнаяТаблица = ТаблицаСписка;
	Иначе
		РеквизитДинамическийСписок.ПроизвольныйЗапрос = ИСТИНА;
		РеквизитДинамическийСписок.ТекстЗапроса = ТекстЗапроса;
		Если ТаблицаСписка <> "" Тогда РеквизитДинамическийСписок.ОсновнаяТаблица = ТаблицаСписка; КонецЕсли;		
	КонецЕсли;
	
	//Заполняем параметры если они были указаны
	Если ПараметрыЗапроса <> Неопределено Тогда
		Для Каждого Параметра из ПараметрыЗапроса Цикл
			РеквизитДинамическийСписок.Параметры.УстановитьЗначениеПараметра(Параметра.Ключ,Параметра.Значение);	
		КонецЦикла;		 
	КонецЕсли;
	
	//Размещаем реквизит на форме
	Если ЛОЖЬ
		ИЛИ ВставитьПеред = "" 
		ИЛИ СвояКоманднаяПанель //Если своя командная панель тогда нет логики уже в параметре ВставитьПеред
		Тогда
		ТаблицаФормы = ЭтаФорма.Элементы.Добавить(ИмяСписка,Тип("ТаблицаФормы"),
		?(СвояКоманднаяПанель,ГруппаДинамическогоСписка,?(ДобавитьВ = "",ЭтаФорма,ЭтаФорма.Элементы[ДобавитьВ])));
	Иначе
		ТаблицаФормы = ЭтаФорма.Элементы.Вставить(ИмяСписка,Тип("ТаблицаФормы"),
		?(ДобавитьВ = "",ЭтаФорма,ЭтаФорма.Элементы[ДобавитьВ]),ЭтаФорма.Элементы[ВставитьПеред]);	
	КонецЕсли;		
	ТаблицаФормы.ПутьКДанным = ИмяСписка; //Имя реквизита 
	
	//Если своя панель тогда скрываем стандартную
	Если СвояКоманднаяПанель Тогда
		ЭтаФорма.Элементы[ИмяСписка].ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;
	КонецЕсли;
	//Создание колонок на основание МассивКолонок
	Для Каждого Элемента Из МассивКолонок Цикл
		ПараметрыКолонки = СтрЗаменить(Элемента,",",Символы.ПС);
		Если СтрЧислоСтрок(ПараметрыКолонки) > 1 Тогда
			Заголовок = СтрПолучитьСтроку(ПараметрыКолонки, 1);
			ИмяКолонки = СтрПолучитьСтроку(ПараметрыКолонки, 2);
		Иначе
			Заголовок = "";
			ИмяКолонки = ПараметрыКолонки; 
		КонецЕсли;	
		НоваяКолонкаТаблицы = ЭтаФорма.Элементы.Добавить(ИмяСписка + ИмяКолонки, Тип("ПолеФормы"), ТаблицаФормы);
		Если Заголовок <> "" Тогда НоваяКолонкаТаблицы.Заголовок = Заголовок; КонецЕсли;
		НоваяКолонкаТаблицы.ПутьКДанным = ИмяСписка + "." + ИмяКолонки; 	
	КонецЦикла;
	
	//Задаем действия (События) на основание СписокДействий, если он определен
	Если СписокДействий <> Неопределено Тогда 	
		ПереченьСвойств = "ПриИзменении
						|Выбор
						|ПриАктивизацииСтроки
						|ВыборЗначения
						|ПриАктивизацииПоля
						|ПриАктивизацииЯчейки
						|ПередНачаломДобавления
						|ПередНачаломИзменения
						|ПередУдалением
						|ПриНачалеРедактирования
						|ПередОкончаниемРедактирования
						|ПриОкончанииРедактирования
						|ОбработкаВыбора
						|ПередРазворачиванием
						|ПередСворачиванием
						|ПослеУдаления
						|ПриСменеТекущегоРодителя
						|ОбработкаЗаписиНового
						|ПриСохраненииПользовательскихНастроекНаСервере
						|ПередЗагрузкойПользовательскихНастроекНаСервере
						|ПриЗагрузкеПользовательскихНастроекНаСервере
						|ПриОбновленииСоставаПользовательскихНастроекНаСервере
						|ОбработкаЗапросаОбновления
						|ПриПолученииДанныхНаСервере
						|НачалоПеретаскивания
						|ПроверкаПеретаскивания
						|ОкончаниеПеретаскивания
						|Перетаскивание";
		Для Счетчик = 1 по 28 Цикл
			ИмяСвойства = СтрПолучитьСтроку(ПереченьСвойств, Счетчик);
			ЭтаФорма.Элементы[ИмяСписка].УстановитьДействие(ИмяСвойства,?(СписокДействий.Свойство(ИмяСвойства),СписокДействий[ИмяСвойства],""));
		КонецЦикла;
	КонецЕсли;	
КонецПроцедуры