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

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

#Область ДляВызоваИзДругихПодсистем

// Переопределяет настройки печати для объекта.
//
// Параметры:
//  Настройки - см. УправлениеПечатью.НастройкиПечатиОбъекта.
//
Процедура ПриОпределенииНастроекПечати(Настройки) Экспорт
	
	Настройки.ПриДобавленииКомандПечати = Истина;
	
КонецПроцедуры

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

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

// СтандартныеПодсистемы.ПодключаемыеКоманды

// Определяет список команд создания на основании.
//
// Параметры:
//  КомандыСозданияНаОсновании - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.КомандыСозданияНаОсновании
//  Параметры - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.Параметры
//
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
	
	ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
КонецПроцедуры

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

	Возврат Неопределено;
	
КонецФункции

// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

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

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

Функция ИдентификаторСхемыМЧД()
	Возврат "http://www.1c.ru/ssl/emchd1";
КонецФункции

Функция ЦелевоеПространствоИмен()
	Возврат "urn://x-artefacts/EMCHD_1";
КонецФункции

// Параметры:
//  Объект - СправочникОбъект.МашиночитаемыеДоверенности
//
Функция СформироватьФайлДоверенности(Объект) Экспорт
	
	ДанныеДоверенности = ДанныеДоверенности(Объект);
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку("UTF-8");
	ЗаписьXML.ЗаписатьОбъявлениеXML();
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ДанныеДоверенности, "Доверенность");
	ДоверенностьXML = ЗаписьXML.Закрыть();
	
	ДоверенностьXML = СтрЗаменить(ДоверенностьXML, """" + ИдентификаторСхемыМЧД() + """",
		 """" + ЦелевоеПространствоИмен()  + """");
	
	ИдентификаторФайла = ДанныеДоверенности.ИдФайл;
	
	Результат = Новый Структура;
	Результат.Вставить("Текст", ДоверенностьXML);
	Результат.Вставить("ИмяБезРасширения", ИдентификаторФайла);
	Результат.Вставить("РасширениеБезТочки", "xml");
	
	Возврат Результат;
	
КонецФункции

// Параметры:
//  Объект - СправочникОбъект.МашиночитаемыеДоверенности
//
Функция ДанныеДоверенности(Объект)
	
	ДляНалоговыхОрганов = Объект.ДляНалоговыхОрганов;
	
	ВерсияФормата = "EMCHD_1";
	ФлагОбязательностиЭлементов = "000" + ?(ДляНалоговыхОрганов, "1", "0") + "0000";
	ИдентификаторФайлаДляПредставленияИнтересовВНалоговомОргане = "";
	ИныеСведения = Объект.ИныеСведения;
	КодФормыПоКлассификаторуНалоговойДокументации = "1110415";
	
	Документ = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ДокументТип"));
	Если ДляНалоговыхОрганов Тогда
		Документ.КНД = КодФормыПоКлассификаторуНалоговойДокументации;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(Объект.РодительскаяДоверенность) Тогда
		Передоверие = Передоверие(Объект);
		Документ.Передов = Передоверие;
	Иначе
		Доверенность = Доверенность(Объект);
		Документ.Довер = Доверенность;
	КонецЕсли;
	
	Префикс = "ON_EMCHD";
	ДатаФормирования = Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd;");
	ИдентификационныйНомер = Объект.НомерДоверенности;
	ИдентификаторФайла = СтрШаблон("%1_%2_%3", Префикс, ДатаФормирования, ИдентификационныйНомер);
	
	Если ДляНалоговыхОрганов Тогда
		Префикс = "ON_DOVEL";
		Получатель = XMLСтрока(Объект.КодНалоговогоОрганаПредставления);
		КонечныйПолучатель = Получатель;
		Если Объект.НалоговыеОрганыДействия.Количество() = 1 Тогда
			КонечныйПолучатель = XMLСтрока(Объект.НалоговыеОрганыДействия[0].КодНалоговогоОргана);
		КонецЕсли;
		
		ОписанияДоверителей = Объект.Доверители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", 
			Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
		
		Отправитель = "";
		Для Каждого ОписаниеДоверителя Из ОписанияДоверителей Цикл
			РеквизитыДоверителя = ОписаниеДоверителя.ДоверительРеквизиты.Получить();
			Отправитель = XMLСтрока(РеквизитыДоверителя.ИНН);
			Если Не РеквизитыДоверителя.ЭтоИндивидуальныйПредприниматель И Не РеквизитыДоверителя.ЭтоФизическоеЛицо Тогда
				Отправитель = Отправитель + XMLСтрока(РеквизитыДоверителя.КПП);
			КонецЕсли;
			Прервать;
		КонецЦикла;
		
		ИдентификаторФайлаДляПредставленияИнтересовВНалоговомОргане = СтрШаблон("%1_%2_%3_%4_%5_%6", 
			Префикс, Получатель, КонечныйПолучатель, Отправитель, ДатаФормирования, ИдентификационныйНомер);
	КонецЕсли;
	
	ОписаниеДоверенности = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ДоверенностьТип"));
	ОписаниеДоверенности.ВерсФорм = ВерсияФормата;
	ОписаниеДоверенности.ПрЭлФорм = ФлагОбязательностиЭлементов;
	ОписаниеДоверенности.ИдФайл = ИдентификаторФайла;
	Если ДляНалоговыхОрганов Тогда
		ОписаниеДоверенности.ИдФайлНО = ВРег(ИдентификаторФайлаДляПредставленияИнтересовВНалоговомОргане);
	КонецЕсли;
	Если ЗначениеЗаполнено(ИныеСведения) Тогда
		ОписаниеДоверенности.ИнСвед = ИныеСведения;
	КонецЕсли;
	ОписаниеДоверенности.Документ = Документ;
	
	Возврат ОписаниеДоверенности;
	
КонецФункции

Функция Доверенность(Объект)
	
	СведенияОДоверенности = СведенияОДоверенности(Объект);
	СведенияОДоверителях = СведенияОДоверителях(Объект);
	СведенияОПредставителях = СведенияОПредставителях(Объект);
	СведенияОПолномочияхПредставителей = СведенияОПолномочияхПредставителей(Объект);
	
	Доверенность = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ДоверТип"));
	Доверенность.СвДов = СведенияОДоверенности;
	Для Каждого СведенияОДоверителе Из СведенияОДоверителях Цикл
		Доверенность.СвДоверит.Добавить(СведенияОДоверителе);
	КонецЦикла;
	Для Каждого СведенияОПредставителе Из СведенияОПредставителях Цикл
		Доверенность.СвУпПред.Добавить(СведенияОПредставителе);
	КонецЦикла;
	Доверенность.СвПолн = СведенияОПолномочияхПредставителей;
	
	Возврат Доверенность;
	
КонецФункции

Функция СведенияОДоверенности(Объект) // СвДовТип
	
	ВидДоверенности = "1";
	
	Если Объект.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.ОднократноеПередоверие Тогда
		ПризнакВозможностиПередоверия = "2";
	ИначеЕсли Объект.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.МногократноеПередоверие Тогда
		ПризнакВозможностиПередоверия = "3";
	Иначе
		ПризнакВозможностиПередоверия = "1";
	КонецЕсли;
	
	ВнутреннийНомерДоверенности = Объект.Код;
	ЕдиныйРегистрационныйНомер = Объект.НомерДоверенности;
	ДатаВыдачиДоверенности = Формат(Объект.ДатаВыдачи, "ДФ=yyyy-MM-dd");
	СрокДействияДоверенности = Формат(Объект.ДатаОкончания, "ДФ=yyyy-MM-dd");
	КодНалоговогоОрганаПредставления = Объект.КодНалоговогоОрганаПредставления; 
	КодыНалоговыхОргановДействия = Объект.НалоговыеОрганыДействия.ВыгрузитьКолонку("КодНалоговогоОргана");
	СведенияОбИнформационнойСистеме = "https://m4d.nalog.gov.ru/EMCHD/check-status?guid=" + ЕдиныйРегистрационныйНомер;
	
	СведенияОДоверенности = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвДовТип"));
	СведенияОДоверенности.ВидДовер = ВидДоверенности;
	СведенияОДоверенности.ПрПередов = ПризнакВозможностиПередоверия;
	СведенияОДоверенности.ВнНомДовер = ВнутреннийНомерДоверенности;
	СведенияОДоверенности.НомДовер = ЕдиныйРегистрационныйНомер;
	СведенияОДоверенности.ДатаВыдДовер = ДатаВыдачиДоверенности;
	СведенияОДоверенности.СрокДейст = СрокДействияДоверенности;
	Если Объект.ДляНалоговыхОрганов Тогда
		СведенияОДоверенности.КодНО = КодНалоговогоОрганаПредставления;
		Для Каждого КодНалоговогоОрганаДействия Из КодыНалоговыхОргановДействия Цикл
			СведенияОДоверенности.КодНОДейст.Добавить(КодНалоговогоОрганаДействия);
		КонецЦикла;
	КонецЕсли;
	СведенияОДоверенности.СведСист = СведенияОбИнформационнойСистеме;
	
	Возврат СведенияОДоверенности;
	
КонецФункции

Функция СведенияОДоверителях(Доверенность)
	
	ДляНалоговыхОрганов = Доверенность.ДляНалоговыхОрганов;
	СведенияОДоверителях = Новый Массив;
	
	ОписанияДоверителей = Доверенность.Доверители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", 
		Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
		
	Для Каждого ОписаниеДоверителя Из ОписанияДоверителей Цикл
		СведенияОДоверителе = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвДоверитТип"));	
		Доверитель = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ДоверитТип"));	
		РеквизитыДоверителя = ОписаниеДоверителя.ДоверительРеквизиты.Получить();
		ОписанияЛицДоверителя = Доверенность.Доверители.НайтиСтроки(
			Новый Структура("ИдентификаторРодителя", ОписаниеДоверителя.Идентификатор));
		
		РеквизитыЛицДоверителя = Новый Массив;
		РеквизитыЛицУправляющихКомпаний = Новый Соответствие;
		Для Каждого ОписаниеЛицаДоверителя Из ОписанияЛицДоверителя Цикл
			РеквизитыЛицаДоверителя = ОписаниеЛицаДоверителя.ДоверительРеквизиты.Получить();
			Если РеквизитыЛицаДоверителя.ЭтоФизическоеЛицо Тогда
				РеквизитыЛицДоверителя.Добавить(РеквизитыЛицаДоверителя);
			Иначе
				РеквизитыЛицУправляющейКомпании = Новый Массив;
				ОписанияЛицУправляющейКомпании = Доверенность.Доверители.НайтиСтроки(
					Новый Структура("ИдентификаторРодителя", ОписаниеЛицаДоверителя.Идентификатор));
				РеквизитыЛицУправляющихКомпаний.Вставить(РеквизитыЛицаДоверителя, РеквизитыЛицУправляющейКомпании);
				Для Каждого ОписаниеЛицаУправляющейКомпании Из ОписанияЛицУправляющейКомпании Цикл
					РеквизитыЛицаУправляющейКомпании = ОписаниеЛицаУправляющейКомпании.ДоверительРеквизиты.Получить();
					РеквизитыЛицУправляющейКомпании.Добавить(РеквизитыЛицаУправляющейКомпании);
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
		
		ТипДоверителя = Неопределено;
		
		ДоверителемЯвляетсяФизическоеЛицо = РеквизитыДоверителя.ЭтоФизическоеЛицо;
		Если ДоверителемЯвляетсяФизическоеЛицо Тогда 
			ТипДоверителя = "4";
			СведенияОФизическомЛицеДоверителе = СведенияОФизическомЛицеДоверителе(РеквизитыДоверителя, ДляНалоговыхОрганов);
			Доверитель.ФЛДовер = СведенияОФизическомЛицеДоверителе;
		Иначе
			Если РеквизитыДоверителя.ЭтоИностраннаяОрганизация Тогда
				ТипДоверителя = "2";
				СведенияОбИностранномЮридическомЛице = СведенияОДоверителеИностранногоЮридическогоЛица(РеквизитыДоверителя, РеквизитыЛицДоверителя, ДляНалоговыхОрганов);
				Доверитель.ИнОргДовер = СведенияОбИностранномЮридическомЛице;
			ИначеЕсли РеквизитыДоверителя.ЭтоИндивидуальныйПредприниматель Тогда
				ТипДоверителя = "3";
				СведенияОбИндивидуальномПредпринимателе = СведенияОбИндивидуальномПредпринимателе(РеквизитыДоверителя, РеквизитыЛицДоверителя, ДляНалоговыхОрганов);
				Доверитель.ИПДовер = СведенияОбИндивидуальномПредпринимателе;
			Иначе
				ТипДоверителя = "1";
				СведенияОДоверителеЮридическогоЛица = СведенияОДоверителеЮридическогоЛица(РеквизитыДоверителя, РеквизитыЛицУправляющихКомпаний, РеквизитыЛицДоверителя, ДляНалоговыхОрганов);
				Доверитель.РосОргДовер = СведенияОДоверителеЮридическогоЛица;
			КонецЕсли;
		КонецЕсли;
		
		Если ТипДоверителя <> Неопределено Тогда
			СведенияОДоверителе.ТипДоверит = ТипДоверителя;
			СведенияОДоверителе.Доверит = Доверитель;
			СведенияОДоверителях.Добавить(СведенияОДоверителе);
		КонецЕсли;		
	
	КонецЦикла;
	
	Возврат СведенияОДоверителях;
	
КонецФункции

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

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

Функция СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя(РеквизитыОрганизации, РеквизитыУправляющихКомпаний, РеквизитыФизическихЛиц, ДляНалоговыхОрганов) // ЛицоБезДовТип
	
	СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя = Новый Массив;
	ВидПолномочийЕдиноличногоИсполнительногоОргана = "1";
	Если РеквизитыУправляющихКомпаний.Количество() + РеквизитыФизическихЛиц.Количество() > 1 Тогда
		ВидПолномочийЕдиноличногоИсполнительногоОргана = "2";
	КонецЕсли;
	
	Для Каждого РеквизитыУправляющейКомпании Из РеквизитыУправляющихКомпаний Цикл
		СведенияОЛицеДоверителя = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ЛицоБезДовТип"));
		СведенияОЛицеДоверителя.ПолнЮЛ = ВидПолномочийЕдиноличногоИсполнительногоОргана;

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

		СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя.Добавить(СведенияОЛицеДоверителя);
	КонецЦикла;
	
	Возврат СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя;
	
КонецФункции

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

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

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

Функция СведенияОПредставителях(Доверенность) // СвУпПредТип
	
	ДляНалоговыхОрганов = Доверенность.ДляНалоговыхОрганов;
	
	СведенияОПредставителях = Новый Массив;
	
	ОписанияПредставителей = Доверенность.Представители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", 
		Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
		
	Для Каждого ОписаниеПредставителя Из ОписанияПредставителей Цикл
		СведенияОПредставителе = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвУпПредТип"));
		Представитель = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ПредТип"));
		РеквизитыПредставителя = ОписаниеПредставителя.ПредставительРеквизиты.Получить();
		
		ОписанияЛицПредставителя = Доверенность.Представители.НайтиСтроки(
			Новый Структура("ИдентификаторРодителя", ОписаниеПредставителя.Идентификатор));
		
		РеквизитыЛицПредставителя = Новый Массив;
		РеквизитыЛицОрганизаций = Новый Соответствие;
		
		Для Каждого ОписаниеЛицаПредставителя Из ОписанияЛицПредставителя Цикл
			РеквизитыЛицаПредставителя = ОписаниеЛицаПредставителя.ПредставительРеквизиты.Получить();
			Если РеквизитыЛицаПредставителя.ЭтоФизическоеЛицо Тогда
				РеквизитыЛицПредставителя.Добавить(РеквизитыЛицаПредставителя);
			Иначе
				РеквизитыЛицОрганизации = Новый Массив;
				ОписанияЛицОрганизации = Доверенность.Представители.НайтиСтроки(
					Новый Структура("ИдентификаторРодителя", ОписаниеЛицаПредставителя.Идентификатор));
				РеквизитыЛицОрганизаций.Вставить(РеквизитыЛицаПредставителя, РеквизитыЛицОрганизации);
				Для Каждого ОписаниеЛицаОрганизации Из ОписанияЛицОрганизации Цикл
					РеквизитыЛицаОрганизации = ОписаниеЛицаОрганизации.ПредставительРеквизиты.Получить();
					РеквизитыЛицОрганизации.Добавить(РеквизитыЛицаОрганизации);
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
		
		Если РеквизитыПредставителя.ЭтоФизическоеЛицо Тогда
			ТипПредставителя = "3";
			СведенияОФизическомЛице = СведенияОДолжностномЛице(РеквизитыПредставителя, ДляНалоговыхОрганов);
			Представитель.СведФизЛ = СведенияОФизическомЛице;
		ИначеЕсли РеквизитыПредставителя.ЭтоИндивидуальныйПредприниматель Тогда
			ТипПредставителя = "2";
			СведенияОбИндивидуальномПредпринимателе = СведенияОбИндивидуальномПредпринимателе(РеквизитыПредставителя, РеквизитыЛицПредставителя, ДляНалоговыхОрганов);
			Представитель.СведИП = СведенияОбИндивидуальномПредпринимателе;
		ИначеЕсли РеквизитыПредставителя.ЭтоИностраннаяОрганизация Тогда
			ТипПредставителя = "5";
			СведенияОбИностранномЮридическомЛице = СведенияОбИностранномЮридическомЛице(РеквизитыПредставителя, ДляНалоговыхОрганов);
			Представитель.СведИО = СведенияОбИностранномЮридическомЛице;
		ИначеЕсли РеквизитыПредставителя.ЭтоФилиал Тогда
			ТипПредставителя = "4";
			СведенияОФилиалеЮридическогоЛица = СведенияОЮридическомЛице(РеквизитыПредставителя, ДляНалоговыхОрганов);
			Для Каждого РеквизитыЛицаПредставителя Из РеквизитыЛицПредставителя Цикл
				СведенияОФизическомЛице = СведенияОДолжностномЛице(РеквизитыЛицаПредставителя, ДляНалоговыхОрганов);
				Прервать;
			КонецЦикла;
			Представитель.СведФилиал = СведенияОФилиалеЮридическогоЛица;
			Представитель.СведФизЛ = СведенияОФизическомЛице;
		Иначе
			ТипПредставителя = "1";
			СведенияОЮридическомЛице = СведенияОЮридическомЛице(РеквизитыПредставителя, ДляНалоговыхОрганов);
			Представитель.СведОрг = СведенияОЮридическомЛице;
		КонецЕсли;
		СведенияОПредставителе = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвУпПредТип"));
		СведенияОПредставителе.ТипПред = ТипПредставителя;
		СведенияОПредставителе.Пред = Представитель;
		СведенияОПредставителях.Добавить(СведенияОПредставителе);
	КонецЦикла;

	Возврат СведенияОПредставителях;
	
КонецФункции

Функция СведенияОПолномочияхПредставителей(Объект) // СвПолнТип
	
	ПолномочияВТекстовомВиде = Объект.ПолномочияВТекстовомВиде;
	ТипПолномочия = ?(ПолномочияВТекстовомВиде, "0", "1");
	ТекстовоеСодержаниеПолномочия = Объект.ТекстПолномочий;
	ПризнакСовместногоОсуществленияПолномочий = ?(Объект.СовместныеПолномочия, "2", "1");
	СведенияОМашиночитаемыхПолномочиях = СведенияОМашиночитаемыхПолномочиях(Объект);
	
	СведенияОПолномочияхПредставителей = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвПолнТип"));
	
	СведенияОПолномочияхПредставителей.ТипПолн = ТипПолномочия;
	Если Объект.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.ОднократноеПередоверие
		Или Объект.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.МногократноеПередоверие Тогда
		СведенияОПолномочияхПредставителей.ПрУтрПолн = ?(Объект.ПолномочияУтрачиваютсяПриПередоверии, "2", "1");
	КонецЕсли;
	
	СведенияОПолномочияхПредставителей.ПрСовмПолн = ПризнакСовместногоОсуществленияПолномочий;
	
	Если ПолномочияВТекстовомВиде Тогда
		СведенияОПолномочияхПредставителей.ТекстПолн = ТекстовоеСодержаниеПолномочия;
	Иначе
		Для Каждого СведенияОМашиночитаемомПолномочии Из СведенияОМашиночитаемыхПолномочиях Цикл
			СведенияОПолномочияхПредставителей.МашПолн.Добавить(СведенияОМашиночитаемомПолномочии);
		КонецЦикла;
	КонецЕсли;
	
	Возврат СведенияОПолномочияхПредставителей;
	
КонецФункции

Функция СведенияОМашиночитаемыхПолномочиях(Объект)

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

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

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

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

Функция СведенияОДоверителеИностранногоЮридическогоЛица(РеквизитыОрганизации, РеквизитыФизическихЛиц, ДляНалоговыхОрганов) // ИнОргДоверТип
	
	СведенияОДоверителеИностранногоЮридическогоЛица = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ИнОргДоверТип"));
	
	СведенияОбИностранномЮридическомЛице = СведенияОбИностранномЮридическомЛице(РеквизитыОрганизации, ДляНалоговыхОрганов);
	СведенияОДоверителеИностранногоЮридическогоЛица.СвИнОрг = СведенияОбИностранномЮридическомЛице;

	Для Каждого РеквизитыФизическогоЛица Из РеквизитыФизическихЛиц Цикл
		СведенияОРуководителеИностранногоЮридическогоЛица = СведенияОДолжностномЛице(РеквизитыФизическогоЛица, ДляНалоговыхОрганов);
		СведенияОДоверителеИностранногоЮридическогоЛица.СвРукОП.Добавить(СведенияОРуководителеИностранногоЮридическогоЛица);
	КонецЦикла;
	
	Возврат СведенияОДоверителеИностранногоЮридическогоЛица;
	
КонецФункции

Функция СведенияОбИностранномЮридическомЛице(РеквизитыОрганизации, ДляНалоговыхОрганов) // СвИнОргТип

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

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

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

Функция СведенияОФизическомЛице(РеквизитыФизическогоЛица, ДляНалоговыхОрганов) // СведФЛТип
	
	Пол = РеквизитыФизическогоЛица.Пол;
	Если ЗначениеЗаполнено(РеквизитыФизическогоЛица.Гражданство) Тогда
		Если РеквизитыФизическогоЛица.Гражданство = Справочники.СтраныМира.Россия Тогда
			ПризнакНаличияГражданства = "1";
		Иначе
			ПризнакНаличияГражданства = "2";
		КонецЕсли;
		Гражданство = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РеквизитыФизическогоЛица.Гражданство, "Код");
	Иначе 
		ПризнакНаличияГражданства = "3";
		Гражданство = "";
	КонецЕсли;
	
	Если Не ДляНалоговыхОрганов Тогда
		ПризнакНаличияГражданства = "";
	КонецЕсли;
	
	НомерЗаписиЕдиногоРегистраНаселения = РеквизитыФизическогоЛица.НомерЗаписиЕдиногоРегистраНаселения;
	ДатаРождения = Неопределено;
	Если РеквизитыФизическогоЛица.Свойство("ДатаРождения") Тогда
		ДатаРождения = Формат(РеквизитыФизическогоЛица.ДатаРождения, "ДФ=yyyy-MM-dd;");
	КонецЕсли;
	МестоРождения = РеквизитыФизическогоЛица.МестоРождения; 
	КонтактныйТелефон = РеквизитыФизическогоЛица.Телефон; 
	АдресЭлектроннойПочты = РеквизитыФизическогоЛица.ЭлектроннаяПочта; 
	ФИОДоверителя = ФИОДоверителя(РеквизитыФизическогоЛица); 
	АдресМестаЖительства = Неопределено;
	Если ЗначениеЗаполнено(РеквизитыФизическогоЛица.АдресРегистрацииЗначение) Тогда
		АдресМестаЖительства = СведенияОбАдресе(РеквизитыФизическогоЛица.АдресРегистрацииЗначение, ДляНалоговыхОрганов); 
	КонецЕсли;
	СведенияОДокументеУдостоверяющемЛичность = СведенияОДокументеУдостоверяющемЛичность(РеквизитыФизическогоЛица);

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

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

