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

#Область СлужебныйПрограммныйИнтерфейс

// Результат проверки МЧД для подписания.
// 
// Параметры:
//  Доверенность - СправочникСсылка.МашиночитаемыеДоверенности
//  Сертификат - ДвоичныеДанные
//             - Строка - адрес двоичных данных сертификата во временном хранилище.
//             - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования.
//
// Возвращаемое значение:
//  Неопределено, Структура:
//   * Ключ - Строка - идентификатор проверки "ПроверкаПодписанта", "ПроверкаДоверенности"
//   * Значение - см. РезультатПроверкиДляПротокола
//
Функция РезультатПроверкиМЧДДляПодписания(Доверенность, Сертификат) Экспорт
	
	Если ТипЗнч(Доверенность) <> Тип("СправочникСсылка.МашиночитаемыеДоверенности") Тогда
		Возврат Неопределено;
	КонецЕсли;

	Возврат МашиночитаемыеДоверенностиФНССлужебныйВызовСервера.РезультатПроверкиМЧДДляПодписания(
		Доверенность, Сертификат);

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

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

	Возврат МашиночитаемыеДоверенностиФНССлужебныйВызовСервера.РезультатПроверкиПодписиПоМЧД(
		Доверенность, ПодписанныйОбъект, Сертификат, НаДату, ГотовыеПроверки);

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

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

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

Функция ИнформацияМЧД(РезультатПроверкиПодписиПоМЧД) Экспорт
	
	РезультатПроверки = ПолучитьИзВременногоХранилища(РезультатПроверкиПодписиПоМЧД);
	Верна = Истина;
	Массив = Новый Массив;
	
	Для Каждого Результат Из РезультатПроверки Цикл // см. МашиночитаемыеДоверенностиФНССлужебный.НовыйРезультатПроверкиПодписиПоМЧД
		
		Проверка = "";
		МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.ТекстПроверкиМЧД(Результат, Верна, Проверка);
		
		Массив.Добавить(СтроковыеФункцииКлиент.ФорматированнаяСтрока(НСтр("ru = '%1 <a href=%2>%3</a>'"),
			Проверка,
			ПолучитьНавигационнуюСсылку(Результат.МашиночитаемаяДоверенность),
			Результат.Представление));
		Массив.Добавить(Символы.ПС);

	КонецЦикла;
	
	СвойстваСтроки = Новый Структура;
	СвойстваСтроки.Вставить("МашиночитаемаяДоверенность", Новый ФорматированнаяСтрока(Массив));
	СвойстваСтроки.Вставить("МашиночитаемаяДоверенностьВерна", Верна);
	Возврат СвойстваСтроки;
	
КонецФункции

// См. СтандартныеПодсистемыКлиент.ПриПолученииСерверногоОповещения
Процедура ПриПолученииСерверногоОповещения(ИмяОповещения, Результат) Экспорт
	
	Если ИмяОповещения <> "СтандартныеПодсистемы.МашиночитаемыеДоверенности" Тогда
		Возврат;
	КонецЕсли;

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

Процедура ОткрытьСписокМЧД(ИмяФормы,
	Отборы = Неопределено, ОповещениеОЗакрытии = Неопределено, Владелец = Неопределено) Экспорт
	
	ОткрытьФорму(ИмяФормы, Отборы, Владелец, Отборы,,,ОповещениеОЗакрытии);
	
КонецПроцедуры

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

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

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

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

Функция РезультатОбработкиОшибкиВзаимодействияРР()
	Возврат Новый Структура("Ошибка");
КонецФункции

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

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

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

// Повторный вызов процедуры ПродолжитьВыгрузкуДоверенностиВФайлПроверкаУстановкиКомпонент после установки компонент.
Процедура ПродолжитьВыгрузкуДоверенностиВФайлПовторноПослеУстановкиКомпонент(Результат, ФайлыДоверенностей) Экспорт
	
	Если Результат = Истина Тогда
		ПродолжитьВыгрузкуДоверенностиВФайлПроверкаУстановкиКомпонент(ФайлыДоверенностей, Истина);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

Процедура ВыгрузитьДоверенностьВФайл(Знач Доверенность) Экспорт
	Если ТипЗнч(Доверенность) <> Тип("Массив") Тогда
		Доверенность = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Доверенность);
	КонецЕсли;
	ВыгрузитьДоверенностиВФайлы(Доверенность);
КонецПроцедуры 

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

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

	Контекст = Новый Структура;
	Контекст.Вставить("Оповещение", Оповещение);
	Контекст.Вставить("РезультатПроверкиДоверенности", РезультатПроверкиДоверенности);
	Контекст.Вставить("Индекс", -1);
	Контекст.Вставить("ДанныеДоверенности");
	ПроверитьПодписиЦиклНачало(Контекст);

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

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

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

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

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

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