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

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

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

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

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

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

&НаКлиенте
Функция ТемаСообщения(Знач Ошибка)
	
	ПереносСтроки = СтрНайти(Ошибка, Символы.ПС);
	Если ПереносСтроки = 0 Тогда
		ТемаСообщения = Лев(Ошибка, 100);
	Иначе
		ТемаСообщения = Лев(Ошибка, ПереносСтроки - 1);
	КонецЕсли;
	
	Возврат ТемаСообщения;
	
КонецФункции

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

&НаКлиенте
Процедура РешенияКлиентТекстОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьНавигационнуюСсылкуКлассификатора(
		Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка, ДополнительныеДанные());
КонецПроцедуры

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

&НаКлиенте
Процедура РешенияСерверТекстОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьНавигационнуюСсылкуКлассификатора(
		Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка, ДополнительныеДанные());
КонецПроцедуры

&НаКлиенте
Процедура ДополнительнаяСсылкаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)

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

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

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

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

&НаКлиенте
Процедура ПерейтиКНастройкеПрограмм(Команда)
	
	Закрыть();
	ЭлектроннаяПодписьКлиент.ОткрытьНастройкиЭлектроннойПодписиИШифрования("Программы");
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьРасширение(Команда)
	
	ЭлектроннаяПодписьКлиент.УстановитьРасширение(Истина);
	Закрыть();
	
КонецПроцедуры

&НаКлиенте
Процедура ВопросВПоддержку(Команда)
	
	ВыгрузитьТехническуюИнформацию(Ложь);
	
КонецПроцедуры

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

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

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

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

