Процедура ДобавляемоеСвойствоПриИзменении(Элемент)
	
	Если Не ЗначениеЗаполнено(ДобавляемоеСвойство) Тогда
		Возврат;
	КонецЕсли; 
	СтрокаСвойства = ДобавитьДопСвойствоНаФорму(ДобавляемоеСвойство);
	ЭлементыФормы.ДополнительныеСвойства.ТекущаяСтрока = ирОбщий.ИдентификаторСтрокиТабличногоПоляЛкс(СтрокаСвойства);
	ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма);
	
КонецПроцедуры

Процедура ДобавляемоеСвойствоНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	
	ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, ЭтаФорма);
	
КонецПроцедуры

Процедура ДополнительныеСвойстваВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
	
	ДанныеСтроки = ирОбщий.ДанныеСтрокиТабличногоПоляЛкс(ЭлементыФормы.ДополнительныеСвойства);
	Если ирОбщий.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(Элемент, СтандартнаяОбработка, ДанныеСтроки.РасширенноеЗначение) Тогда 
		ДополнительныеСвойстваЗначениеПриИзменении();
	КонецЕсли; 

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

Процедура ДополнительныеСвойстваПередНачаломДобавления(Элемент, Отказ, Копирование)
	
	Отказ = Истина;
	
КонецПроцедуры

Процедура ДополнительныеСвойстваЗначениеПриИзменении(Элемент = Неопределено)
	
	ТекущиеДанные = ирОбщий.ДанныеСтрокиТабличногоПоляЛкс(ЭлементыФормы.ДополнительныеСвойства);
	ТекущиеДанные.РасширенноеЗначение = ТекущиеДанные.Значение;
	ОбновитьТипЗначенияВСтрокеСвойства();

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

Процедура ОбновитьТипЗначенияВСтрокеСвойства(Знач СтрокаСвойства = Неопределено)
	
	СтрокаСвойства = ирОбщий.ДанныеСтрокиТабличногоПоляЛкс(ЭлементыФормы.ДополнительныеСвойства, СтрокаСвойства);
	ирОбщий.ОбновитьТипЗначенияВСтрокеТаблицыЛкс(СтрокаСвойства, "РасширенноеЗначение");

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

Процедура ДополнительныеСвойстваЗначениеНачалоВыбора(Элемент, СтандартнаяОбработка)
	
	ЗначениеИзменено = ирОбщий.ПолеВводаКолонкиРасширенногоЗначения_НачалоВыбораЛкс(ЭлементыФормы.ДополнительныеСвойства, СтандартнаяОбработка,, Истина);
	Если ЗначениеИзменено Тогда
		ДополнительныеСвойстваЗначениеПриИзменении();
	КонецЕсли; 
	
КонецПроцедуры

Функция ДобавитьДопСвойствоНаФорму(Знач ИмяСвойства, Знач ЗначениеСвойства = Неопределено)
	
	СтрокаСвойства = ДополнительныеСвойства.НайтиСтроки(Новый Структура("НИмя", НРег(ИмяСвойства)));
	Если СтрокаСвойства.Количество() = 0 Тогда
		СтрокаСвойства = ДополнительныеСвойства.Добавить();
		СтрокаСвойства.Имя = ИмяСвойства; 
		ирОбщий.ОбновитьКопиюСвойстваВНижнемРегистреЛкс(СтрокаСвойства);
	Иначе
		СтрокаСвойства = СтрокаСвойства[0];
	КонецЕсли; 
	СтрокаСвойства.Значение = ЗначениеСвойства;
	СтрокаСвойства.РасширенноеЗначение = ЗначениеСвойства;
	ОбновитьТипЗначенияВСтрокеСвойства(СтрокаСвойства);
	ДополнительныеСвойства.Сортировать("Имя");
	Возврат СтрокаСвойства;

КонецФункции

Процедура ПриОткрытии()
	
	ТекущиеПараметры = ирКэш.ПараметрыЗаписиОбъектовЛкс();
	ЗаполнитьЗначенияСвойств(ЭтаФорма, ТекущиеПараметры,, "ДополнительныеСвойства");
	ирОбщий.ЗагрузитьВТаблицуЗначенийЛкс(ТекущиеПараметры.ДополнительныеСвойства, ДополнительныеСвойства);
	
КонецПроцедуры

Процедура ОсновныеДействияФормыОсновныеДействияФормыПрименить(Кнопка)
	
	ТекущиеПараметры = ирКэш.ПараметрыЗаписиОбъектовЛкс();
	ЗаполнитьЗначенияСвойств(ТекущиеПараметры, ЭтаФорма); 
	ирОбщий.СохранитьЗначениеЛкс("ирПараметрыЗаписиОбъектов.БезАвторегистрацииИзменений", БезАвторегистрацииИзменений);
	ирОбщий.СохранитьЗначениеЛкс("ирПараметрыЗаписиОбъектов.ДополнительныеСвойства", ДополнительныеСвойства);
	ирОбщий.СохранитьЗначениеЛкс("ирПараметрыЗаписиОбъектов.ОбъектыНаСервере", ОбъектыНаСервере);
	ирОбщий.СохранитьЗначениеЛкс("ирПараметрыЗаписиОбъектов.ОтключатьКонтрольЗаписи", ОтключатьКонтрольЗаписи);
	Закрыть();

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

ирОбщий.ИнициализироватьФормуЛкс(ЭтаФорма, "Обработка.ирПлатформа.Форма.ПараметрыЗаписиОбъектов");

ДополнительныеСвойства.Колонки.Удалить("Значение");
ДополнительныеСвойства.Колонки.Добавить("Значение", ирОбщий.ОписаниеТиповВсеРедактируемыеТипыЛкс()); // Программно нужно добавлять, чтобы все типы можно было использовать
ДополнительныеСвойства.Колонки.Добавить("РасширенноеЗначение");