Функция СведенияОДокументеУдостоверяющемЛичность(РеквизитыФизическогоЛица) // УдЛичнФЛТип
	
	Если Не РеквизитыФизическогоЛица.Свойство("ДокументВид")
		Или Не ЗначениеЗаполнено(РеквизитыФизическогоЛица.ДокументВид)
		Или РеквизитыФизическогоЛица.ДокументВид = "0" Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	КодВидаДокумента = РеквизитыФизическогоЛица.ДокументВид;
	СерияИНомерДокумента = РеквизитыФизическогоЛица.ДокументНомер;
	ДатаВыдачиДокумента = Формат(РеквизитыФизическогоЛица.ДокументДатаВыдачи, "ДФ=yyyy-MM-dd;");
	НаименованиеОрганаВыдавшегоДокумент = РеквизитыФизическогоЛица.ДокументКемВыдан;
	КодПодразделенияОрганаВыдавшегоДокумент = РеквизитыФизическогоЛица.ДокументКодПодразделения;
	ДатаИстеченияСрокаДействияДокумента = Формат(РеквизитыФизическогоЛица.ДокументСрокДействия, "ДФ=yyyy-MM-dd;");
	
	СведенияОДокументеУдостоверяющемЛичность = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "УдЛичнФЛТип"));
	СведенияОДокументеУдостоверяющемЛичность.КодВидДок = КодВидаДокумента;
	СведенияОДокументеУдостоверяющемЛичность.СерНомДок = СерияИНомерДокумента;
	СведенияОДокументеУдостоверяющемЛичность.ДатаДок = ДатаВыдачиДокумента;
	Если КодВидаДокумента <> "10" Или ЗначениеЗаполнено(НаименованиеОрганаВыдавшегоДокумент) Тогда
		СведенияОДокументеУдостоверяющемЛичность.ВыдДок = НаименованиеОрганаВыдавшегоДокумент;
	КонецЕсли;
	Если КодВидаДокумента <> "10" Или ЗначениеЗаполнено(КодПодразделенияОрганаВыдавшегоДокумент) Тогда
		СведенияОДокументеУдостоверяющемЛичность.КодВыдДок = КодПодразделенияОрганаВыдавшегоДокумент;
	КонецЕсли;
	Если КодВидаДокумента = "22" Тогда
		СведенияОДокументеУдостоверяющемЛичность.expDate = ДатаИстеченияСрокаДействияДокумента;
	КонецЕсли;
	
	Возврат СведенияОДокументеУдостоверяющемЛичность;
	
