///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Не Параметры.Свойство("Корреспондент") Тогда
		
		ВызватьИсключение НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'", 
			ОбщегоНазначения.КодОсновногоЯзыка());
		
	КонецЕсли;
	
	УстановитьУсловноеОформление();
	
	ИнициализацияРеквизитовФормы();
	
	ИнициализацияЭлементовФормы();
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ТипыТранспортаПриАктивизацииСтроки(Элемент)
	
	ТекущиеДанные = Элементы.ТипыТранспорта.ТекущиеДанные; 
	Элементы.ТипыТранспортаИспользоватьПоУмолчанию.Пометка = ТекущиеДанные.НастройкаПоУмолчанию;
	
КонецПроцедуры 

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

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ИспользоватьПоУмолчанию(Команда)
		
	ТекущиеДанные = Элементы.ТипыТранспорта.ТекущиеДанные;
	
	Если ТекущиеДанные.НастройкаПоУмолчанию Тогда
		Возврат;
	КонецЕсли;
	
	Если Не ТекущиеДанные.ЕстьНастройки Тогда
		
		Текст = НСтр("ru = 'Невозможно установить ненастроенный тип транспорта используемым по умолчанию.'",
			ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
		
		ОбщегоНазначенияКлиент.СообщитьПользователю(Текст);
			
		Возврат;
		
	КонецЕсли;
	
	ИдентификаторТранспорта = ТекущиеДанные.ИдентификаторТранспорта;
	
	ТранспортСообщенийОбменаВызовСервера.НазначитьТранспортПоУмолчанию(Корреспондент, ИдентификаторТранспорта);
	
	Для Каждого Строка Из ТипыТранспорта Цикл
		
		Если Строка.ИдентификаторТранспорта = ИдентификаторТранспорта Тогда
			Строка.КартинкаФлаг = БиблиотекаКартинок.ТранспортПоУмолчанию;
			Строка.НастройкаПоУмолчанию = Истина;
		Иначе
			Строка.КартинкаФлаг = Неопределено;
			Строка.НастройкаПоУмолчанию = Ложь;
		КонецЕсли;
			
	КонецЦикла;
	
	Элементы.ТипыТранспортаИспользоватьПоУмолчанию.Пометка = Истина;
	
КонецПроцедуры

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

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

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура ИнициализацияРеквизитовФормы()

	Параметры.Свойство("Корреспондент", Корреспондент);

	Для Каждого Строка Из ТранспортСообщенийОбмена.ТаблицаПараметровТранспорта(Корреспондент) Цикл
		
		НоваяСтрока = ТипыТранспорта.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
		НоваяСтрока.КартинкаСправка = БиблиотекаКартинок.СправкаФормы;
		
	КонецЦикла;
	
	Запрос = Новый Запрос;
	Запрос.Текст =
		"ВЫБРАТЬ
		|	ТипыТранспорта.ИдентификаторТранспорта КАК ИдентификаторТранспорта
		|ПОМЕСТИТЬ ВТ_ТипыТранспорта
		|ИЗ
		|	&ТипыТранспорта КАК ТипыТранспорта
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	НастройкиТранспорта.НастройкаПоУмолчанию КАК НастройкаПоУмолчанию,
		|	НастройкиТранспорта.ИдентификаторТранспорта КАК ИдентификаторТранспорта,
		|	НастройкиТранспорта.Настройки.(
		|		Ссылка КАК Ссылка,
		|		НомерСтроки КАК НомерСтроки,
		|		Настройка КАК Настройка,
		|		Значение КАК Значение
		|	) КАК Настройки
		|ИЗ
		|	ВТ_ТипыТранспорта КАК ВТ_ТипыТранспорта
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НастройкиТранспортаСообщенийОбмена КАК НастройкиТранспорта
		|		ПО ВТ_ТипыТранспорта.ИдентификаторТранспорта = НастройкиТранспорта.ИдентификаторТранспорта
		|ГДЕ
		|	НастройкиТранспорта.Корреспондент = &Корреспондент";
	
	Запрос.УстановитьПараметр("Корреспондент", Корреспондент);
	Запрос.УстановитьПараметр("ТипыТранспорта", ТипыТранспорта.Выгрузить(,"ИдентификаторТранспорта"));
		
	Выборка = Запрос.Выполнить().Выбрать();
	
	Пока Выборка.Следующий() Цикл
		
		Отбор = Новый Структура("ИдентификаторТранспорта", Выборка.ИдентификаторТранспорта);
		РезультатПоиска = ТипыТранспорта.НайтиСтроки(Отбор);
		
		Если РезультатПоиска.Количество() = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		Строка = РезультатПоиска[0];
		Строка.НастройкаПоУмолчанию = Выборка.НастройкаПоУмолчанию;
		Строка.ЕстьНастройки = НЕ Выборка.Настройки.Пустой();
		
		Если Выборка.НастройкаПоУмолчанию Тогда
			Строка.КартинкаФлаг = БиблиотекаКартинок.ТранспортПоУмолчанию;
		КонецЕсли;
		
	КонецЦикла;
	
	РазделениеВключено = ОбщегоНазначения.РазделениеВключено();
	
КонецПроцедуры

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

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

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

#КонецОбласти




