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

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

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

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

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

&НаКлиенте
Процедура СервисИнтеграцииПриИзменении(Элемент)
	
	ЗаполнитьСписокКаналов();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура Готово(Команда)
	
	Если ПроверитьЗаполнение() Тогда
		
		РезультатЗакрытия = РезультатЗакрытияНаСервере();
		Закрыть(РезультатЗакрытия);
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

&НаСервере
Функция РезультатЗакрытияНаСервере()
	
	Возврат ТранспортСообщенийОбмена.РезультатЗакрытияФормыТранспорта(ЭтотОбъект);
	
КонецФункции

&НаСервере
Процедура ПроверитьПодключениеНаСервере(ПодключениеУстановлено)
	
	УстановитьПривилегированныйРежим(Истина);
	
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	

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

&НаСервере
Процедура ЗаполнитьСервисИнтеграции()
	
	Для Каждого СервисИнтеграции Из Метаданные.СервисыИнтеграции Цикл
		
		Элементы.СервисИнтеграции.СписокВыбора.Добавить(СервисИнтеграции.Имя);
		
	КонецЦикла;
	
	Список = Элементы.СервисИнтеграции.СписокВыбора;
	Если Не ЗначениеЗаполнено(Объект.СервисИнтеграции)
		И Список.Количество() = 1 Тогда
		
		Объект.СервисИнтеграции = Список[0].Значение;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСписокКаналов()
	
	Список = Элементы.КаналОтправки.СписокВыбора;
	Список.Очистить();
	
	Если ЗначениеЗаполнено(Объект.СервисИнтеграции) Тогда
		
		Для Каждого Канал Из Метаданные.СервисыИнтеграции[Объект.СервисИнтеграции].КаналыСервисаИнтеграции Цикл
			Если Канал.НаправлениеСообщения = Метаданные.СвойстваОбъектов.НаправлениеСообщенияКаналаСервисаИнтеграции.Отправка Тогда
				Список.Добавить(Канал.Имя);
			КонецЕсли;
		КонецЦикла;
		
	КонецЕсли;
	
	Если Список.Количество() = 1 Тогда
		Объект.КаналОтправки = Список[0].Значение;
	КонецЕсли;
	
	Список = Элементы.КаналПолучения.СписокВыбора;
	Список.Очистить();
	
	Если ЗначениеЗаполнено(Объект.СервисИнтеграции) Тогда
		
		Для Каждого Канал Из Метаданные.СервисыИнтеграции[Объект.СервисИнтеграции].КаналыСервисаИнтеграции Цикл
			Если Канал.НаправлениеСообщения = Метаданные.СвойстваОбъектов.НаправлениеСообщенияКаналаСервисаИнтеграции.Получение Тогда
				Список.Добавить(Канал.Имя);
			КонецЕсли;
		КонецЦикла;
		
	КонецЕсли;
	
	Если Список.Количество() = 1 Тогда
		Объект.КаналПолучения = Список[0].Значение;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПодключитьВнешнююОбработкуНаСервере()

	ВнешниеОбработки.Подключить("v8res://mngbase/StandardIntegrationServicesManagment.epf", "StandardIntegrationServicesManagment", false);

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

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