КонецФункции

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

// Возвращаемое значение:
//   Структура:
//   * ИмяФайла - Строка
//   * ТипФайла - Строка
//   * ДвоичныеДанные - ДвоичныеДанные
//
Функция ОписаниеФайла()
	
	ОписаниеФайла = Новый Структура;
	ОписаниеФайла.Вставить("ИмяФайла", "");
	ОписаниеФайла.Вставить("ТипФайла", "");
	ОписаниеФайла.Вставить("ДвоичныеДанные");
	ОписаниеФайла.Вставить("ОписаниеОшибки", "");
	
	Возврат ОписаниеФайла;
	
КонецФункции

// Параметры:
//  ДоверенностьXML - Строка
//
Функция ПрочитатьИмяФайлаДоверенности(Знач ДоверенностьXML, Знач ДляНалоговыхОрганов)
	
	ИмяФайлаДоверенности = "";
	ОписаниеОшибки = "";
		
	Доверенность = ДоверенностьXDTO(ДоверенностьXML);
	
	ИдентификаторФайла = Доверенность.ИдФайл;
	Если ДляНалоговыхОрганов Тогда
		ИдентификаторФайла = "";
		Если Доверенность.ИдФайлНО = Неопределено Тогда
			ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Доверенность %1 не предназначена для представления в налоговые органы.'"), ИдентификаторФайла);
		Иначе
			ИдентификаторФайла = Доверенность.ИдФайлНО;
		КонецЕсли;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
		ИмяФайлаДоверенности = ИдентификаторФайла + ".xml";
	КонецЕсли;
	
	Результат = Новый Структура;
	Результат.Вставить("ИмяФайлаДоверенности", ИмяФайлаДоверенности);
	Результат.Вставить("ОписаниеОшибки", ОписаниеОшибки);
	
	Возврат Результат;
	
КонецФункции

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

		Доверенность = ДоверенностьXDTO(ДоверенностьXML);
		
		Если Доверенность.Документ.Передов = Неопределено Тогда
			ВывестиДоверенность(ТабличныйДокумент, Макет, Доверенность.Документ.Довер);
		Иначе
			ВывестиПередоверие(ТабличныйДокумент, Макет, Доверенность.Документ.Передов);
		КонецЕсли;
		
		Штампы = ЭлектроннаяПодпись.ШтампыВизуализацииЭлектронныхПодписей(ФайлДоверенности);
	
		ЭлектроннаяПодпись.ДобавитьШтампыВТабличныйДокумент(ТабличныйДокумент, Штампы);
		
	КонецЦикла;
	
	ТабличныйДокумент.ТолькоПросмотр = Истина;
	
	Возврат ТабличныйДокумент;
	
КонецФункции

Функция ДоверенностьXDTO(Знач ДоверенностьXML) Экспорт
	
	ДоверенностьXML = СтрЗаменить(ДоверенностьXML, """" + ЦелевоеПространствоИмен() + """",
		"""" + ИдентификаторСхемыМЧД() + """");
		
	ЧтениеXML = Новый ЧтениеXML();
	ЧтениеXML.УстановитьСтроку(ДоверенностьXML);
	ЧтениеXML.Прочитать();
	ДоверенностьXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ДоверенностьТип"));
	ЧтениеXML.Закрыть();
	
	Возврат ДоверенностьXDTO;
	
КонецФункции

Функция НаименованиеДокумента(КодВидаДокумента)
	
	ВидыДокументов = МашиночитаемыеДоверенностиФНССлужебный.ВидыДокументовУдостоверяющихЛичность();

	Для Каждого ВидДокумента Из ВидыДокументов.НайтиСтроки(Новый Структура("Код", КодВидаДокумента)) Цикл
		Возврат ВидДокумента.Наименование;
	КонецЦикла;
	
	Возврат НСтр("ru = 'Документ'");
	
КонецФункции

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

	Возврат Параметры;
	
КонецФункции

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

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

	Возврат Параметры;
	
КонецФункции

Функция РеквизитыФизическогоЛица(СведенияОФизическомЛице)
	
	Пол = СведенияОФизическомЛице.Пол;
	ПризнакНаличияГражданства = СведенияОФизическомЛице.ПрГражд;
	НомерЗаписиЕдиногоРегистраНаселения = СведенияОФизическомЛице.НомЕРН;
	Если ЗначениеЗаполнено(СведенияОФизическомЛице.ДатаРожд) Тогда
		ДатаРождения = Дата(СведенияОФизическомЛице.ДатаРожд);
	КонецЕсли;
	МестоРождения = СведенияОФизическомЛице.МестоРожд;
	Гражданство = Справочники.СтраныМира.НайтиПоКоду(СведенияОФизическомЛице.Гражданство);
	
	КонтактныйТелефон = СведенияОФизическомЛице.КонтактТлф;
	КонтактныйТелефонЗначение = КонтактнаяИнформацияПоПредставлению(КонтактныйТелефон, "Телефон");
	
	АдресЭлектроннойПочты = СведенияОФизическомЛице.АдрЭлПочт;
	АдресЭлектроннойПочтыЗначение = КонтактнаяИнформацияПоПредставлению(АдресЭлектроннойПочты, "АдресЭлектроннойПочты");
	
	ФИОДоверителя = СведенияОФизическомЛице.ФИО;
	АдресМестаЖительства = СведенияОФизическомЛице.АдрМЖ;
	СведенияОДокументеУдостоверяющемЛичность = СведенияОФизическомЛице.УдЛичнФЛ;	
	
	Фамилия = ФИОДоверителя.Фамилия;
	Имя = ФИОДоверителя.Имя;
	Отчество = ФИОДоверителя.Отчество;
	
	Если ЗначениеЗаполнено(Отчество) Тогда
		ФИО = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = '%1 %2 %3'"),
			Фамилия, Имя, Отчество);
	Иначе
		ФИО = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = '%1 %2'"),
			Фамилия, Имя);
	КонецЕсли;
	
	КодВидаДокумента = Неопределено;
	СерияИНомерДокумента = Неопределено;
	ДатаВыдачиДокумента = Неопределено;
	НаименованиеОрганаВыдавшегоДокумент = Неопределено;
	КодПодразделенияОрганаВыдавшегоДокумент = Неопределено;
	ДатаИстеченияСрокаДействияДокумента = Неопределено;
	ДокументУдостоверяющийЛичность = "";
	
	Если СведенияОДокументеУдостоверяющемЛичность <> Неопределено Тогда
		КодВидаДокумента = СведенияОДокументеУдостоверяющемЛичность.КодВидДок;
		СерияИНомерДокумента = СведенияОДокументеУдостоверяющемЛичность.СерНомДок;
		ДатаВыдачиДокумента = Дата(СведенияОДокументеУдостоверяющемЛичность.ДатаДок);
		НаименованиеОрганаВыдавшегоДокумент = СведенияОДокументеУдостоверяющемЛичность.ВыдДок;
		КодПодразделенияОрганаВыдавшегоДокумент = СведенияОДокументеУдостоверяющемЛичность.КодВыдДок;
		ДатаИстеченияСрокаДействияДокумента = ?(СведенияОДокументеУдостоверяющемЛичность.expDate = Неопределено,
			'00010101', Дата(СведенияОДокументеУдостоверяющемЛичность.expDate));
	
		РеквизитыДокумента = Новый Массив;
		РеквизитыДокумента.Добавить(НаименованиеДокумента(КодВидаДокумента));
		РеквизитыДокумента.Добавить(СерияИНомерДокумента);
		РеквизитыДокумента.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'выдан %1'"),  Формат(Дата(ДатаВыдачиДокумента), "ДЛФ=D;")));
		Если ЗначениеЗаполнено(НаименованиеОрганаВыдавшегоДокумент) Тогда
			РеквизитыДокумента.Добавить(НаименованиеОрганаВыдавшегоДокумент);
		КонецЕсли;
		Если ЗначениеЗаполнено(КодПодразделенияОрганаВыдавшегоДокумент) Тогда
			РеквизитыДокумента.Добавить("(" + КодПодразделенияОрганаВыдавшегоДокумент + ")");
		КонецЕсли;
		Если ЗначениеЗаполнено(ДатаИстеченияСрокаДействияДокумента) Тогда
			РеквизитыДокумента.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'действителен до %1'"), Формат(Дата(ДатаИстеченияСрокаДействияДокумента), "ДЛФ=D;")));
		КонецЕсли;
	
		ДокументУдостоверяющийЛичность = СтрСоединить(РеквизитыДокумента, " ");
	КонецЕсли;
	
	АдресРегистрации = "";
	АдресРегистрацииЗначение = "";
	
	Если АдресМестаЖительства <> Неопределено Тогда
		АдресРегистрации = ПредставленияАдреса(АдресМестаЖительства);
		АдресРегистрацииЗначение = КонтактнаяИнформацияПоПредставлению(АдресРегистрации, "Адрес");
	КонецЕсли;
	
	Параметры = Новый Структура;

	Параметры.Вставить("Пол", Пол);
	Параметры.Вставить("ПризнакНаличияГражданства", ПризнакНаличияГражданства);
	Параметры.Вставить("НомерЗаписиЕдиногоРегистраНаселения", НомерЗаписиЕдиногоРегистраНаселения);
	Параметры.Вставить("ДатаРождения", ДатаРождения);
	Параметры.Вставить("МестоРождения", МестоРождения);
	Параметры.Вставить("Гражданство", Гражданство);
	Параметры.Вставить("КонтактныйТелефон", КонтактныйТелефон);
	Параметры.Вставить("Телефон", КонтактныйТелефон);
	Параметры.Вставить("ТелефонЗначение", КонтактныйТелефонЗначение);
	Параметры.Вставить("АдресЭлектроннойПочты", АдресЭлектроннойПочты);
	Параметры.Вставить("ЭлектроннаяПочта", АдресЭлектроннойПочты);
	Параметры.Вставить("ЭлектроннаяПочтаЗначение", АдресЭлектроннойПочтыЗначение);
	Параметры.Вставить("АдресРегистрации", АдресРегистрации);
	Параметры.Вставить("АдресРегистрацииЗначение", АдресРегистрацииЗначение);

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

Функция РеквизитыИндивидуальногоПредпринимателя(СведенияОбИндивидуальномПредпринимателе)
	
	ОГРНИП = СведенияОбИндивидуальномПредпринимателе.ОГРНИП;
	ИНН = СведенияОбИндивидуальномПредпринимателе.ИННФЛ;
	СНИЛС = СведенияОбИндивидуальномПредпринимателе.СНИЛС;
	СведенияОФизическомЛице = СведенияОбИндивидуальномПредпринимателе.СведФЛ;
	
	РеквизитыФизическогоЛица = РеквизитыФизическогоЛица(СведенияОФизическомЛице);
	
	Параметры = Новый Структура;
	Параметры.Вставить("ОГРН", ОГРНИП);
	Параметры.Вставить("ИНН", ИНН);
	Параметры.Вставить("СНИЛС", СНИЛС);
	
	Параметры.Вставить("ИННФЛ", ИНН);
	Параметры.Вставить("СтраховойНомерПФР", СНИЛС);	
	
	Для Каждого Реквизит Из РеквизитыФизическогоЛица Цикл
		Параметры.Вставить(Реквизит.Ключ, Реквизит.Значение);
	КонецЦикла;
	
	НаименованиеПолное = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'ИП %1'"), Параметры.ФИО);
	Параметры.Вставить("НаименованиеПолное", НаименованиеПолное);
	
	Возврат Параметры;
	
КонецФункции

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

