Настройки почты / Проверка настроек почты / Модуль формы

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

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

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

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

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

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

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

&НаКлиенте
Процедура ДекорацияТехническиеПодробностиНажатие(Элемент)
	
	Элементы.Страницы.ТекущаяСтраница = Элементы.ТехническиеПодробности;
	Элементы.ФормаНазад.Видимость = Истина;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПерейтиКНастройкам(Команда)
	
	ПерейтиКНастройкамПочты();
	
КонецПроцедуры

&НаКлиенте
Процедура Назад(Команда)
	
	Элементы.Страницы.ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки;
	Элементы.ФормаНазад.Видимость = Ложь;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьИнформациюДляПоддержки(ПодробноеОписаниеОшибки = "")
	
	Если ЗначениеЗаполнено(ПодробноеОписаниеОшибки) Тогда
		ИнформацияДляПоддержки = ПодробноеОписаниеОшибки;
		Возврат;
	КонецЕсли;
	
	ШаблонОписанияОшибки = НСтр("ru = '%1
		|
		|Рекомендации:
		|%2
		|
		|Возможные причины:
		|%3
		|
		|============================
		|
		|Информация для техподдержки:
		|
		|%4'");
	
	ПодробноеОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		ШаблонОписанияОшибки,
		СообщенияОбОшибках,
		СпособыУстранения,
		ВозможныеПричины,
		ТехническиеПодробностиДляПоддержки(Параметры.УчетнаяЗапись));
	
	ИнформацияДляПоддержки = ПодробноеОписаниеОшибки;
	
КонецПроцедуры

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

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

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

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

Связанные материалы