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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	НачатьПолучениеСпискаПриложенийДляПодключения();

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

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

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

&НаКлиенте
Процедура ПриложенияВСервисеПриАктивизацииСтроки(Элемент)

	ТекущиеДанные = Элементы.ПриложенияВСервисе.ТекущиеДанные;
	
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Объект.ВнутренняяПубликация = ТекущиеДанные.ДоступенExchangeAdministrationManage_3_0_1_1;
	Объект.КонечнаяТочка = ТекущиеДанные.КонечнаяТочка;
	Объект.КонечнаяТочкаКорреспондента = ТекущиеДанные.КонечнаяТочкаКорреспондента;
	Объект.НаименованиеКорреспондента = ТекущиеДанные.НаименованиеПриложения;
	Объект.ОбластьДанныхКорреспондента = ТекущиеДанные.ОбластьДанных;
		
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ОбновитьСписокДоступныхПриложений(Команда)
	
	НачатьПолучениеСпискаПриложенийДляПодключения();
	
КонецПроцедуры

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

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

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

#Область ПолучениеСпискаПриложенийДляПодключения

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

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

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

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

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

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

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

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

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