Функция РеквизитыНотариальногоУдостоверения(СведенияОНотариальномУдостоверении)
	
	ДолжностьНотариуса = СведенияОНотариальномУдостоверении.СвНотДейств.Должность;
	РегистрационныйНомерНотариуса = СведенияОНотариальномУдостоверении.СвНотДейств.РегНомНот;
	ФамилияНотариуса = СведенияОНотариальномУдостоверении.СвНотДейств.ФИОНотДейств.Фамилия;
	ИмяНотариуса = СведенияОНотариальномУдостоверении.СвНотДейств.ФИОНотДейств.Имя;
	ОтчествоНотариуса = СведенияОНотариальномУдостоверении.СвНотДейств.ФИОНотДейств.Отчество;
	ДополнительныеСведенияНотариуса = СведенияОНотариальномУдостоверении.ДопСвНотДовер;
	ИныеСведенияУдостоверительнойНадписи = СведенияОНотариальномУдостоверении.ИнСвУдНадпис;
	
	ФИОНотариуса =  СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		НСтр("ru = '%1 %2 %3'"),
		ФамилияНотариуса, ИмяНотариуса, ОтчествоНотариуса);
	
	МестоСовершения = СведенияОНотариальномУдостоверении.МестоДовер;
	
	ДолжностьВРИОНотариуса = "";
	РегистрационныйНомерВРИОНотариуса = "";
	ФИОВРИОНотариуса = "";
	
	Если СведенияОНотариальномУдостоверении.ВриоНот <> Неопределено Тогда
		ДолжностьВРИОНотариуса = СведенияОНотариальномУдостоверении.ВриоНот.Должность;
		РегистрационныйНомерВРИОНотариуса = СведенияОНотариальномУдостоверении.ВриоНот.РегНомНот;
		ФамилияВРИОНотариуса = СведенияОНотариальномУдостоверении.ВриоНот.ФИОВриоНот.Фамилия;
		ИмяВРИОНотариуса = СведенияОНотариальномУдостоверении.ВриоНот.ФИОВриоНот.Имя;
		ОтчествоВРИОНотариуса = СведенияОНотариальномУдостоверении.ВриоНот.ФИОВриоНот.Отчество;
		
		ФИОВРИОНотариуса =  СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = '%1 %2 %3'"),
			ФамилияВРИОНотариуса, ИмяВРИОНотариуса, ОтчествоВРИОНотариуса);
	КонецЕсли;
	
	Параметры = Новый Структура;
	Параметры.Вставить("ДолжностьНотариуса", ДолжностьНотариуса);
	Параметры.Вставить("РегистрационныйНомерНотариуса", РегистрационныйНомерНотариуса);
	Параметры.Вставить("ФИОНотариуса", ФИОНотариуса);
	Параметры.Вставить("МестоСовершения", МестоСовершения);
	Параметры.Вставить("ДолжностьВРИОНотариуса", ДолжностьВРИОНотариуса);
	Параметры.Вставить("РегистрационныйНомерВРИОНотариуса", РегистрационныйНомерВРИОНотариуса);
	Параметры.Вставить("ФИОВРИОНотариуса", ФИОВРИОНотариуса);
	Параметры.Вставить("ДополнительныеСведенияНотариуса", ДополнительныеСведенияНотариуса);
	Параметры.Вставить("ИныеСведенияУдостоверительнойНадписи", ИныеСведенияУдостоверительнойНадписи);
	
	Возврат Параметры;
	
КонецФункции

Функция ПредставленияАдреса(СведенияОбАдресе)
	
	Если СведенияОбАдресе = Неопределено Тогда
		Возврат "";
	КонецЕсли;
	
	ФИАСАдресВРоссийскойФедерации = СведенияОбАдресе.ФИАСАдрРФ;
	АдресВРоссийскойФедерации = СведенияОбАдресе.АдрРФ;
	
	Если ФИАСАдресВРоссийскойФедерации <> Неопределено Тогда
		Возврат ФИАСАдресВРоссийскойФедерации;
	КонецЕсли;
	
	Возврат АдресВРоссийскойФедерации;
	
КонецФункции

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

Процедура ВывестиОтступ(ТабличныйДокумент, Макет)
	
	ВывестиОбласть(ТабличныйДокумент, Макет, "Отступ");
	
КонецПроцедуры

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

	ПодписиФайлов = ПодписиФайлов(ЗагруженныеФайлы, ФайлыПодписей);
	СгруппироватьФайлыПоДоверенностям(ФайлыДоверенностей, ДругиеФайлы);
	
	Результат.ФайлыДоверенностей = ФайлыДоверенностей;
	Результат.ФайлыПодписей = ФайлыПодписей;
	Результат.ФайлыZIP = ФайлыZIP;
	Результат.ДругиеФайлы = ДругиеФайлы;
	Результат.ПодписиФайлов = ПодписиФайлов;
		
	Возврат Результат;
	
КонецФункции

// Создает новые либо перезаполняет существующие элементы справочника МашиночитаемыеДоверенности данными из файлов.
//
// Параметры:
//  ЗагруженныеФайлы - Массив из Структура - файлы доверенностей и подписей, архивы zip:
//   * ИмяФайла - Строка - имя файла без пути к нему,
//   * Хранение - Строка - адрес двоичных данных файла во временном хранилище.
//                   - Структура - уже разобранные файлы доверенностей и подписей:
//   * ФайлыДоверенностей - Соответствие
//   * ПодписиФайлов      - Соответствие
//   
//  Замещать - Булево - при замещении выполняется перезаполнение элемента, все имеющиеся присоединенные файлы при этом
//   помечаются на удаление.
//
Функция ЗагрузитьДоверенностиВИнформационнуюБазу(ЗагруженныеФайлы, Замещать = Ложь) Экспорт
	
	Если ТипЗнч(ЗагруженныеФайлы) = Тип("Структура") Тогда
		Результат = ЗагруженныеФайлы;
	Иначе
		Результат = ФайлыДоверенностейИПодписей(ЗагруженныеФайлы);
	КонецЕсли;
	
	ФайлыДоверенностей = Результат.ФайлыДоверенностей;
	ПодписиФайлов = Результат.ПодписиФайлов;
	
	Доверенности = Новый Массив;
	ТекстыОшибок = Новый Массив;
	
	Если ФайлыДоверенностей.Количество() = 0 Тогда
		ТекстыОшибок.Добавить(НСтр("ru = 'Не удалось загрузить доверенность - неверный формат.
			|В этот список возможна загрузка доверенностей в формате 003.'"));
	КонецЕсли;
	
	КоличествоПропущенных = 0;
	КоличествоПрочитанных = 0;
	
	Для Каждого Элемент Из ФайлыДоверенностей Цикл
		ЗагруженныйФайл = Элемент.Ключ;
		ПрисоединенныеФайлы = Элемент.Значение;
		ПодписиФайла = ПодписиФайлов[ЗагруженныйФайл];
		
		ИмяФайла = ЗагруженныйФайл.ИмяФайла;
		АдресФайла = ЗагруженныйФайл.Хранение;
		
		ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла);
		ДоверенностьXML = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные);
		
		Попытка
			ОписаниеДоверенности = ДоверенностьXDTO(ДоверенностьXML);
			КоличествоПрочитанных = КоличествоПрочитанных + 1;
		Исключение
			ИнформацияОбОшибке = ИнформацияОбОшибке();
			ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Не удалось прочитать файл %1 по причине:
					|%2'"),
				ИмяФайла,
				ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
			
			ЗаписьЖурналаРегистрации(МашиночитаемыеДоверенностиФНССлужебный.ИмяСобытияЖурналаРегистрации(),
				УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
				
			КоличествоПропущенных = КоличествоПропущенных + 1;
			Продолжить;
		КонецПопытки;
		
		Если ОписаниеДоверенности.Документ.Передов = Неопределено Тогда
			ЕдиныйРегистрационныйНомер = ОписаниеДоверенности.Документ.Довер.СвДов.НомДовер;
		Иначе
			ЕдиныйРегистрационныйНомер = ОписаниеДоверенности.Документ.Передов.СвПереДовер.НомДовер;
		КонецЕсли;
		
		//@skip-check query-in-loop - штучные запросы в количестве загружаемых доверенностей
		Доверенность = НайтиДоверенность(ЕдиныйРегистрационныйНомер);
		
		Если Доверенность = Неопределено Тогда
			Объект = СоздатьЭлемент();
			Доверенность = ПолучитьСсылку(Новый УникальныйИдентификатор);
			Объект.УстановитьСсылкуНового(Доверенность);
		Иначе
			Если Не Замещать Тогда
				Доверенности.Добавить(Доверенность);
				Продолжить;
			КонецЕсли;
			
			Объект = Доверенность.ПолучитьОбъект();
			
			Если ЗначениеЗаполнено(Объект.ФайлДоверенности) Тогда
				ФайлДоверенностиОбъект = Объект.ФайлДоверенности.ПолучитьОбъект();
				ФайлДоверенностиОбъект.УстановитьПометкуУдаления(Истина);
				Объект.ФайлДоверенности = Неопределено;
			КонецЕсли;
			
			ОбъектМетаданных = Доверенность.Метаданные();
			
			Для Каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл
				Объект[Реквизит.Имя] = Неопределено;
			КонецЦикла;
			
			Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл
				Объект[ТабличнаяЧасть.Имя].Очистить();
			КонецЦикла;
			
			Объект.Наименование = "";
		КонецЕсли;
		
		Доверенности.Добавить(Доверенность);
		ЭтоПередоверие = ОписаниеДоверенности.Документ.Довер = Неопределено;
		
		Если ЭтоПередоверие Тогда
			//@skip-check query-in-loop - штучные запросы в количестве загружаемых доверенностей
			ЗаполнитьПередовериеИзОбъектаXDTO(Объект, ОписаниеДоверенности);
		Иначе
			ЗаполнитьДоверенность(Объект, ОписаниеДоверенности);
		КонецЕсли;
		
		Файл = Новый Файл(ИмяФайла);

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

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

Функция СвойстваДоверенностейИзФайлов(ЗагруженныеФайлы, УникальныйИдентификатор) Экспорт
	
	ФайлыДоверенностейИПодписей = ФайлыДоверенностейИПодписей(ЗагруженныеФайлы, УникальныйИдентификатор);

	Доверенности = Новый Массив;
	ТекстыОшибок = Новый Массив;
	ДругиеФайлы = Новый Соответствие;

	КоличествоПропущенных = 0;
	КоличествоПрочитанных = 0;
	
	Для Каждого Элемент Из ФайлыДоверенностейИПодписей.ФайлыДоверенностей Цикл
		
		ЗагруженныйФайл = Элемент.Ключ;
		ИмяФайла = ЗагруженныйФайл.ИмяФайла;
		АдресФайла = ЗагруженныйФайл.Хранение;
				
		ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла);
		ДоверенностьXML = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные);
		
		Попытка
			ОписаниеДоверенности = ДоверенностьXDTO(ДоверенностьXML);
		Исключение
			ИнформацияОбОшибке = ИнформацияОбОшибке();
			ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Не удалось прочитать файл %1 по причине:
					|%2'"),
				ИмяФайла,
				ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
			ТекстыОшибок.Добавить(ТекстОшибки);
			Продолжить;
		КонецПопытки;
		
		Если ОписаниеДоверенности.Документ.Передов = Неопределено Тогда
			ЕдиныйРегистрационныйНомер = ОписаниеДоверенности.Документ.Довер.СвДов.НомДовер;
		Иначе
			ЕдиныйРегистрационныйНомер = ОписаниеДоверенности.Документ.Передов.СвПереДовер.НомДовер;
		КонецЕсли;
		
		//@skip-check query-in-loop - штучные запросы в количестве загружаемых доверенностей
		Доверенность = НайтиДоверенность(ЕдиныйРегистрационныйНомер);
		ИННПредставителей = Новый Массив;
		
		Если Доверенность = Неопределено Тогда
			
			Объект = СоздатьЭлемент();
			Если ОписаниеДоверенности.Документ.Передов = Неопределено Тогда
				ЗаполнитьДоверенность(Объект, ОписаниеДоверенности);
			Иначе
				//@skip-check query-in-loop - штучные запросы в количестве загружаемых доверенностей
				ЗаполнитьПередовериеИзОбъектаXDTO(Объект, ОписаниеДоверенности);
			КонецЕсли;
			
			Доверенность = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = '%1 - %2 (будет загружена)'"),
				АвтоНаименование(Объект), ЕдиныйРегистрационныйНомер);
				
			МассивПредставителей = Новый Массив;
			Представители = Объект.Представители.Выгрузить();
			
			Найдено = Представители.НайтиСтроки(Новый Структура("ИдентификаторРодителя",
				Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
			
			Для Каждого СтрокаОрганизация Из Найдено Цикл

				РеквизитыОрганизации = СтрокаОрганизация.ПредставительРеквизиты.Получить();

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

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

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

Процедура СгруппироватьФайлыПоДоверенностям(ФайлыДоверенностей, ДругиеФайлы)

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

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

Процедура ДобавитьПодписи(Файл, ПодписиФайла, Доверенность)
	
	Для Каждого ПодписьФайла Из ПодписиФайла Цикл
		ИмяФайла = ПодписьФайла.ИмяФайла;
		АдресФайла = ПодписьФайла.Хранение;
		
		ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла);
		ПодписьВКодировкеDER = ЭлектроннаяПодпись.ПодписьВКодировкеDER(ДвоичныеДанные);
		СвойстваПодписи = ЭлектроннаяПодпись.СвойстваПодписи(ПодписьВКодировкеDER);
		
		Если СвойстваПодписи.Успех <> Ложь Тогда
			НовыеСвойстваПодписи = ЭлектроннаяПодписьКлиентСервер.НовыеСвойстваПодписи();
			ЗаполнитьЗначенияСвойств(НовыеСвойстваПодписи, СвойстваПодписи);
			НовыеСвойстваПодписи.Подпись = ПодписьВКодировкеDER;
			НовыеСвойстваПодписи.ТребуетсяПроверка = Истина;
			ЭлектроннаяПодпись.ДобавитьПодпись(Файл, НовыеСвойстваПодписи);
		Иначе
			ДобавитьПрисоединенныйФайл(Доверенность, ИмяФайла, АдресФайла);
		КонецЕсли;
	КонецЦикла;
		
КонецПроцедуры

Процедура ДобавитьДополнительныеФайлы(Доверенность, ДополнительныеФайлы, ПодписиФайлов)
	
	Для Каждого ЗагруженныйФайл Из ДополнительныеФайлы Цикл
		ИмяФайла = ЗагруженныйФайл.ИмяФайла;
		АдресФайла = ЗагруженныйФайл.Хранение;
		
		ПрисоединенныйФайл = ДобавитьПрисоединенныйФайл(Доверенность, ИмяФайла, АдресФайла);
		
		ПодписиФайла = ПодписиФайлов[ЗагруженныйФайл];
		Если ПодписиФайла = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		ДобавитьПодписи(ПрисоединенныйФайл, ПодписиФайла, Доверенность);
	КонецЦикла;
	
КонецПроцедуры

Функция ЭтоФайлПодписи(ИмяФайла)
	
	Файл = Новый Файл(ИмяФайла);
	Возврат Файл.Расширение = ".p7s" Или Файл.Расширение = ".sig";
	
КонецФункции

Функция ДобавитьПрисоединенныйФайл(Владелец, ИмяФайла, АдресФайла)
	
	Файл = Новый Файл(ИмяФайла);

	ПараметрыДобавленияФайла = РаботаСФайлами.ПараметрыДобавленияФайла();
	ПараметрыДобавленияФайла.ВладелецФайлов = Владелец;
	ПараметрыДобавленияФайла.ИмяБезРасширения = Файл.ИмяБезРасширения;
	ПараметрыДобавленияФайла.РасширениеБезТочки = Сред(Файл.Расширение, 2);
	
	Возврат РаботаСФайлами.ДобавитьФайл(ПараметрыДобавленияФайла, АдресФайла);
	
КонецФункции

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

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

Функция ВидУчастникаРоссийскаяОрганизация()
	
	Возврат "РоссийскаяОрганизация";
	
КонецФункции

Функция ВидУчастникаФилиал()
	
	Возврат "Филиал";
	
КонецФункции

Функция ВидУчастникаИндивидуальныйПредприниматель()
	
	Возврат "ИндивидуальныйПредприниматель";
	
КонецФункции

Функция ВидУчастникаИностраннаяОрганизация()
	
	Возврат "ИностраннаяОрганизация";
	
КонецФункции

Функция ВидУчастникаДолжностноеЛицо()
	
	Возврат "ДолжностноеЛицо";
	
КонецФункции

Функция ТипЭлементаФизическоеЛицо()
	
	Возврат "ФизическоеЛицо";
	
КонецФункции

Функция ТипЭлементаОрганизация()
	
	Возврат "Организация";
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

	Доверитель = Объект.Доверители.Добавить();
	Доверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника, Новый СжатиеДанных(9));
	Доверитель.Идентификатор = Новый УникальныйИдентификатор;
	Доверитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
	
	Возврат Доверитель;
	