&НаСервере
Процедура УстановитьЭлементы(ТекстОшибки, ДвеОшибки, МестоОшибки)
	
	Если МестоОшибки = "Сервер" Тогда
		ЭлементОшибка = Элементы.ОшибкаСервер;
		ЭлементТекстОшибки = Элементы.ТекстОшибкиСервер;
		ЭлементИнструкция = Элементы.ИнструкцияСервер;
		ЭлементПричиныТекст = Элементы.ПричиныСерверТекст;
		ЭлементРешенияТекст = Элементы.РешенияСерверТекст;
		ГруппаПричиныИРешения = Элементы.ВозможныеПричиныИРешенияСервер;
		ГруппаТехническиеПодробности = Элементы.ТехническиеПодробностиСервер;
	ИначеЕсли МестоОшибки = "Клиент" Тогда
		ЭлементОшибка = Элементы.ОшибкаКлиент;
		ЭлементТекстОшибки = Элементы.ТекстОшибкиКлиент;
		ЭлементИнструкция = Элементы.ИнструкцияКлиент;
		ЭлементПричиныТекст = Элементы.ПричиныКлиентТекст;
		ЭлементРешенияТекст = Элементы.РешенияКлиентТекст;
		ГруппаПричиныИРешения = Элементы.ВозможныеПричиныИРешенияКлиент;
		ГруппаТехническиеПодробности = Элементы.ТехническиеПодробностиКлиент;
		Элементы.ЗаголовокКлиент.Видимость = ДвеОшибки;
	Иначе
		ЭлементОшибка = Элементы.Ошибка;
		ЭлементТекстОшибки = Элементы.ТекстОшибки;
		ЭлементИнструкция = Элементы.Инструкция;
		ЭлементПричиныТекст = Элементы.ПричиныТекст;
		ЭлементРешенияТекст = Элементы.РешенияТекст;
		ГруппаПричиныИРешения = Элементы.ВозможныеПричиныИРешения;
		ГруппаТехническиеПодробности = Элементы.ТехническиеПодробности;
	КонецЕсли;
	
	ЭлементОшибка.Видимость = Не ПустаяСтрока(ТекстОшибки);
	Если Не ПустаяСтрока(ТекстОшибки) Тогда
		
		ЕстьПричинаИРешение = Неопределено;
		Если ТипЗнч(ДополнительныеДанные) = Тип("Структура") Тогда
			Если МестоОшибки = "Сервер" Тогда
				СуффиксПроверок = "НаСервере";
			ИначеЕсли МестоОшибки = "Клиент" Тогда
				СуффиксПроверок = "НаКлиенте";
			Иначе
				СуффиксПроверок = "";
			КонецЕсли;
				
			ЕстьПричинаИРешение = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеДанные, 
				"ДополнительныеДанныеПроверок" + СуффиксПроверок, Неопределено); // см. ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредупреждениеПриПроверкеУдостоверяющегоЦентраСертификата
		КонецЕсли;
		
		ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора(ДополнительныеДанные);
		Если ЗначениеЗаполнено(ЕстьПричинаИРешение) Тогда
			ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебный.ПредставлениеОшибки();
			Причина = ЕстьПричинаИРешение.Причина; // Строка
			ОшибкаПоКлассификатору.Причина = ФорматированнаяСтрока(Причина);
			ОшибкаПоКлассификатору.Решение = ФорматированнаяСтрока(ЕстьПричинаИРешение.Решение);
		Иначе
			УказанСертификат = ЗначениеЗаполнено(ДанныеДляДополнения.ДанныеСертификата);
			ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ТекстОшибки, МестоОшибки = "Сервер", ОшибкаПроверкиПодписи, УказанСертификат);
		КонецЕсли;
		
		ЭтоИзвестнаяОшибка = ОшибкаПоКлассификатору <> Неопределено;
		
		ГруппаПричиныИРешения.Видимость = ЭтоИзвестнаяОшибка;
		
		Если ЭтоИзвестнаяОшибка Тогда
			Если ЗначениеЗаполнено(ОшибкаПоКлассификатору.ДействияДляУстранения) Тогда
				ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебный.ДополнитьРешениеКлассификатораОшибокПодробностями(
					ОшибкаПоКлассификатору, ДанныеДляДополнения, МестоОшибки);
			КонецЕсли;
			
			Если ЗначениеЗаполнено(ОшибкаПоКлассификатору.Причина) Тогда
				Если ТипЗнч(ЭлементПричиныТекст) = Тип("ДекорацияФормы") Тогда
					ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
					ЭлементПричиныТекст.Имя, "Заголовок", ОшибкаПоКлассификатору.Причина);
				Иначе
					ЭтотОбъект[ЭлементПричиныТекст.ПутьКДанным] = ОшибкаПоКлассификатору.Причина;
				КонецЕсли;
			Иначе
				ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
				ЭлементПричиныТекст.Имя, "Видимость", Ложь);
			КонецЕсли;
			
			Если ЗначениеЗаполнено(ОшибкаПоКлассификатору.Решение) Тогда
				ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
					ЭлементРешенияТекст.Имя, "Заголовок", ОшибкаПоКлассификатору.Решение);
			Иначе
				ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
					ЭлементРешенияТекст.Имя, "Видимость", Ложь);
			КонецЕсли;
			
			Если МестоОшибки = "Сервер" Тогда
				ЯкорьОшибкиСервер = ОшибкаПоКлассификатору.Ссылка;
			ИначеЕсли МестоОшибки = "Клиент" Тогда
				ЯкорьОшибкиКлиент = ОшибкаПоКлассификатору.Ссылка;
			Иначе
				ЯкорьОшибки = ОшибкаПоКлассификатору.Ссылка;
			КонецЕсли;
			
		Иначе
			ГруппаТехническиеПодробности.Показать();
		КонецЕсли;
		
		ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
				ЭлементИнструкция.Имя, "Заголовок", НСтр("ru = 'Поиск решения...'"));
		
		ТребуемоеКоличествоСтрок = 0;
		ШиринаПоля = Цел(?(Ширина < 20, 20, Ширина) * 1.4);
		Для НомерСтроки = 1 По СтрЧислоСтрок(ТекстОшибки) Цикл
			ТребуемоеКоличествоСтрок = ТребуемоеКоличествоСтрок + 1
				+ Цел(СтрДлина(СтрПолучитьСтроку(ТекстОшибки, НомерСтроки)) / ШиринаПоля);
		КонецЦикла;
		Если ТребуемоеКоличествоСтрок > 5 И Не ДвеОшибки Тогда
			ЭлементТекстОшибки.Высота = 5;
		ИначеЕсли ТребуемоеКоличествоСтрок > 3 Тогда
			ЭлементТекстОшибки.Высота = 4;
		ИначеЕсли ТребуемоеКоличествоСтрок > 1 Тогда
			ЭлементТекстОшибки.Высота = 2;
		Иначе
			ЭлементТекстОшибки.Высота = 1;
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

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

КонецФункции

&НаСервере
Функция ФорматированнаяСтрока(Знач Строка)
	
	Если ТипЗнч(Строка) = Тип("Строка") Тогда
		Строка = СтроковыеФункции.ФорматированнаяСтрока(Строка);
	КонецЕсли;
	
	Возврат Строка;
	
КонецФункции

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

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