Перем СоздавалиНовуюСтроку;

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

// Процедура - обаботчик события "Нажатие" в: Кнопка "ОК"
//
Процедура ОКНажатие(Элемент)
	УдалитьДобавленнуюНевыбраннуюСтроку(Истина);
	ЭтаФорма.НачальноеЗначениеВыбора = СписокНастроек.Индекс(ЭлементыФормы.СписокНастроек.ТекущиеДанные);
	Закрыть(ЭлементыФормы.СписокНастроек.ТекущиеДанные);
КонецПроцедуры

Процедура УдалитьДобавленнуюНевыбраннуюСтроку(СтрокаВыбрана = Ложь)
	
	НачальноеКоличество = СписокНастроек.Количество(); 
	Для Счетчик = 1 По НачальноеКоличество Цикл
		СтрокаСписка = СписокНастроек[НачальноеКоличество - Счетчик];
		Если Истина
			И СтрокаСписка.Значение = Неопределено 
			И (Ложь
				Или Не СтрокаВыбрана
				Или СтрокаСписка <> ЭлементыФормы.СписокНастроек.ТекущиеДанные)
		Тогда
			СписокНастроек.Удалить(СтрокаСписка);
		КонецЕсли;
	КонецЦикла;

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

// Процедура - обаботчик события "Нажатие" в: Кнопка "Отмена"
//
Процедура ОтменаНажатие(Элемент)
	УдалитьДобавленнуюНевыбраннуюСтроку();
	Закрыть();
КонецПроцедуры

// Процедура - обаботчик события "Нажатие" в: Кнопка "Удалить"
//
Процедура УдалитьНажатие(Элемент)
	
	ТекущиеДанные = ЭлементыФормы.СписокНастроек.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	Если СоздавалиНовуюСтроку и ТекущиеДанные = СписокНастроек[СписокНастроек.Количество() - 1] Тогда
		СоздавалиНовуюСтроку = Ложь;
	КонецЕсли;
	Если СписокНастроек.Количество() = 1 Тогда
		СоздавалиНовуюСтроку = Истина;
		ТекущиеДанные.Представление = НовоеНаименование;
		ТекущиеДанные.Пометка = Ложь;
	Иначе
		СписокНастроек.Удалить(ТекущиеДанные);
	КонецЕсли;
	
КонецПроцедуры

// Процедура - обаботчик события "ПриИзменении" в: Поле ввода "НаименованиеНастройки"
//
Процедура НаименованиеНастройкиПриИзменении(Элемент)
	
	НаименованиеНастройки = "";
	
КонецПроцедуры

// Процедура - обаботчик события "ПриАктивизацииСтроки"  табличного поля "СписокНастроек"
//
Процедура СпискокНастроекПриАктивизацииСтроки(Элемент)
	Возврат;
	НаименованиеНастройки = ЭлементыФормы.СписокНастроек.ТекущиеДанные.Представление;
КонецПроцедуры

// Процедура - обаботчик события "ПриИзмененииФлажка"  табличного поля "СписокНастроек"
//
Процедура СпискокНастроекПриИзмененииФлажка(Элемент, Колонка)
	
	ТекущиеДанные = ЭлементыФормы.СписокНастроек.ТекущиеДанные;
	Если ТекущиеДанные.Пометка Тогда
		ПометитьТекущуюСтроку();
	КонецЕсли;
	
КонецПроцедуры

Процедура ПометитьТекущуюСтроку()
	
	ТекущиеДанные = ЭлементыФормы.СписокНастроек.ТекущиеДанные;
	ТекущиеДанные.Пометка = Истина;
	Для каждого ЭлементСписка Из СписокНастроек Цикл
		Если ЭлементСписка.Пометка и ЭлементСписка <> ТекущиеДанные Тогда
			ЭлементСписка.Пометка = Ложь;
		КонецЕсли;
	КонецЦикла;

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

Процедура ИспользоватьПриОткрытииПриИзменении(Элемент)
	
	ТекущиеДанные = ЭлементыФормы.СписокНастроек.ТекущиеДанные;
	Если ТекущиеДанные.Пометка Тогда
		Для каждого ЭлементСписка Из СписокНастроек Цикл
			Если ЭлементСписка.Пометка И Не ЭлементСписка = ТекущиеДанные Тогда
				ЭлементСписка.ИспользоватьПриОткрытии = Ложь;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры

// Процедура - обаботчик события "ПриВыводеСтроки"  табличного поля "СписокНастроек"
//
Процедура СпискокНастроекПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт
	
	Если ДанныеСтроки.Пометка Тогда
		ОформлениеСтроки.Шрифт = Новый Шрифт(,, Истина);
	КонецЕсли;
	
КонецПроцедуры

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

Процедура НадписьАвтонаименованиеНажатие(Элемент)

	НаименованиеНастройкиОкончаниеВводаТекста(, НовоеНаименование,,);
	
КонецПроцедуры

Процедура ПриЗакрытии()
	ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма);
КонецПроцедуры

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

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

Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт 
	
	ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок);

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

ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирПлатформа.Форма.ВыборНастройкиДляСохранения");