КонецФункции

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

	Представитель = Объект.Представители.Добавить();
	Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника, Новый СжатиеДанных(9));
	Представитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
	Представитель.Идентификатор = Новый УникальныйИдентификатор;	
	
КонецПроцедуры

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

Функция АвтоНаименование(Объект) Экспорт
	
	НаименованиеДоверитель = "";
	НаименованиеОрганизацияДоверитель = "";
	НаименованиеПредставитель = "";
	
	Если ЗначениеЗаполнено(Объект.РодительскаяДоверенность) Или ЗначениеЗаполнено(
		Объект.РодительскаяДоверенностьНомер) Тогда

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

			Если Доверители.Количество() > 0 Тогда

				РеквизитыДоверителя = Доверители[0].ДоверительРеквизиты.Получить();
				ЭтоФизическоеЛицо = РеквизитыДоверителя.ЭтоФизическоеЛицо;

				Если Не ЭтоФизическоеЛицо Тогда
					НаименованиеОрганизацияДоверитель = ?(ЗначениеЗаполнено(РеквизитыДоверителя.НаименованиеСокращенное),
						РеквизитыДоверителя.НаименованиеСокращенное, РеквизитыДоверителя.НаименованиеПолное);
				Иначе
					НаименованиеОрганизацияДоверитель = СтрШаблон("%1 %2 %3", РеквизитыДоверителя.Фамилия,
						РеквизитыДоверителя.Имя, РеквизитыДоверителя.Отчество);
				КонецЕсли;

			КонецЕсли;
			
		КонецЕсли;
	КонецЕсли;
	
	Для Каждого Строка Из Объект.Доверители Цикл

		РеквизитыДоверителя = Строка.ДоверительРеквизиты.Получить();
		ЭтоФизическоеЛицо = РеквизитыДоверителя.ЭтоФизическоеЛицо;

		Если Не ЭтоФизическоеЛицо И НаименованиеОрганизацияДоверитель = "" Тогда
			НаименованиеОрганизацияДоверитель = ?(ЗначениеЗаполнено(РеквизитыДоверителя.НаименованиеСокращенное),
				РеквизитыДоверителя.НаименованиеСокращенное, РеквизитыДоверителя.НаименованиеПолное);
		ИначеЕсли ЭтоФизическоеЛицо И НаименованиеДоверитель = "" Тогда
			НаименованиеДоверитель = ПросклонятьФИО(РеквизитыДоверителя.Фамилия, РеквизитыДоверителя.Имя,
				РеквизитыДоверителя.Отчество, РеквизитыДоверителя.Пол, 2);
		КонецЕсли;

	КонецЦикла;
	
	Для Каждого Строка Из Объект.Представители Цикл
		
		РеквизитыПредставителя = Строка.ПредставительРеквизиты.Получить();
		
		Если НаименованиеПредставитель = "" Тогда
			Если Не РеквизитыПредставителя.ЭтоФизическоеЛицо Тогда
				НаименованиеПредставитель = ?(ЗначениеЗаполнено(РеквизитыПредставителя.НаименованиеСокращенное), 
					РеквизитыПредставителя.НаименованиеСокращенное, РеквизитыПредставителя.НаименованиеПолное);
			Иначе
				НаименованиеПредставитель = ПросклонятьФИО(РеквизитыПредставителя.Фамилия, РеквизитыПредставителя.Имя,
					РеквизитыПредставителя.Отчество, РеквизитыПредставителя.Пол, 3);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		НСтр("ru='%1 от %2 %3'"), НаименованиеПредставитель, НаименованиеДоверитель,
		?(ПустаяСтрока(НаименованиеОрганизацияДоверитель), "", "(" + НаименованиеОрганизацияДоверитель + ")"));
	
	Если ПустаяСтрока(Наименование) Тогда
		Наименование = НСтр("ru='Новая доверенность'");
	КонецЕсли;
	
	Возврат Наименование;
	
КонецФункции

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

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

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

Функция НайтиДоверенности(НомераДоверенностей)
	
	НомераДляПоиска = Новый Массив;
	
	Для Каждого НомерДоверенности Из НомераДоверенностей Цикл
		НомераДляПоиска.Добавить(НРег(НомерДоверенности));
		НомераДляПоиска.Добавить(ВРег(НомерДоверенности));
	КонецЦикла;
	
	ТекстЗапроса =
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	МашиночитаемыеДоверенности.Ссылка,
	|	МашиночитаемыеДоверенности.НомерДоверенности
	|ИЗ
	|	Справочник.МашиночитаемыеДоверенности КАК МашиночитаемыеДоверенности
	|ГДЕ
	|	МашиночитаемыеДоверенности.НомерДоверенности В (&НомераДляПоиска)
	|	И НЕ МашиночитаемыеДоверенности.ПометкаУдаления";
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.УстановитьПараметр("НомераДляПоиска", НомераДляПоиска);
	
	Выборка = Запрос.Выполнить().Выбрать();
	НайденныеДоверенности = Новый Соответствие;
	
	Пока Выборка.Следующий() Цикл
		НайденныеДоверенности.Вставить(НРег(Выборка.НомерДоверенности), Выборка.Ссылка);
		НайденныеДоверенности.Вставить(ВРег(Выборка.НомерДоверенности), Выборка.Ссылка);
	КонецЦикла;
	
	Результат = Новый Соответствие;
	
	Для Каждого НомерДоверенности Из НомераДоверенностей Цикл
		Если НайденныеДоверенности[НомерДоверенности] <> Неопределено Тогда
			Результат.Вставить(НомерДоверенности, НайденныеДоверенности[НомерДоверенности]);
		КонецЕсли;
	КонецЦикла;
	
	Возврат Результат
	
КонецФункции

Функция Передоверие(Объект)
	
	СведенияОПервоначальнойДоверенности = СведенияОПервоначальнойДоверенности(Объект.РодительскаяДоверенность);
	СведенияОДоверенностиОснованииПередоверия = СведенияОДоверенностиОснованииПередоверия(Объект.РодительскаяДоверенность);
	ПризнакНаличияДоверенностиВыданнойВПорядкеПередоверия = ?(СведенияОДоверенностиОснованииПередоверия = Неопределено, "0", "1");
	СведенияОДоверенности = СведенияОДоверенности(Объект);
	СведенияОЛицахПередавшихПолномочия = СведенияОЛицахПередавшихПолномочия(Объект);
	СведенияОЛицахПолучившихПолномочия = СведенияОПредставителях(Объект);
	СведенияОПередаваемыхПолномочиях = СведенияОПолномочияхПредставителей(Объект);
	
	Передоверие = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ПередовТип"));
	Передоверие.ПрНалПередов = ПризнакНаличияДоверенностиВыданнойВПорядкеПередоверия;
	Передоверие.СвПервДовер = СведенияОПервоначальнойДоверенности;
	Если СведенияОДоверенностиОснованииПередоверия <> Неопределено Тогда
		Передоверие.СвПередов = СведенияОДоверенностиОснованииПередоверия;
	КонецЕсли;
	Передоверие.СвПереДовер = СведенияОДоверенности;
	Для Каждого СведенияОЛицеПередавшемПолномочия Из СведенияОЛицахПередавшихПолномочия Цикл
		Передоверие.СвПередПолн.Добавить(СведенияОЛицеПередавшемПолномочия);
	КонецЦикла;
	Для Каждого СведенияОЛицеПолучившемПолномочия Из СведенияОЛицахПолучившихПолномочия Цикл
		Передоверие.СвПолучПолн.Добавить(СведенияОЛицеПолучившемПолномочия);
	КонецЦикла;
	Передоверие.СвПолн = СведенияОПередаваемыхПолномочиях;
	
	Возврат Передоверие;
	
КонецФункции

Функция СведенияОПервоначальнойДоверенности(ДоверенностьСсылка) // СвПервДоверТип
	
	ДоверенностьXDTO = ДоверенностьXDTOПоСсылке(ДоверенностьСсылка);
	
	Если ДоверенностьXDTO = Неопределено Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	ПризнакДоверенности = "1";
	ФормаДоверенности = "1";
	ЭтоПервичнаяДоверенность = ДоверенностьXDTO.Документ.Передов = Неопределено;
	
	Если ЭтоПервичнаяДоверенность Тогда
		Доверенность = ДоверенностьXDTO.Документ.Довер;
		
		СведенияОДоверенности = Доверенность.СвДов;
		СведенияОДоверителях = Доверенность.СвДоверит;

		ЕдиныйРегистрационныйНомерПервоначальнойДоверенности = СведенияОДоверенности.НомДовер;
		ДатаВыдачиДоверенности = Дата(СведенияОДоверенности.ДатаВыдДовер);
		СрокДействияДоверенности = Дата(СведенияОДоверенности.СрокДейст);
		ВнутреннийНомерПервоначальнойДоверенности = СведенияОДоверенности.ВнНомДовер;

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

