Перем  		мСброситьРодителя;

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


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

Процедура ТрекерНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	ЗаполнитьСписокВыбораЭлементаФормы(ЭтаФорма, Элемент.Имя, "trackers");
КонецПроцедуры

Процедура СтатусНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	ЗаполнитьСписокВыбораЭлементаФормы(ЭтаФорма, Элемент.Имя, "issue_statuses");
КонецПроцедуры

Процедура ПриоритетНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	ЗаполнитьСписокВыбораЭлементаФормы(ЭтаФорма, Элемент.Имя, "enumerations/issue_priorities", "issue_priorities");
КонецПроцедуры

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


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

Процедура ЗаполнитьСписокВыбораИсполнителей()
	
	Если Не ВсеПоляЗаполнены(Новый Структура("APIkey", "ЗадачаПроект")) Тогда
		Возврат;
	КонецЕсли;

	Данные = ЗагруженныеДанные.Получить("projects");
	Если Данные <> Неопределено Тогда
		Для Каждого ДанныеПроекта Из Данные["projects"] Цикл
			Если ЗадачаПроект = ДанныеПроекта.name Тогда
				Проект = ДанныеПроекта.id;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	//: ЗагруженныеДанные = Новый Соответствие
	Данные = ЗагруженныеДанные.Получить("memberships");
	
	Если Данные = Неопределено Тогда
		ОтчетОВыполнении = СформироватьСтруктуруОтчетаОВыполнении();
		Данные = ПолучитьДанныеРесурсаИзТрекера("projects/"+Проект+"/memberships", ОтчетОВыполнении);
		
		Если ОтчетОВыполнении.ЕстьОшибки Тогда
			Сообщить(ОтчетОВыполнении.ТекстОшибки);
			Возврат;
		КонецЕсли;
		
		ЗагруженныеДанные.Вставить("memberships", Данные);
	КонецЕсли;
	
	СписокИсполнителей = Новый СписокЗначений;
	Для Каждого Структура Из Данные["memberships"] Цикл
		 СписокИсполнителей.Добавить(Структура.user.name);
	КонецЦикла;
	
	ЭлементыФормы.Исполнитель.СписокВыбора	= СписокИсполнителей;
	
КонецПроцедуры


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

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

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

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

Процедура СброситьНажатие(Элемент)
	мСброситьРодителя = Не мСброситьРодителя;
	
	Если мСброситьРодителя Тогда
		// TODO  Стоит ли переделать на Вопрос ?
		Сообщить("Для выбранного списка задач будет ""сброшен"" родитель!");
	КонецЕсли;
	
	УстановитьДоступность();
КонецПроцедуры

Процедура УстановитьДоступность()
	ЭлементыФормы.НомерРодителя.Доступность = Не мСброситьРодителя;
КонецПроцедуры


мСброситьРодителя = Ложь