Функция СведенияОДоверенностиОснованииПередоверия(ДоверенностьСсылка)

	ДоверенностьXDTO = ДоверенностьXDTOПоСсылке(ДоверенностьСсылка);
	
	Если ДоверенностьXDTO = Неопределено Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	ПризнакДоверенности = "2";
	ФормаДоверенности = "1"; 
	ВнутреннийНомерДоверенностиОснования = "";
	ЕдиныйРегистрационныйНомерДоверенностиОснования = "";
	ЭтоПервичнаяДоверенность = ДоверенностьXDTO.Документ.Передов = Неопределено;
	
	Если ЭтоПервичнаяДоверенность Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	Передоверие = ДоверенностьXDTO.Документ.Передов;
	СведенияОДоверенности = Передоверие.СвПереДовер;

	ЕдиныйРегистрационныйНомерДоверенностиОснования = СведенияОДоверенности.НомДовер;
	ДатаВыдачиДоверенности = Дата(СведенияОДоверенности.ДатаВыдДовер);
	СрокДействияДоверенности = Дата(СведенияОДоверенности.СрокДейст);
	ВнутреннийНомерДоверенностиОснования = СведенияОДоверенности.ВнНомДовер;

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

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

Функция СведенияОЛицахПередавшихПолномочия(Доверенность)

	ДляНалоговыхОрганов = Доверенность.ДляНалоговыхОрганов;
	СведенияОЛицахПередавшихПолномочия = Новый Массив;
	
	ОписанияДоверителей = Доверенность.Доверители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", 
		Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
		
	Для Каждого ОписаниеДоверителя Из ОписанияДоверителей Цикл
		СведенияОЛицеПередавшемПолномочия = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "СвПередПолнТип"));	
		ЛицоПередавшееПолномочия = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ИдентификаторСхемыМЧД(), "ПередПолнТип"));	
		РеквизитыДоверителя = ОписаниеДоверителя.ДоверительРеквизиты.Получить();
		ОписанияЛицДоверителя = Доверенность.Доверители.НайтиСтроки(
			Новый Структура("ИдентификаторРодителя", ОписаниеДоверителя.Идентификатор));
		
		РеквизитыЛицДоверителя = Новый Массив;
		РеквизитыЛицУправляющихКомпаний = Новый Соответствие;
		Для Каждого ОписаниеЛицаДоверителя Из ОписанияЛицДоверителя Цикл
			РеквизитыЛицаДоверителя = ОписаниеЛицаДоверителя.ДоверительРеквизиты.Получить();
			Если РеквизитыЛицаДоверителя.ЭтоФизическоеЛицо Тогда
				РеквизитыЛицДоверителя.Добавить(РеквизитыЛицаДоверителя);
			Иначе
				РеквизитыЛицУправляющейКомпании = Новый Массив;
				ОписанияЛицУправляющейКомпании = Доверенность.Доверители.НайтиСтроки(
					Новый Структура("ИдентификаторРодителя", ОписаниеЛицаДоверителя.Идентификатор));
				РеквизитыЛицУправляющихКомпаний.Вставить(РеквизитыЛицаДоверителя, РеквизитыЛицУправляющейКомпании);
				Для Каждого ОписаниеЛицаУправляющейКомпании Из ОписанияЛицУправляющейКомпании Цикл
					РеквизитыЛицаУправляющейКомпании = ОписаниеЛицаУправляющейКомпании.ДоверительРеквизиты.Получить();
					РеквизитыЛицУправляющейКомпании.Добавить(РеквизитыЛицаУправляющейКомпании);
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
		
		ТипЛицаПередавшегоПолномочия = Неопределено;
		
		ДоверителемЯвляетсяФизическоеЛицо = РеквизитыДоверителя.ЭтоФизическоеЛицо;
		Если ДоверителемЯвляетсяФизическоеЛицо Тогда 
			ТипЛицаПередавшегоПолномочия = "3";
			СведенияОФизическомЛицеПередавшемПолномочия = СведенияОФизическомЛицеПередавшемПолномочия(РеквизитыДоверителя, ДляНалоговыхОрганов);
			ЛицоПередавшееПолномочия.ФЛПерПолн = СведенияОФизическомЛицеПередавшемПолномочия;
		Иначе
			Если РеквизитыДоверителя.ЭтоИностраннаяОрганизация Тогда
				ТипЛицаПередавшегоПолномочия = "5";
				СведенияОбИностранномЮридическомЛице = СведенияОДоверителеИностранногоЮридическогоЛица(РеквизитыДоверителя, РеквизитыЛицДоверителя, ДляНалоговыхОрганов);
				ЛицоПередавшееПолномочия.ИнПерПолн = СведенияОбИностранномЮридическомЛице;
			ИначеЕсли РеквизитыДоверителя.ЭтоИндивидуальныйПредприниматель Тогда
				ТипЛицаПередавшегоПолномочия = "2";
				СведенияОбИндивидуальномПредпринимателе = СведенияОбИндивидуальномПредпринимателе(РеквизитыДоверителя, РеквизитыЛицДоверителя, ДляНалоговыхОрганов);
				ЛицоПередавшееПолномочия.ИППерПолн = СведенияОбИндивидуальномПредпринимателе;
			ИначеЕсли РеквизитыДоверителя.ЭтоФилиал Тогда
				ТипЛицаПередавшегоПолномочия = "4";
				СведенияОФилиалеЮридическогоЛица = СведенияОФилиалеЮридическогоЛица(РеквизитыДоверителя, РеквизитыЛицУправляющихКомпаний, РеквизитыЛицДоверителя, ДляНалоговыхОрганов);
				ЛицоПередавшееПолномочия.ФилПерПолн = СведенияОФилиалеЮридическогоЛица;
			Иначе
				ТипЛицаПередавшегоПолномочия = "1";
				СведенияОДоверителеЮридическогоЛица = СведенияОДоверителеЮридическогоЛица(РеквизитыДоверителя, РеквизитыЛицУправляющихКомпаний, РеквизитыЛицДоверителя, ДляНалоговыхОрганов);
				ЛицоПередавшееПолномочия.РосОргПерПолн = СведенияОДоверителеЮридическогоЛица;
			КонецЕсли;
		КонецЕсли;
		
		Если ТипЛицаПередавшегоПолномочия <> Неопределено Тогда
			СведенияОЛицеПередавшемПолномочия.ТипПерПолн = ТипЛицаПередавшегоПолномочия;
			СведенияОЛицеПередавшемПолномочия.ПередПолн = ЛицоПередавшееПолномочия;
			СведенияОЛицахПередавшихПолномочия.Добавить(СведенияОЛицеПередавшемПолномочия);
		КонецЕсли;		
	
	КонецЦикла;
	
	Возврат СведенияОЛицахПередавшихПолномочия;

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

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

	ДанныеФайла = РаботаСФайлами.ДанныеФайла(ФайлДоверенности);
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла);
	ДоверенностьXML = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные);
	ДоверенностьXDTO = ДоверенностьXDTO(ДоверенностьXML);
	
	Возврат ДоверенностьXDTO;
	
КонецФункции

Функция СведенияОДоверителяхПервоначальнойДоверенности(СведенияОДоверителях) // СвДоверПервТип

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

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

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

Процедура ЗаполнитьПередовериеИзОбъектаXDTO(Объект, ОписаниеДоверенности)
	
	ВерсияФормата = ОписаниеДоверенности.ВерсФорм;
	ФлагОбязательностиЭлементов = ОписаниеДоверенности.ПрЭлФорм;
	ИныеСведения = ОписаниеДоверенности.ИнСвед;
	Документ = ОписаниеДоверенности.Документ;
	
	Передоверие = Документ.Передов;

	СведенияОПервоначальнойДоверенности = Передоверие.СвПервДовер;
	СведенияОДоверенностиОснованииПередоверия = Передоверие.СвПередов;
	СведенияОДоверенности = Передоверие.СвПереДовер;
	СведенияОЛицахПередавшихПолномочия = Передоверие.СвПередПолн;
	СведенияОЛицахПолучившихПолномочия = Передоверие.СвПолучПолн;
	СведенияОПередаваемыхПолномочиях = Передоверие.СвПолн;

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

			ОрганизацияДоверитель = ДобавитьОрганизациюДоверителя(Объект, Неопределено, СведенияОЮридическомЛице);

			ДобавитьДолжностноеЛицоДоверителя(Объект, ОрганизацияДоверитель,
				СведенияОДолжностномЛице);
		КонецЕсли;
		
	КонецЦикла;
	
	Для Каждого СведенияОПредставителе Из СведенияОЛицахПолучившихПолномочия Цикл
		ТипПредставителя = СведенияОПредставителе.ТипПред;
		Представитель = СведенияОПредставителе.Пред;
		
		Если ТипПредставителя = "1" Тогда
			СведенияОЮридическомЛице = Представитель.СведОрг;
			ДобавитьОрганизациюПредставителя(Объект, Неопределено, СведенияОЮридическомЛице);
		ИначеЕсли ТипПредставителя = "2" Тогда
			СведенияОбИндивидуальномПредпринимателе = Представитель.СведИП;
			ДобавитьИндивидуальногоПредпринимателяПредставителя(Объект, СведенияОбИндивидуальномПредпринимателе);
		ИначеЕсли ТипПредставителя = "3" Тогда
			СведенияОФизическомЛице = Представитель.СведФизЛ;
			ДобавитьДолжностноеЛицоПредставителя(Объект, Неопределено, СведенияОФизическомЛице);
		ИначеЕсли ТипПредставителя = "4" Тогда
			СведенияОФилиалеЮридическогоЛица = Представитель.СведФилиал;
			СведенияОФизическомЛицеФилиала = Представитель.СведФизЛ;
			Филиал = ДобавитьФилиалПредставителя(Объект, Неопределено, СведенияОФилиалеЮридическогоЛица);
			Если СведенияОФизическомЛицеФилиала <> Неопределено Тогда
				ДобавитьФизическоеЛицоПредставителя(Объект, Филиал.Идентификатор, СведенияОФизическомЛицеФилиала);
			КонецЕсли;
		ИначеЕсли ТипПредставителя = "5" Тогда
			СведенияОбИностранномЮридическомЛице = Представитель.СведИО;
			ДобавитьИностранноеЮридическоеЛицоПредставителя(Объект, СведенияОбИностранномЮридическомЛице);
		КонецЕсли;
	КонецЦикла;
	
	ТипПолномочия = СведенияОПередаваемыхПолномочиях.ТипПолн;
	ПризнакСовместногоОсуществленияПолномочий = СведенияОПередаваемыхПолномочиях.ПрСовмПолн;
	ПризнакУтратыПолномочийПриПередоверии = СведенияОПередаваемыхПолномочиях.ПрУтрПолн;
	СведенияОМашиночитаемыхПолномочиях = СведенияОПередаваемыхПолномочиях.МашПолн;
	ТекстовоеСодержаниеПолномочия = СведенияОПередаваемыхПолномочиях.ТекстПолн;
	
	Объект.СовместныеПолномочия = ПризнакСовместногоОсуществленияПолномочий = "2";
	Объект.ПолномочияУтрачиваютсяПриПередоверии = ПризнакУтратыПолномочийПриПередоверии = "2";
	
	Если ТипПолномочия = "0" Тогда
		Полномочие = Объект.Полномочия.Добавить();
		Полномочие.Наименование = ТекстовоеСодержаниеПолномочия;
	ИначеЕсли ТипПолномочия = "1" Тогда
		Для Каждого СведенияОМашиночитаемомПолномочии Из СведенияОМашиночитаемыхПолномочиях Цикл
			КодПолномочия = СведенияОМашиночитаемомПолномочии.КодПолн;
			НаименованиеПолномочия = СведенияОМашиночитаемомПолномочии.НаимПолн;
			
			Полномочие = Объект.Полномочия.Добавить();
			Полномочие.Наименование = НаименованиеПолномочия;
			Полномочие.Код = КодПолномочия;
			Полномочие.ИдентификаторПолномочия = Новый УникальныйИдентификатор;
			
			СведенияОбОграниченияхКПолномочию = СведенияОМашиночитаемомПолномочии.ОгрСвПолн;
			Для Каждого СведенияОбОграниченииКПолномочию Из СведенияОбОграниченияхКПолномочию Цикл
				КодОграничения = СведенияОбОграниченииКПолномочию.КодОгр;
				НаименованиеОграничения = СведенияОбОграниченииКПолномочию.НаимОгр;
				НаименованиеЗначенияДляОграничения = СведенияОбОграниченииКПолномочию.НаимЗначОгр;
				КодЗначенияДляОграничения = СведенияОбОграниченииКПолномочию.КодЗначОгр;
				ТекстовоеЗначениеДляОграничения = СведенияОбОграниченииКПолномочию.ТексЗначОгр;
				
				Ограничение = Объект.Ограничения.Добавить();
				Ограничение.ИдентификаторПолномочия = Полномочие.ИдентификаторПолномочия;
				Ограничение.Код = КодОграничения;
				Ограничение.Наименование = НаименованиеОграничения;
				Ограничение.КодЗначения = КодЗначенияДляОграничения;
				Ограничение.НаименованиеЗначения = НаименованиеЗначенияДляОграничения;
				Ограничение.ТекстовоеЗначение = ТекстовоеЗначениеДляОграничения;
			КонецЦикла;
		КонецЦикла;
	КонецЕсли;
	
	КодыНалоговыхОргановДействия = СведенияОДоверенности.КодНОДейст;
	Для Каждого КодНалоговогоОрганаДействия Из КодыНалоговыхОргановДействия Цикл
		НалоговыйОрган = Объект.НалоговыеОрганыДействия.Добавить();
		НалоговыйОрган.КодНалоговогоОргана = КодНалоговогоОрганаДействия;
	КонецЦикла;

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

Процедура ВывестиДоверенность(ТабличныйДокумент, Макет, Доверенность)

	СведенияОДоверенности = Доверенность.СвДов;
	ЕдиныйРегистрационныйНомер = СведенияОДоверенности.НомДовер;
	ДатаВыдачиДоверенности = СведенияОДоверенности.ДатаВыдДовер;
	СрокДействияДоверенности = СведенияОДоверенности.СрокДейст;
	ПризнакВозможностиПередоверия = СведенияОДоверенности.ПрПередов;
	ВидДоверенности = СведенияОДоверенности.ВидДовер;
	РегистрационныйНомерДоверенностиВРНД = СведенияОДоверенности.НомРНДДовер;
	СведенияОНотариальномУдостоверении = Доверенность.СвНотУд;
	
	ПравоПередоверия = "";
	Если ПризнакВозможностиПередоверия = "1" Тогда
		ПравоПередоверия = НСтр("ru = 'Без права передоверия'");
	ИначеЕсли ПризнакВозможностиПередоверия = "2" Тогда
		ПравоПередоверия = НСтр("ru = 'Однократное передоверие'");
	ИначеЕсли ПризнакВозможностиПередоверия = "3" Тогда
		ПравоПередоверия = НСтр("ru = 'С правом последующего передоверия'");
	КонецЕсли;
	
	ВозможностьОтзыва = "";
	Если ВидДоверенности = "1" Тогда
		ВозможностьОтзыва = НСтр("ru = 'С возможностью отзыва'");
	ИначеЕсли ВидДоверенности = "2" Тогда
		ВозможностьОтзыва = НСтр("ru = 'Без возможности отзыва'");
	КонецЕсли;
	
	РеквизитыШапки = Новый Структура;
	РеквизитыШапки.Вставить("ДатаВыдачиДоверенности", Формат(Дата(ДатаВыдачиДоверенности), "ДЛФ=D;"));
	РеквизитыШапки.Вставить("СрокДействияДоверенности", ?(СрокДействияДоверенности = Неопределено, "", Формат(Дата(СрокДействияДоверенности), "ДЛФ=D;")));
	РеквизитыШапки.Вставить("ЕдиныйРегистрационныйНомер", ЕдиныйРегистрационныйНомер);
	РеквизитыШапки.Вставить("ПравоПередоверия", ПравоПередоверия);
	РеквизитыШапки.Вставить("ВозможностьОтзыва", ВозможностьОтзыва);
	РеквизитыШапки.Вставить("РегистрационныйНомерДоверенностиВРНД", РегистрационныйНомерДоверенностиВРНД);
	
	ВывестиОбласть(ТабличныйДокумент, Макет, "ШапкаДоверенности", РеквизитыШапки);
	ВывестиОбласть(ТабличныйДокумент, Макет, "ШапкаДоверителей", РеквизитыШапки);
	ВывестиСведенияОДоверителях(ТабличныйДокумент, Макет, Доверенность.СвДоверит);
	ВывестиОтступ(ТабличныйДокумент, Макет);
	ВывестиОбласть(ТабличныйДокумент, Макет, "ШапкаПредставителей", РеквизитыШапки);
	
	СведенияОПредставителях = Доверенность.СвУпПред;
	Для Каждого СведенияОПредставителе Из СведенияОПредставителях Цикл
		ТипПредставителя = СведенияОПредставителе.ТипПред;
		Представитель = СведенияОПредставителе.Пред;
		
		ВывестиОтступ(ТабличныйДокумент, Макет);
		
		Если ТипПредставителя = "1" Тогда
			СведенияОЮридическомЛице = Представитель.СведОрг;
			Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
		ИначеЕсли ТипПредставителя = "2" Тогда
			СведенияОбИндивидуальномПредпринимателе = Представитель.СведИП;
			Параметры = РеквизитыИндивидуальногоПредпринимателя(СведенияОбИндивидуальномПредпринимателе);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбИндивидуальномПредпринимателеУровень1");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИндивидуальномПредпринимателе", Параметры);
		ИначеЕсли ТипПредставителя = "3" Тогда
			СведенияОФизическомЛице = Представитель.СведФизЛ;
			Параметры = РеквизитыДолжностногоЛица(СведенияОФизическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокФизическогоЛицаПредставителя", Параметры);
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлице", Параметры);
		ИначеЕсли ТипПредставителя = "4" Тогда
			СведенияОФилиалеЮридическогоЛица = Представитель.СведФилиал;
			Параметры = РеквизитыЮридическогоЛица(СведенияОФилиалеЮридическогоЛица);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФилиале", Параметры);
		ИначеЕсли ТипПредставителя = "5" Тогда
			СведенияОбИностранномЮридическомЛице = Представитель.СведИО;
			Параметры = РеквизитыИностранногоЮридическогоЛица(СведенияОбИностранномЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИностраннойОрганизации", Параметры);
		КонецЕсли;
	КонецЦикла;
	
	СведенияОПолномочияхПредставителей = Доверенность.СвПолн;
	ТипПолномочия = СведенияОПолномочияхПредставителей.ТипПолн;
	СведенияОМашиночитаемыхПолномочиях = СведенияОПолномочияхПредставителей.МашПолн;
	ТекстовоеСодержаниеПолномочия = СведенияОПолномочияхПредставителей.ТекстПолн;
	
	ВывестиОтступ(ТабличныйДокумент, Макет);
	ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокПолномочий");
	
	Если ТипПолномочия = "0" Тогда
		Параметры = Новый Структура;
		Параметры.Вставить("ОписаниеПолномочия", ТекстовоеСодержаниеПолномочия);
		ВывестиОбласть(ТабличныйДокумент, Макет, "СтрокаПолномочия", Параметры);
	ИначеЕсли ТипПолномочия = "1" Тогда
		Для Каждого СведенияОМашиночитаемомПолномочии Из СведенияОМашиночитаемыхПолномочиях Цикл
			КодПолномочия = СведенияОМашиночитаемомПолномочии.КодПолн;
			НаименованиеПолномочия = СведенияОМашиночитаемомПолномочии.НаимПолн;
			
			ОписаниеПолномочия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
				"ru = '%1 %2'"), КодПолномочия, НаименованиеПолномочия);
			
			Параметры = Новый Структура;
			Параметры.Вставить("ОписаниеПолномочия", ОписаниеПолномочия);
			ВывестиОбласть(ТабличныйДокумент, Макет, "СтрокаПолномочия", Параметры);
			
			СведенияОбОграниченияхКПолномочию = СведенияОМашиночитаемомПолномочии.ОгрСвПолн;
			Для Каждого СведенияОбОграниченииКПолномочию Из СведенияОбОграниченияхКПолномочию Цикл
				КодОграничения = СведенияОбОграниченииКПолномочию.КодОгр;
				НаименованиеОграничения = СведенияОбОграниченииКПолномочию.НаимОгр;
				НаименованиеЗначенияДляОграничения = СведенияОбОграниченииКПолномочию.НаимЗначОгр;
				КодЗначенияДляОграничения = СведенияОбОграниченииКПолномочию.КодЗначОгр;
				ТекстовоеЗначениеДляОграничения = СведенияОбОграниченииКПолномочию.ТексЗначОгр;
				
				Ограничение = Новый Массив;
				Ограничение.Добавить(КодОграничения);
				Ограничение.Добавить(НаименованиеОграничения);
				Если ЗначениеЗаполнено(КодЗначенияДляОграничения) Тогда
					Ограничение.Добавить(КодЗначенияДляОграничения);
					Ограничение.Добавить(НаименованиеЗначенияДляОграничения);
				Иначе
					Ограничение.Добавить(ТекстовоеЗначениеДляОграничения);
				КонецЕсли;
				
				ОписаниеОграничения = Символы.Таб + СтрСоединить(Ограничение, ", ");

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

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

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

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

Процедура ВывестиПередоверие(ТабличныйДокумент, Макет, Передоверие)

	СведенияОПервоначальнойДоверенности = Передоверие.СвПервДовер;
	СведенияОДоверенностиОснованииПередоверия = Передоверие.СвПередов;
	СведенияОДоверенности = Передоверие.СвПереДовер;
	СведенияОЛицахПередавшихПолномочия = Передоверие.СвПередПолн;
	СведенияОЛицахПолучившихПолномочия = Передоверие.СвПолучПолн;
	СведенияОПередаваемыхПолномочиях = Передоверие.СвПолн;
	
	ЕдиныйРегистрационныйНомер = СведенияОДоверенности.НомДовер;
	ДатаВыдачиДоверенности = СведенияОДоверенности.ДатаВыдДовер;
	СрокДействияДоверенности = СведенияОДоверенности.СрокДейст;
	ПризнакВозможностиПередоверия = СведенияОДоверенности.ПрПередов;
	ВидДоверенности = СведенияОДоверенности.ВидДовер;
	
	РегистрационныйНомерДоверенностиВРНД = СведенияОДоверенности.НомРНДДовер;
	СведенияОНотариальномУдостоверении = Передоверие.СвНотУд;
	
	НомерДоверенностиОснования = СведенияОПервоначальнойДоверенности.НомДоверПерв;
	ДатаВыдачиДоверенностиОснования = СведенияОПервоначальнойДоверенности.ДатаВыдДовер;
	
	Если СведенияОДоверенностиОснованииПередоверия <> Неопределено Тогда
		НомерДоверенностиОснования = СведенияОДоверенностиОснованииПередоверия.НомДоверN;
		ДатаВыдачиДоверенностиОснования = СведенияОДоверенностиОснованииПередоверия.ДатаВыдДовер;
	КонецЕсли;
	
	ПредставлениеДоверенностиОснования = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		НСтр("ru = '№ %1 от %2'"),
		НомерДоверенностиОснования,
		Формат(ДатаВыдачиДоверенностиОснования, "ДЛФ=D;"));
	
	ПравоПередоверия = "";
	Если ПризнакВозможностиПередоверия = "1" Тогда
		ПравоПередоверия = НСтр("ru = 'Без права передоверия'");
	ИначеЕсли ПризнакВозможностиПередоверия = "2" Тогда
		ПравоПередоверия = НСтр("ru = 'Однократное передоверие'");
	ИначеЕсли ПризнакВозможностиПередоверия = "3" Тогда
		ПравоПередоверия = НСтр("ru = 'С правом последующего передоверия'");
	КонецЕсли;
	
	ВозможностьОтзыва = "";
	Если ВидДоверенности = "1" Тогда
		ВозможностьОтзыва = НСтр("ru = 'С возможностью отзыва'");
	ИначеЕсли ВидДоверенности = "2" Тогда
		ВозможностьОтзыва = НСтр("ru = 'Без возможности отзыва'");
	КонецЕсли;
	
	РеквизитыШапки = Новый Структура;
	РеквизитыШапки.Вставить("ДатаВыдачиДоверенности", Формат(Дата(ДатаВыдачиДоверенности), "ДЛФ=D;"));
	РеквизитыШапки.Вставить("СрокДействияДоверенности", ?(СрокДействияДоверенности = Неопределено, "", Формат(Дата(СрокДействияДоверенности), "ДЛФ=D;")));
	РеквизитыШапки.Вставить("ЕдиныйРегистрационныйНомер", ЕдиныйРегистрационныйНомер);
	РеквизитыШапки.Вставить("ПравоПередоверия", ПравоПередоверия);
	РеквизитыШапки.Вставить("ВозможностьОтзыва", ВозможностьОтзыва);
	РеквизитыШапки.Вставить("РегистрационныйНомерДоверенностиВРНД", РегистрационныйНомерДоверенностиВРНД);
	
	ВывестиОбласть(ТабличныйДокумент, Макет, "ШапкаДоверенности", РеквизитыШапки);
	ВывестиОбласть(ТабличныйДокумент, Макет, "ШапкаДоверителей", РеквизитыШапки);
	
	СведенияОДоверителяхПервоначальнойДоверенности = СведенияОПервоначальнойДоверенности.СвДоверПерв;
	Для Каждого СведенияОДоверителе Из СведенияОДоверителяхПервоначальнойДоверенности Цикл
		
		ТипДоверителя = СведенияОДоверителе.ТипДоверит;
		Доверитель = СведенияОДоверителе.ДоверитПерв;
		
		ВывестиОтступ(ТабличныйДокумент, Макет);
		
		Если ТипДоверителя = "1" Тогда
			СведенияОЮридическомЛице = Доверитель.РосОргДовер;
			
			Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизацииВладельцеПолномочий");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
			
		ИначеЕсли ТипДоверителя = "2" Тогда
			
			СведенияОбИностранномЮридическомЛице = Доверитель.ИнОргДовер;
			
			Параметры = РеквизитыИностранногоЮридическогоЛица(СведенияОбИностранномЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизацииВладельцеПолномочий");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИностраннойОрганизации", Параметры);
			
		ИначеЕсли ТипДоверителя = "3" Тогда
			
			СведенияОбИндивидуальномПредпринимателе = Доверитель.ИПДовер;
			Параметры = РеквизитыИндивидуальногоПредпринимателя(СведенияОбИндивидуальномПредпринимателе);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбИндивидуальномПредпринимателеВладельцеПолномочий");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИндивидуальномПредпринимателе", Параметры);
			
		ИначеЕсли ТипДоверителя = "4" Тогда
			
			СведенияОФизическомЛицеДоверителе = Доверитель.ФЛДовер;
			Параметры = РеквизитыФизическогоЛицаДоверителя(СведенияОФизическомЛицеДоверителе);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОФизическомЛицеВладельцеПолномочий");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлице", Параметры);
			
		КонецЕсли;
		
	КонецЦикла;
	
	Для Каждого СведенияОЛицеПередавшемПолномочия Из СведенияОЛицахПередавшихПолномочия Цикл
		ТипЛицаПередавшегоПолномочия = СведенияОЛицеПередавшемПолномочия.ТипПерПолн;
		ЛицоПередавшееПолномочия = СведенияОЛицеПередавшемПолномочия.ПередПолн;
		
		Если ТипЛицаПередавшегоПолномочия = "1" Тогда
			СведенияОДоверителеЮридическогоЛица = ЛицоПередавшееПолномочия.РосОргПерПолн;
			СведенияОЮридическомЛице = СведенияОДоверителеЮридическогоЛица.СвРосОрг;
			СведенияОЛицахДоверителя = СведенияОДоверителеЮридическогоЛица.ЛицоБезДов;
			
			Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизацииПередавшейПолномочия");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
			
			СведенияОЛицахДоверителя = СведенияОДоверителеЮридическогоЛица.ЛицоБезДов;
			
			Для Каждого СведенияОЛицеДоверителя Из СведенияОЛицахДоверителя Цикл
				
				СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании = СведенияОЛицеДоверителя.СВЮЛ;
				СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе = СведенияОЛицеДоверителя.СвИП;
				СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя = СведенияОЛицеДоверителя.СвФЛ;
				
				Если СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании <> Неопределено Тогда
					СведенияОЮридическомЛице = СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании.СвЮЛЕИО;
					СведенияОДолжностныхЛицах = СведенияОЕдиноличномИсполнительномОрганеУправляющейКомпании.СвФЛ;
					
					Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
					ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбУправляющейКомпании");
					ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
					
					Для Каждого СведенияОДолжностномЛице Из СведенияОДолжностныхЛицах Цикл
						Параметры = РеквизитыДолжностногоЛица(СведенияОДолжностномЛице);
						Параметры.Вставить("ПредставлениеДоверенности", ПредставлениеДоверенностиОснования);
						ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокЛицаДоверителяУровень3");
						ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлицеПоДоверенности", Параметры);
					КонецЦикла;
				КонецЕсли;
				
				Если СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе <> Неопределено Тогда
					Параметры = РеквизитыИндивидуальногоПредпринимателя(СведенияОЕдиноличномИсполнительномОрганеИндивидуальномПредпринимателе);
					Параметры.Вставить("ПредставлениеДоверенности", ПредставлениеДоверенностиОснования);
					ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбИндивидуальномПредпринимателеУровень2");
					ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИндивидуальномПредпринимателеПоДоверенности", Параметры);
				КонецЕсли;
				
				Если СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя <> Неопределено Тогда
					Параметры = РеквизитыДолжностногоЛица(СведенияОЛицахДействующихОтИмениЮридическогоЛицаДоверителя);
					Параметры.Вставить("ПредставлениеДоверенности", ПредставлениеДоверенностиОснования);
					ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокЛицаДоверителяУровень2");
					ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлицеПоДоверенности", Параметры);
				КонецЕсли;
				
			КонецЦикла;
			
		ИначеЕсли ТипЛицаПередавшегоПолномочия = "5" Тогда
			
			СведенияОДоверителеИностранногоЮридическогоЛица = ЛицоПередавшееПолномочия.ИнПерПолн;
			СведенияОбИностранномЮридическомЛице = СведенияОДоверителеИностранногоЮридическогоЛица.СвИнОрг;
			СведенияОРуководителяхИностранногоЮридическогоЛица = СведенияОДоверителеИностранногоЮридическогоЛица.СвРукОП;
			
			Параметры = РеквизитыИностранногоЮридическогоЛица(СведенияОбИностранномЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизацииПередавшейПолномочия");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИностраннойОрганизации", Параметры);
			
			Для Каждого СведенияОРуководителеИностранногоЮридическогоЛица Из СведенияОРуководителяхИностранногоЮридическогоЛица Цикл
				Параметры = РеквизитыДолжностногоЛица(СведенияОРуководителеИностранногоЮридическогоЛица);
				Параметры.Вставить("ПредставлениеДоверенности", ПредставлениеДоверенностиОснования);
				ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокЛицаДоверителяУровень2");
				ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлицеПоДоверенности", Параметры);
			КонецЦикла;
			
		ИначеЕсли ТипЛицаПередавшегоПолномочия = "2" Тогда
			
			СведенияОбИндивидуальномПредпринимателе = ЛицоПередавшееПолномочия.ИППерПолн;
			Параметры = РеквизитыИндивидуальногоПредпринимателя(СведенияОбИндивидуальномПредпринимателе);
			Параметры.Вставить("ПредставлениеДоверенности", ПредставлениеДоверенностиОснования);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбИндивидуальномПредпринимателеПередавшемПолномочияУровень1");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИндивидуальномПредпринимателеПоДоверенности", Параметры);
			
		ИначеЕсли ТипЛицаПередавшегоПолномочия = "3" Тогда
			
			СведенияОФизическомЛицеДоверителе = ЛицоПередавшееПолномочия.ФЛПерПолн;
			Параметры = РеквизитыФизическогоЛицаДоверителя(СведенияОФизическомЛицеДоверителе);
			Параметры.Вставить("ПредставлениеДоверенности", ПредставлениеДоверенностиОснования);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокЛицаПередавшегоПолномочия");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлицеПоДоверенности", Параметры);
			
		ИначеЕсли ТипЛицаПередавшегоПолномочия = "4" Тогда
			
			СведенияОФилиалеЮридическогоЛица = ЛицоПередавшееПолномочия.ФилПерПолн;
			СведенияОЮридическомЛице = СведенияОФилиалеЮридическогоЛица.СвФил;
			СведенияОДолжностномЛице = СведенияОФилиалеЮридическогоЛица.СвРукФил;
			
			Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизацииПередавшейПолномочия");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
			
			Параметры = РеквизитыДолжностногоЛица(СведенияОДолжностномЛице);
			Параметры.Вставить("ПредставлениеДоверенности", ПредставлениеДоверенностиОснования);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокЛицаДоверителяУровень2");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлицеПоДоверенности", Параметры);
			
		КонецЕсли;
		
	КонецЦикла;
	
	ВывестиОтступ(ТабличныйДокумент, Макет);
	ВывестиОбласть(ТабличныйДокумент, Макет, "ШапкаПредставителей", Параметры);
	
	Для Каждого СведенияОПредставителе Из СведенияОЛицахПолучившихПолномочия Цикл
		ТипПредставителя = СведенияОПредставителе.ТипПред;
		Представитель = СведенияОПредставителе.Пред;
		
		ВывестиОтступ(ТабличныйДокумент, Макет);
		
		Если ТипПредставителя = "1" Тогда
			СведенияОЮридическомЛице = Представитель.СведОрг;
			Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
		ИначеЕсли ТипПредставителя = "2" Тогда
			СведенияОбИндивидуальномПредпринимателе = Представитель.СведИП;
			Параметры = РеквизитыИндивидуальногоПредпринимателя(СведенияОбИндивидуальномПредпринимателе);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбИндивидуальномПредпринимателеУровень1");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИндивидуальномПредпринимателе", Параметры);
		ИначеЕсли ТипПредставителя = "3" Тогда
			СведенияОФизическомЛице = Представитель.СведФизЛ;
			Параметры = РеквизитыДолжностногоЛица(СведенияОФизическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокФизическогоЛицаПредставителя", Параметры);
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОФизлице", Параметры);
		ИначеЕсли ТипПредставителя = "4" Тогда
			СведенияОФилиалеЮридическогоЛица = Представитель.СведФилиал;
			Параметры = РеквизитыЮридическогоЛица(СведенияОФилиалеЮридическогоЛица);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбОрганизации", Параметры);
		ИначеЕсли ТипПредставителя = "5" Тогда
			СведенияОбИностранномЮридическомЛице = Представитель.СведИО;
			Параметры = РеквизитыИностранногоЮридическогоЛица(СведенияОбИностранномЮридическомЛице);
			ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокСведенийОбОрганизации");
			ВывестиОбласть(ТабличныйДокумент, Макет, "СведенияОбИностраннойОрганизации", Параметры);
		КонецЕсли;
	КонецЦикла;
	 
	ТипПолномочия = СведенияОПередаваемыхПолномочиях.ТипПолн;
	СведенияОМашиночитаемыхПолномочиях = СведенияОПередаваемыхПолномочиях.МашПолн;
	ТекстовоеСодержаниеПолномочия = СведенияОПередаваемыхПолномочиях.ТекстПолн;
	
	ВывестиОтступ(ТабличныйДокумент, Макет);
	ВывестиОбласть(ТабличныйДокумент, Макет, "ЗаголовокПолномочий");
	
	Если ТипПолномочия = "0" Тогда
		Параметры = Новый Структура;
		Параметры.Вставить("ОписаниеПолномочия", ТекстовоеСодержаниеПолномочия);
		ВывестиОбласть(ТабличныйДокумент, Макет, "СтрокаПолномочия", Параметры);
	ИначеЕсли ТипПолномочия = "1" Тогда
		Для Каждого СведенияОМашиночитаемомПолномочии Из СведенияОМашиночитаемыхПолномочиях Цикл
			КодПолномочия = СведенияОМашиночитаемомПолномочии.КодПолн;
			НаименованиеПолномочия = СведенияОМашиночитаемомПолномочии.НаимПолн;
			
			ОписаниеПолномочия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
				"ru = '%1 %2'"), КодПолномочия, НаименованиеПолномочия);
			
			Параметры = Новый Структура;
			Параметры.Вставить("ОписаниеПолномочия", ОписаниеПолномочия);
			ВывестиОбласть(ТабличныйДокумент, Макет, "СтрокаПолномочия", Параметры);
			
			СведенияОбОграниченияхКПолномочию = СведенияОМашиночитаемомПолномочии.ОгрСвПолн;
			Для Каждого СведенияОбОграниченииКПолномочию Из СведенияОбОграниченияхКПолномочию Цикл
				КодОграничения = СведенияОбОграниченииКПолномочию.КодОгр;
				НаименованиеОграничения = СведенияОбОграниченииКПолномочию.НаимОгр;
				НаименованиеЗначенияДляОграничения = СведенияОбОграниченииКПолномочию.НаимЗначОгр;
				КодЗначенияДляОграничения = СведенияОбОграниченииКПолномочию.КодЗначОгр;
				ТекстовоеЗначениеДляОграничения = СведенияОбОграниченииКПолномочию.ТексЗначОгр;
				
				Ограничение = Новый Массив;
				Ограничение.Добавить(КодОграничения);
				Ограничение.Добавить(НаименованиеОграничения);
				Если ЗначениеЗаполнено(КодЗначенияДляОграничения) Тогда
					Ограничение.Добавить(КодЗначенияДляОграничения);
					Ограничение.Добавить(НаименованиеЗначенияДляОграничения);
				Иначе
					Ограничение.Добавить(ТекстовоеЗначениеДляОграничения);
				КонецЕсли;
				
				ОписаниеОграничения = Символы.Таб + СтрСоединить(Ограничение, ", ");

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

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

	ПараметрыДанныхФайла = РаботаСФайламиКлиентСервер.ПараметрыДанныхФайла();
	ПараметрыДанныхФайла.ВызыватьИсключение = Ложь;

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

	ОписаниеДоверенности = ДоверенностьXDTO(ДоверенностьXML);

	Возврат ДоверителиПервоначальнойДоверенности(ОписаниеДоверенности);

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

Функция РеквизитыДоверенностиОснования(ОписаниеДоверенности, ВычислятьЗначенияКонтактнойИнформацииПоПредставлениям = Ложь)

	Документ = ОписаниеДоверенности.Документ;
	Передоверие = Документ.Передов;

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

Функция ДоверителиПервоначальнойДоверенности(ОписаниеДоверенности)

	Документ = ОписаниеДоверенности.Документ;
	Передоверие = Документ.Передов;

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

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

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

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

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

#КонецЕсли
