Документооборот с контролирующими органами / Помощник МЧД / Модуль формы

файл
&НаКлиенте
Перем КонтекстЭДОКлиент Экспорт;

#Область ОписаниеПеременных

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Инициализация(Параметры);
	ИзменитьОформлениеФормы();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
	
	Если Элементы.Страницы.ТекущаяСтраница <> Элементы.УспешнаяОтправка Тогда
		
		ТекстПредупреждения = НСтр("ru = 'Прервать работу помощника?'");
		
		ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы(
			ЭтотОбъект, 
			Отказ, 
			ЗавершениеРаботы,
			ТекстПредупреждения, 
			"ПрограммноеЗакрытие");
			
	КонецЕсли;
	
КонецПроцедуры
	
#КонецОбласти

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

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

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

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

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

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

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

&НаКлиенте
Функция ПропуститьСсылку(Строка)
	
	Ссылка = Строка.Ссылка;

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция РасширенныеНастройкиОбщие()
	
	Возврат ПараметрыПолномочийОбщие();
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция РасширенныеНастройкиФНС()
	
	Настройки = "НалоговыеОрганыДействия,
		|ПередовериеВозможно,
		|ЛицоБезДовЮЛ,
		|НомерРодительскойДоверенности,
		|РодительскаяДоверенность,
		|НомерКорневойДоверенности,
		|КорневаяДоверенность,
		|КППОбособки,
		|ВыданаОбособке,
		|ПредставительНеСотрудник";
	
	Возврат Настройки;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция РасширенныеНастройкиМЧДЕдиногоФормата()
	
	Настройки = "РегистрироватьВРеестре,
		|ПередовериеМЧДЕдиногоФормата,
		|ДопСведения";
	
	Возврат Настройки;
	
КонецФункции

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

&НаКлиентеНаСервереБезКонтекста
Функция РасширенныеНастройкиМЧДУПУП()
	
	Настройки = "НаименованиеДокумента,
		|КемВыдан,
		|НомерДокумента";
	
	Возврат Настройки;
	
КонецФункции

&НаКлиенте
Процедура ПредставлениеУдостоверенияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ПаспортныеДанныеПриНажатии(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура АдресПредставлениеОчистка(Элемент, СтандартнаяОбработка)
	
	Префикс = Префикс(Элемент);
	ОчиститьАдрес(Префикс);
	
КонецПроцедуры

&НаКлиенте
Процедура ПредставлениеУдостоверенияОчистка(Элемент, СтандартнаяОбработка)
	
	Префикс = Префикс(Элемент);
	ОчиститьУдостоверение(Префикс);
	
КонецПроцедуры

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

&НаКлиенте
Процедура СпроситьПроНеподключеныйОрган(Элемент)
	
	Орган = СтрЗаменить(Элемент.Имя, "СоздатьМЧД", "");
	
	Кнопки = Новый СписокЗначений;
	Кнопки.Добавить(НСтр("ru = 'Продолжить создание МЧД'"));
	Кнопки.Добавить(НСтр("ru = 'Отмена'"));
	
	ДополнительныеПараметры = Новый Структура();
	ДополнительныеПараметры.Вставить("Кнопки",  Кнопки);
	ДополнительныеПараметры.Вставить("Орган",   Орган);
	ДополнительныеПараметры.Вставить("Элемент", Элемент);
	
	ОписаниеОповещения = Новый ОписаниеОповещения(
		"СпроситьПроНеподключеныйОрган_ПослеПроверки", 
		ЭтотОбъект, 
		ДополнительныеПараметры);
		
	Текст = НСтр("ru = 'У организации %1 не подключен обмен с гос. органом %2, и поэтому представитель не сможет отправлять отчетность в этот орган.
                  |
                  |Вы можете продолжить создание МЧД, если она вам нужна для другой программы.'");
	
 	Текст = СтрШаблон(Текст, Организация, Орган);
	ПоказатьВопрос(ОписаниеОповещения, Текст, Кнопки,,Кнопки[0].Значение);
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ФлагПриИзменении_Продолжение(Элемент)
	
	Если Элемент = Элементы.СоздатьМЧДСФР Тогда
		НадоСоздатьЗПЭД = НадоСоздатьЗПЭД();
	ИначеЕсли Элемент = Элементы.СоздатьМЧДРосстат 
		ИЛИ Элемент = Элементы.СоздатьМЧДФСРАР
		ИЛИ Элемент = Элементы.СоздатьМЧДРПН Тогда
		ИнициализироватьРасширенныеНастройки();
	КонецЕсли;
	
	СкорректироватьПолномочияПоОргану(Элемент.Имя);
	
	ОчиститьМЧД();
	ИзменитьОформлениеФормы();
	
КонецПроцедуры

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

&НаСервере
Функция КореньПолномочийМЧДЕФ()

	Для Каждого Строка Из ТребованияФНСКлиентСервер.ПотомкиСтроки(Полномочия) Цикл
		
		Если Строка.Наименование = МЧДБРОКлиентСервер.МЧД_ЕФ() Тогда
			Возврат Строка;
		КонецЕсли;
	КонецЦикла;

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

&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
	
	ПриИзмененииОрганизации();
	
КонецПроцедуры

&НаКлиенте
Процедура ДоверительПриИзменении(Элемент)
	
	ИнициализироватьДанныеДоверителя();
	
КонецПроцедуры

&НаКлиенте
Процедура ПредставительПриИзменении(Элемент)

	ОчиститьМЧД();
	ИнициализироватьДанныеПредставителя();
	ИзменитьОформлениеФормы();
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыИмяТаблицыФормы

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

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

&НаСервереБезКонтекста
Функция ПолучателиФСГС(УчетнаяЗапись)

	Возврат ОбработкаЗаявленийАбонента.ПолучателиФСГС(УчетнаяЗапись);

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

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

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

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

&НаКлиенте
Процедура НазадНаСертификат(Команда)
	
	ОткрытьСтраницуСертификат();
		
КонецПроцедуры

&НаКлиенте
Процедура СоздатьЕще(Команда)
	
	Организация = Неопределено;
	ПриИзмененииОрганизации();
	Представитель = Неопределено;
	ИнициализироватьДанныеПредставителя();
	НазадНаСоздание(Неопределено);
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьМЧДВЗаявление(Команда)
	
	Закрыть(СозданныеМЧД);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПодписатьИОтправить(Команда)

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

&НаКлиенте
Процедура Подключаемый_ПодписатьИОтправить()

	ПодписатьИОтправитьЦикл(0);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьТаблицуСозданнымиМЧД()
	
	ТаблицаДокументов.Очистить();
	
	Если СоздатьМЧДФНС Тогда
		ДобавитьСтрокуВТаблицу(МЧДФНС);
	КонецЕсли;
	
	Если СоздатьМЧДСФР Тогда
		ДобавитьСтрокуВТаблицу(МЧДФСС);
		ДобавитьСтрокуВТаблицу(МЧДУПУП);
		Если НадоСоздатьЗПЭД Тогда
			ДобавитьСтрокуВТаблицу(ЗПЭД);
		КонецЕсли;
	КонецЕсли;
	
	Если СоздатьМЧД_ЕФ(ЭтотОбъект) Тогда
		ДобавитьСтрокуВТаблицу(МЧДЕФ);
	КонецЕсли;
	
	Если СоздатьМЧДЦБ Тогда
		ДобавитьСтрокуВТаблицу(МЧДЦБ);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьСтрокуВТаблицу(Ссылка)
	
	НовСтр = ТаблицаДокументов.Добавить();
	НовСтр.Ссылка = Ссылка;
	НовСтр.Представление = МЧДБРОКлиентСервер.ПредставлениеМЧД(Ссылка);
	
КонецПроцедуры

&НаКлиенте
Процедура ПодписатьИОтправитьЦикл(ТекущийНомер)

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

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

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

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

&НаСервере
Процедура СопоставитьМЧДЦБ(МЧД) Экспорт
	
	Если ДокументооборотСКОКлиентСервер.ПодсистемаЦБСуществует() 
		И ТипЗнч(МЧД) = Тип("СправочникСсылка." + ИмяТипаСправочникаМашиночитаемыеДоверенностиЦБ)
		И ЗначениеЗаполнено(УчетнаяЗапись) Тогда
		
		МЧДБРО.СопоставитьМЧДЦБ(МЧД);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура НазадНаСоздание(Команда)
	
	АктивизироватьСтраницу(
		Элементы.Страницы,
		Элементы.Создание);
	
КонецПроцедуры
	
&НаКлиенте
Процедура Далее(Команда)

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

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

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

&НаКлиенте
Процедура СкорректироватьДанныеПередСозданием()
	
	Если Элементы.ГруппаДоверительТелефон.Видимость Тогда
		Представление = ЭлектроннаяПодписьВМоделиСервисаКлиентСервер.ПолучитьПредставлениеТелефона(ДоверительТелефон);
		Если ЗначениеЗаполнено(Представление) Тогда
			ДоверительТелефон = Представление;
		КонецЕсли;
	КонецЕсли;
	
	Если Элементы.ГруппаПредставительТелефон.Видимость Тогда
		Представление = ЭлектроннаяПодписьВМоделиСервисаКлиентСервер.ПолучитьПредставлениеТелефона(ПредставительТелефон);
		Если ЗначениеЗаполнено(Представление) Тогда
			ПредставительТелефон = Представление;
		КонецЕсли;
	КонецЕсли;

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

&НаКлиенте
Процедура ТребуетсяПомощь(Команда)
	
	ФИО = СокрЛП(ПредставительИмя + " " + ПредставительОтчество);
	
	ОбработкаЗаявленийАбонентаКлиент.ОткрытьФормуПомощи(
		ЭтотОбъект, 
		ФИО, 
		ПредставительТелефон,
		"https://its.1c.ru/bmk/mcd_helper");
	
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьВсе(Команда)
	
	Органы = ОрганыСОшибками();
	
	Если Органы.Количество() > 0 Тогда
		Органы = ОрганыСОшибкамиСтрокой();
		ПоказатьОшибкуПоТреугольникуВнимание(Органы, "СказатьЧтоНеУдалосьНайтиСертификат_ПослеВопроса_ПометитьВсе");
	Иначе
		ПроставитьПометки();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПроставитьПометки()
	
	Для каждого Строка Из СопоставлениеМЧД Цикл
		Если НЕ Строка.ЕстьОшибка Тогда
			Строка.Пометка = Истина;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

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

	КонецЕсли;
	
	ПроставитьПометки();
	
КонецПроцедуры

&НаКлиенте
Процедура СнятьВсе(Команда)
	
	Для каждого Строка Из СопоставлениеМЧД Цикл
		Строка.Пометка = Ложь;
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура ПродолжитьСЗаменойМЧД(Команда)
	
	ОписаниеОповещения = Новый ОписаниеОповещения(
		"ПродолжитьСЗаменойМЧД_ПослеПроверкиПредставителяЦБ", 
		ЭтотОбъект);
		
	ПроверитьПредставителяЦБ(ОписаниеОповещения);
	
КонецПроцедуры

&НаКлиенте
Процедура НеМенятьМЧД(Команда)
	
	ПерейтиНаСтраницуСертификат();
	
КонецПроцедуры
	
&НаКлиенте
Процедура НазадНаСопоставление(Команда)

	Если СопоставлениеМЧД.Количество() = 0 ИЛИ ВсеСертификатыПустые() Тогда
		
		АктивизироватьСтраницу(
			Элементы.Страницы,
			Элементы.Создание);
			
	Иначе
			
		АктивизироватьСтраницу(
			Элементы.Страницы,
			Элементы.Сопоставление);
			
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура СказатьЧтоНеУдалосьНайтиСертификат_ПослеВопроса_Треугольник(Ответ, ВходящийКонтекст) Экспорт
	
	// Пустышка
	а = 1;
	
КонецПроцедуры

&НаКлиенте
Процедура СказатьЧтоНеУдалосьНайтиСертификат_ПослеВопроса_Пометка(Ответ, ВходящийКонтекст) Экспорт
	
	ВходящийКонтекст.ТекущиеДанные.Пометка = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура ПродолжитьСЗаменойМЧД_ПослеПроверкиПредставителяЦБ(Результат, ВходящийКонтекст) Экспорт
	
	Если НЕ ВсеСертификатыПустые() Тогда
		ЗаписатьМЧДвРегистр();
	КонецЕсли;
		
	ПерейтиНаСтраницуСертификат();
	
КонецПроцедуры

&НаКлиенте
Процедура ПерейтиНаСтраницуСертификат()

	ИзменитьОформлениеСтраницыСертификат();
	
	ОткрытьСтраницуСертификат();
	
	Если НЕ ЗначениеЗаполнено(СертификатРуководителяОтпечаток) Тогда
		ИнициализироватьСертификатРуководителя(); // Асинх
	КонецЕсли;
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура ИнициализироватьРасширенныеНастройки() Экспорт
	
	РегистрироватьВРеестре = НужноРегистрироватьВРеестре();
	
КонецПроцедуры

&НаСервере
Функция НужноРегистрироватьВРеестре()
	
	Возврат СоздатьМЧДРосстат ИЛИ СоздатьМЧДФСРАР ИЛИ СоздатьМЧДРПН;
	
КонецФункции

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

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

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

&НаСервере
Процедура ИнициализироватьПериод()
	
	ДатаНачала = ТекущаяДатаСеанса();
	ДатаОкончания = ДобавитьМесяц(ДатаНачала, 36);
	
КонецПроцедуры

&НаСервере
Процедура Инициализация(Параметры)
	
	РазобратьПараметры(Параметры);
	
	ИнициализироватьОрганизацию();
	ПриИзмененииОрганизации(Параметры);
	ИнициализироватьПериод();
	
КонецПроцедуры

&НаСервере
Процедура ИнициализироватьДанныеДоверителя()
	
	ОчиститьМЧД();
	ЗаполнитьДанныеФизЛица("Доверитель");
	
КонецПроцедуры

&НаСервере
Процедура ОчиститьМЧД()
	
	ОчиститьДанныеПоПрефиксу("МЧД");
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура ИзменитьОформлениеАдреса(Префикс)
	
	АдресЗначение = ЭтотОбъект[Префикс + "АдресЗначение"];
	Если ЗначениеЗаполнено(АдресЗначение) Тогда
		ЭтотОбъект[Префикс + "АдресПредставление"] = РаботаСАдресами.СведенияОбАдресе(АдресЗначение).МуниципальноеПредставление;
	КонецЕсли;;
	
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Функция СоздатьМЧД_ЕФ(Форма) Экспорт
	
	Возврат МЧДБРОКлиентСервер.СоздатьМЧД_ЕФ(Форма);
	
КонецФункции

&НаСервере
Процедура ИзменитьОформлениеДоверителя()

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

&НаСервере
Процедура ИзменитьОформлениеПредставителя()
	
	Элементы.ГруппаПредставительАдрес.Видимость = СоздатьМЧД_ЕФ(ЭтотОбъект);
	Элементы.ГруппаПредставительДолжность.Видимость = СоздатьМЧДЦБ ИЛИ СоздатьМЧДСФР;
	Элементы.ГруппаПредставительПочта.Видимость = СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДСФР;
	Элементы.ГруппаПредставительТелефон.Видимость = СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДСФР;
	
	Элементы.ГруппаПредставительПользователь.Видимость = 
		НЕ ЗначениеЗаполнено(ПредставительПользователь) 
		И НЕ ПредставительЭтоСтрока()
		И (СоздатьМЧДФНС ИЛИ СоздатьМЧДРосстат ИЛИ СоздатьМЧДСФР ИЛИ СоздатьМЧД_ЕФ(ЭтотОбъект))
		И Мультирежим.ВсеПользователи().Количество() > 0; // Для ЦБ не нужно
	
КонецПроцедуры

&НаСервере
Процедура ИзменитьОформлениеФормы()
	
	ИзменитьОформлениеОрганов();
	ИзменитьОформлениеДоверителя();
	ИзменитьОформлениеПредставителя();
	ИзменитьОформлениеРасширенныхНастроек();
	ИзменитьОформлениеПолномочий();
	
КонецПроцедуры

&НаСервере
Процедура ИзменитьОформлениеОрганов()

	Элементы.ГруппаЦБ.Видимость = ДокументооборотСКОКлиентСервер.ПодсистемаЦБСуществует();
	
	// МЧД БСП
	Существует = ДокументооборотСКОКлиентСервер.ПодсистемаЦПРРМЧДСуществует();
	Элементы.ГруппаРосстат.Видимость = Существует;
	Элементы.ГруппаФТС.Видимость = Существует;
	Элементы.ГруппаФСРАР.Видимость = Существует;
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаСервере
Функция ПроверитьПолеУдостоверения(Корректно, Префикс, Имя, Представление, Постфикс)
	
	Если НЕ ЗначениеЗаполнено(ЭтотОбъект[Префикс + Имя]) Тогда 
		СообщитьОшибкуУдостоверения(Корректно, Префикс, Представление, Постфикс)
	КонецЕсли;
	
КонецФункции

&НаСервере
Функция СообщитьОшибкуУдостоверения(Корректно, Префикс, Представление, Постфикс)
	
	Текст = НСтр("ru = 'Заполните поле ""%1"" %2'");
	Текст = СокрЛП(СтрШаблон(Текст, Представление, Постфикс));

	СообщитьОшибку(Текст, Корректно, Префикс + "ПредставлениеУдостоверения");
	
КонецФункции

&НаСервере
Процедура ПроверитьДанныеПоПрефиксу(Корректно, Префикс, Постфикс)
	
	РеквизитыФормы = ПолучитьРеквизиты();
	Для каждого РеквизитФормы Из РеквизитыФормы Цикл
		
		Имя = РеквизитФормы.Имя;
		
		ПроверитьРеквзит = Лев(Врег(Имя), СтрДлина(Префикс)) = Врег(Префикс);
		
		Если ПроверитьРеквзит Тогда
			
			ПроверитьВидимоеПоле(Корректно, Имя, Постфикс);
			
			// Проверяем удостоверение и ФИО только если заполнен сам Доверитель/Представитель
			Если ЗначениеЗаполнено(ЭтотОбъект[Префикс]) Тогда
				
				Если Имя = Префикс Тогда
					ПроверитьФИОПоПрефиксу(Корректно, Префикс, Постфикс);
				КонецЕсли;
				
				Если Имя = Префикс + "ПредставлениеУдостоверения" Тогда
					ПроверитьУдостоверениеПоПрефиксу(Корректно, Префикс, Постфикс);
				КонецЕсли;
				
			Иначе
				
				Прервать;
				
			КонецЕсли;
			
			Если Имя = Префикс + "ИНН" И ЗначениеЗаполнено(ЭтотОбъект[Имя]) Тогда
				
				ТекстОшибки = "";
				Соответствует = РегламентированныеДанныеКлиентСервер.ИННСоответствуетТребованиям(ЭтотОбъект[Имя], Ложь, ТекстОшибки);
				Если НЕ Соответствует Тогда
					Корректно = Ложь;
					ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , Префикс + "ИНН");
				КонецЕсли;
					
			КонецЕсли;
			
			Если Имя = Префикс + "СНИЛС" И ЗначениеЗаполнено(ЭтотОбъект[Имя]) Тогда
				
				ТекстОшибки = "";
				
				Если НЕ ДокументооборотСКОКлиентСервер.ПроверитьСНИЛС(ЭтотОбъект[Имя]) Тогда
					ТекстОшибки = НСтр("ru = 'Некорректно указан СНИЛС сотрудника. Не соответствует маске ХХХ-ХХХ-ХХХ ХХ, где X - любая цифра'");
				ИначеЕсли НЕ ДокументооборотСКОКлиентСервер.ПроверитьСНИЛС(ЭтотОбъект[Имя], Ложь, Истина) Тогда
					ТекстОшибки = НСтр("ru = 'Некорректно указан СНИЛС сотрудника. Не сошлось контрольное число (СНИЛС не существует)'");
				КонецЕсли;
				
				Если ЗначениеЗаполнено(ТекстОшибки) Тогда
					Корректно = Ложь;
					ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , Префикс + "СНИЛС");
				КонецЕсли;
					
			КонецЕсли;
			
			Если Имя = Префикс + "Почта" И ЗначениеЗаполнено(ЭтотОбъект[Имя]) Тогда
				
				Если НЕ ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(ЭтотОбъект[Имя]) Тогда
					
					ТекстОшибки = "";
					
					Если НЕ СтрНайти(ЭтотОбъект[Имя], "@") Тогда
						ТекстОшибки = НСтр("ru = 'Некорректно указана электронная почта. Отсутствует символ @'");
					Иначе 
						ТекстОшибки = НСтр("ru = 'Электронная почта содержит некорректные сочетания символов'");
					КонецЕсли;
					
					Если ЗначениеЗаполнено(ТекстОшибки) Тогда
						Корректно = Ложь;
						ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , Префикс + "Почта");
					КонецЕсли;
					
				КонецЕсли;
					
			КонецЕсли;
			
			Если Имя = Префикс + "Телефон" И ЗначениеЗаполнено(ЭтотОбъект[Имя]) Тогда
				
				ТелефонБезРазделителей = ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентСервер.ТелефонМобильныйБезРазделителей(ЭтотОбъект[Имя]);
	
				Если ЗначениеЗаполнено(ТелефонБезРазделителей) Тогда
					Если НЕ ДокументооборотСКОКлиентСервер.ПроверитьЦифровойКодЗаданнойДлины(ТелефонБезРазделителей, 11, Истина) Тогда 
						Корректно = Ложь;
						ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Телефон должен иметь формат +7 XXX XXX-XX-XX'"),,Префикс + "Телефон");
					КонецЕсли;
				КонецЕсли;
					
			КонецЕсли;
			
			Если СоздатьМЧД_ЕФ(ЭтотОбъект) И Имя = Префикс + "АдресЗначение" И ЗначениеЗаполнено(ЭтотОбъект[Имя]) Тогда
				ПроверитьАдрес(ЭтотОбъект[Имя], Корректно, Префикс + "АдресПредставление");
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ПроверитьВидимоеПоле(Корректно, Имя, Постфикс = "")
	
	Если Элементы.Найти(Имя) = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Родитель = Элементы[Имя].Родитель;
	
	Если Родитель.Видимость Тогда
		
		// Проверка на заполненность
		Поле = Элементы["Заголовок" + Имя].Заголовок;
		Поле = СтрЗаменить(Поле, ":", "");
		Поле = СтрЗаменить(Поле, Символы.ПС, " ");

		Текст = НСтр("ru = 'Заполните поле ""%1"" %2'") ;
		Текст = СокрЛП(СтрШаблон(Текст, СокрЛП(Поле), Постфикс));
		
		ПроверитьПоле(Корректно, Текст, Имя);
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПроверитьАдресОрганизации(Корректно)
	
	Если НЕ СоздатьМЧД_ЕФ(ЭтотОбъект) Тогда
		Возврат;
	КонецЕсли;
	
	Адрес = МЧДЕФСлужебный.РеквизитыОрганизации(ЭтотОбъект).Реквизиты.ЮридическийАдресЗначение;
	
	ПроверитьАдрес(Адрес, Корректно, "Организация");
	
КонецПроцедуры

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

&НаСервере
Процедура ПроверитьПоле(Корректно, Текст, Имя)
	
	Если НЕ ЗначениеЗаполнено(ЭтотОбъект[Имя]) Тогда
		СообщитьОшибку(Текст, Корректно, Имя);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция СообщитьОшибку(Текст, Корректно, Поле)
	
	ОбщегоНазначения.СообщитьПользователю(Текст, , Поле);
	Корректно = Ложь;
	
КонецФункции

&НаСервере
Процедура ОчиститьУдостоверение(Префикс)
	
	Поля = 
		"ВидДокумента,
		|Гражданство,
		|ДатаВыдачиДокумента,
		|ДатаРождения,
		|КемВыданДокумент,
		|КодПодразделения,
		|МестоРождения,
		|НомерДокумента,
		|СерияДокумента,
		|ПредставлениеУдостоверения,
		|ЛицоБезДовЮЛ";
	
	ОчиститьПоля(Поля, Префикс);
	
	ИзменитьОформлениеУдостоверения(Префикс);
	
КонецПроцедуры

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

&НаСервере
Процедура ОчиститьАдрес(Префикс)
	
	ЭтотОбъект[Префикс + "АдресПредставление"] = "";
	ЭтотОбъект[Префикс + "АдресЗначение"] = "";
	
КонецПроцедуры

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

	ОткрытьФорму("Обработка.ДокументооборотСКонтролирующимиОрганами.Форма.ПомощникМЧД_ПаспортныеДанные", 
		ДополнительныеПараметры,,,,,
		ОписаниеОповещения);
	
КонецПроцедуры
	
&НаСервере
Функция СкрытьГражданство()
	
	// Гражданство не нужно только в СФР
	Возврат НЕ (СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДЦБ ИЛИ СоздатьМЧДФНС);

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

&НаСервере
Функция СкрытьДатуРождения()

	// Дата не нужно только в ЦБ
	Возврат НЕ (СоздатьМЧДСФР ИЛИ СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДФНС);

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

&НаСервере
Функция СкрытьПол()

	// Пол не нужно в СФР и ЦБ
	Возврат НЕ (СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДФНС);

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

&НаСервере
Функция СкрытьМестоРождения()

	// Место рождения не нужно в СФР и ЦБ
	Возврат НЕ (СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДФНС);

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

&НаСервере
Функция СкрытьКемКогдаВыдан()

	// Место рождения не нужно в СФР и ЦБ
	Возврат НЕ (СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДЦБ);

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

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

&НаКлиенте
Процедура ПаспортныеДанные_Завершение(Результат, Префикс) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ПолучитьДанныеИзФормыПаспортныхДанных(Префикс, Результат);
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ПриОткрытии_ПослеПолученияКонтекста(Результат, ДополнительныеПараметры) Экспорт
	
	КонтекстЭДОКлиент = Результат.КонтекстЭДО;
	
КонецПроцедуры

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

&НаКлиенте
Процедура АдресПредставлениеНажатие_Завершение(Результат, Префикс) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	Конецесли;
	
	ЭтотОбъект[Префикс + "АдресЗначение"] = Результат.Значение;
	ЭтотОбъект[Префикс + "АдресПредставление"] = Результат.Представление;
	
КонецПроцедуры

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

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

&НаСервере
Процедура ОчиститьРасширенныеНастройки() Экспорт
	
	Поля = РасширенныеНастройкиФНС();
	ОчиститьПоля(Поля);
	
	Поля = РасширенныеНастройкиМЧДЕдиногоФормата();
	ОчиститьПоля(Поля);
	
	Поля = РасширенныеНастройкиМЧДФСС();
	ОчиститьПоля(Поля);
	
	Поля = РасширенныеНастройкиМЧДУПУП();
	ОчиститьПоля(Поля);
	
КонецПроцедуры

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ПараметрыПолномочийОбщие()
	
	ПараметрыФормы = "Организация,
		|СоздатьМЧДФНС,
		|СоздатьМЧДФСРАР,
		|СоздатьМЧДФТС,
		|СоздатьМЧДЦБ,
		|СоздатьМЧДСФР,
		|СоздатьМЧДРПН,
		|СоздатьМЧДРосстат";
	
	Возврат ПараметрыФормы;

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

&НаКлиентеНаСервереБезКонтекста
Функция ПараметрыПолномочий()
	
	ПараметрыФормы = "ВидПолномочий,
		|АдресДереваПолномочий";
	
	Возврат ПараметрыФормы;

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

&НаКлиенте
Функция ПроверитьОрганизацию()

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

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

&НаСервере
Функция СоздатьМЧД()
	
	Если СоздатьМЧДФНС Тогда
		МЧДФНС = СоздатьМЧДСервер(МЧДФНС);
	КонецЕсли;
	
	Если СоздатьМЧДСФР Тогда
		
		МЧДФСС = СоздатьМЧДСервер(МЧДФСС);
		МЧДУПУП = СоздатьУПУПСервер(МЧДУПУП);
		
		Если НадоСоздатьЗПЭД() Тогда
			ЗПЭД = СоздатьЗПЭДСервер(ЗПЭД);
		КонецЕсли;
		
	КонецЕсли;
	
	Если СоздатьМЧД_ЕФ(ЭтотОбъект) Тогда
		МЧДЕФ = СоздатьМЧДЕФСервер(МЧДЕФ);
		Если НЕ ЗначениеЗаполнено(МЧДЕФ) Тогда
			Возврат Ложь;
		КонецЕсли;
	КонецЕсли;
	
	Если СоздатьМЧДЦБ Тогда
		МЧДЦБ = СоздатьМЧДСервер(МЧДЦБ);
	КонецЕсли;
	
	Возврат Истина;
	
КонецФункции

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

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

		Объект.Фамилия	= ?(СтруктураФИО.Фамилия = "", ДоверительФамилия, СтруктураФИО.Фамилия);
		Объект.Имя		= ?(СтруктураФИО.Имя = "", ДоверительИмя, СтруктураФИО.Имя);
		Объект.Отчество	= ?(СтруктураФИО.Отчество = "", ДоверительОтчество, СтруктураФИО.Отчество);
		
		Объект.ИНН		 = СвойстваОрганизации.ИННФЛ;
		Объект.СНИЛС	 = СвойстваОрганизации.СНИЛС;
		Объект.Должность = НСтр("ru = 'Индивидуальный предприниматель'");
	
	КонецЕсли;
	
	Объект.ЭлектроннаяПочта = ДоверительПочта;
	Объект.Телефон = ДоверительТелефон;
	
	Если ИспользуетсяРежимТестирования Тогда
		Объект.ОператорРегНомерПФР = "010-001-000121";
	Иначе
		Объект.ОператорРегНомерПФР = "050-026-004654";
	КонецЕсли;
	Объект.ОператорНаименованиеКраткое = НСтр("ru = 'АО ""КАЛУГА АСТРАЛ""'");
	Объект.ОператорНаименованиеПолное = НСтр("ru = 'АКЦИОНЕРНОЕ ОБЩЕСТВО ""КАЛУГА АСТРАЛ""'");
	Объект.ОператорИНН = "4029017981";
	Объект.ОператорКПП = "402901001";
	
	Объект.Записать();
	
	Возврат Объект.Ссылка;
	
КонецФункции

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

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

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

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

&НаСервере
Процедура СоздатьУПУП_ПодставитьРеквизитыСотрудникаСтрахователя(Объект)
	
	СубъектДоверенности = 
		ПредопределенноеЗначение("Перечисление.СубъектыДоверенностиСтрахователя.СотрудникСтрахователя");

	ФИО				= Объект.ФИО.Добавить();
	ФИО.Владелец	= СубъектДоверенности;
	ФИО.Фамилия		= ДоверительФамилия;
	ФИО.Имя			= ДоверительИмя;
	ФИО.Отчество	= ДоверительОтчество;
	ФИО.Должность	= ДоверительДолжность;
	
КонецПроцедуры

&НаСервере
Процедура СоздатьУПУП_ПодставитьРеквизитыПредставителя(Объект)
	
	СубъектДоверенности = ПредопределенноеЗначение("Перечисление.СубъектыДоверенностиСтрахователя.СотрудникПредставителя");
		
	РеквизитыСубъекта			= Объект.РеквизитыСубъектов.Добавить();
	РеквизитыСубъекта.Владелец	= СубъектДоверенности;

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

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

	Если ЭтоМЧДФНС(Объект) Тогда
		СоздатьМЧД_ЗаписатьРеквизитыФНС(Объект);
	ИначеЕсли ЭтоМЧДФСС(Объект) Тогда
		СоздатьМЧД_ЗаписатьРеквизитыФСС(Объект)
	ИначеЕсли ЭтоМЧДЦБ(Объект) Тогда
		СоздатьМЧД_ПодставитьПолномочияЦБ(Объект)
	КонецЕсли;
	
	Объект.Записать();
	
	Возврат Объект.Ссылка;
	
КонецФункции

&НаСервере
Функция ЭтоМЧДФНС(МЧД)
	
	Возврат
		ТипЗнч(МЧД) = Тип("СправочникСсылка.МашиночитаемыеДоверенностиФНС")
		ИЛИ ТипЗнч(МЧД) = Тип("СправочникОбъект.МашиночитаемыеДоверенностиФНС");
		
КонецФункции

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

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

&НаСервере
Процедура СоздатьМЧД_ПодставитьПолномочияФСС(Объект)

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

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

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

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

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

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

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

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

	Объект.ДоверительФЛ_ИНН = ?(ЭтоНеРуссЮрЛицо ИЛИ НЕ ЭтоЮрЛицо, ДоверительИНН, "");
	Объект.ДоверительФЛ_СНИЛС = ?(НЕ ЭтоЮрЛицо ИЛИ ЭтоМЧДФСС(Объект) И ЭтоНеРуссЮрЛицо, ДоверительСНИЛС, "");
	
	Если ЭтоМЧДФНС(Объект) ИЛИ ЭтоМЧДЦБ(Объект) Тогда
		Объект.ДоверительФЛ_Гражданство = ?(ЭтоНеРуссЮрЛицо ИЛИ НЕ ЭтоЮрЛицо, ДоверительГражданство, Неопределено);
	КонецЕсли;
	
	Если ЭтоМЧДФНС(Объект) Тогда
		Объект.ДоверительФЛ_Пол = ?(ЭтоНеРуссЮрЛицо, ДоверительПол, Неопределено);
		Объект.ДоверительФЛ_МестоРожд = ?(ЭтоНеРуссЮрЛицо, ДоверительМестоРождения, "");
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаСервере
Процедура СоздатьМЧД_ПодставитьРеквизитыДоверителя_Адрес(Объект, СвойстваОрганизации)
	
	ЭтоЮрЛицо = СвойстваОрганизации.ЭтоЮридическоеЛицо;
	ЭтоРоссия = СвойстваОрганизации.ЭтоРоссийскаяОрганизация;
	
	Если ЭтоМЧДФСС(Объект) Тогда
		ИмяПоляАдрес = "ДоверительЮЛ_Адр";
	Иначе
		ИмяПоляАдрес = "ДоверительЮЛ_АдрРус";
		Объект.ДоверительЮЛ_АдрЛат = "";
	КонецЕсли;
	
	Если ЭтоЮрЛицо Тогда
		Если ЭтоРоссия Тогда
			АдресСтруктурой = Новый Структура("Строка, XML, JSON, Представление, Значение",
				СвойстваОрганизации.АдрЮР, СвойстваОрганизации.АдрЮР_XML, СвойстваОрганизации.АдрЮР_JSON,
				СвойстваОрганизации.АдрЮР, СвойстваОрганизации.АдрЮР_XML);
		Иначе
			АдресСтруктурой = Новый Структура("Строка, XML, JSON, Представление, Значение",
				СвойстваОрганизации.АдрИО, СвойстваОрганизации.АдрИО_XML, СвойстваОрганизации.АдрИО_JSON,
				СвойстваОрганизации.АдрИО, СвойстваОрганизации.АдрИО_XML);
		КонецЕсли;
		ДокументооборотСКОВызовСервера.ПреобразоватьАдресВФорматXML(АдресСтруктурой,
			ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.ЮрАдресОрганизации"));
		Объект.ДоверительЮЛ_АдрXML = АдресСтруктурой.XML;
		Если ЗначениеЗаполнено(АдресСтруктурой.XML) Тогда
			Объект[ИмяПоляАдрес] = ДокументооборотСКОВызовСервера.ПредставлениеКонтактнойИнформации(
				АдресСтруктурой.XML);
		Иначе
			Объект[ИмяПоляАдрес] = АдресСтруктурой.Представление;
		КонецЕсли;
	Иначе
		Объект.ДоверительЮЛ_АдрXML = "";
		Объект[ИмяПоляАдрес] = "";
	КонецЕсли;
		
КонецПроцедуры

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

	СтрокаУдостоверения.ВидДок 		= ПредставительВидДокумента;
	СтрокаУдостоверения.СерДок 		= ПредставительСерияДокумента;
	СтрокаУдостоверения.НомДок 		= ПредставительНомерДокумента;
	СтрокаУдостоверения.ДатаДок 	= ПредставительДатаВыдачиДокумента;
	СтрокаУдостоверения.ВыдДок 		= ПредставительКемВыданДокумент;
	СтрокаУдостоверения.КодВыдДок 	= ПредставительКодПодразделения;
	
	Объект.ПредставительФЛ_ИНН   = ПредставительИНН;
	Объект.ПредставительФЛ_СНИЛС = ПредставительСНИЛС;
	
	Если ЭтоМЧДЦБ(Объект) Тогда
		Объект.ПредставительФЛ_Должность = ПредставительДолжность;
	КонецЕсли;
	
	Если ЭтоМЧДФНС(Объект) ИЛИ ЭтоМЧДЦБ(Объект) Тогда
		Объект.ПредставительФЛ_Гражданство 	= ПредставительГражданство;
	КонецЕсли;
	
	Если ЭтоМЧДФНС(Объект) ИЛИ ЭтоМЧДФСС(Объект) Тогда
		Объект.ПредставительФЛ_ДатаРождения = ПредставительДатаРождения;
	КонецЕсли;
	
	Если ЭтоМЧДФНС(Объект) Тогда
		Объект.ПредставителиПредставление = Строка(Объект.Представитель);
		Объект.ПредставительЯвляетсяСотрудником = НЕ ПредставительНеСотрудник;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

	КонецЦикла;
	
КонецПроцедуры

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

&НаСервере
Функция ЭтоПолныеПолномочия() Экспорт

	Возврат ВидПолномочий = МЧДБРОКлиентСервер.ВсеПолномочия();

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

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

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

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

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

&НаКлиенте
Функция ОрганыОтправки()
	
	Органы = Новый Массив;
	
	Если СоздатьМЧДФНС Тогда
		Органы.Добавить("ФНС");
	КонецЕсли;
	Если СоздатьМЧДРосстат Тогда
		Органы.Добавить("Росстат");
	КонецЕсли;
	Если СоздатьМЧДСФР Тогда
		Органы.Добавить("СФР");
	КонецЕсли;
	Если СоздатьМЧДФСРАР Тогда
		Органы.Добавить("ФСРАР");
	КонецЕсли;
	Если СоздатьМЧДФТС Тогда
		Органы.Добавить("ФТС");
	КонецЕсли;
		
	Возврат Органы;

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

&НаКлиенте
Функция КоличествоМЧДсУчетомЗПЭД()
	
	Если НадоСоздатьЗПЭД Тогда
		Возврат ТаблицаДокументов.Количество() - 1; // ЗПЭД
	Иначе
		Возврат ТаблицаДокументов.Количество();
	КонецЕсли;
	
КонецФункции

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

&НаКлиенте
Процедура ПослеВыбораМЧД(Результат, ВходящийКонтекст) Экспорт
	
	Если Результат <> Неопределено Тогда
		ПоказатьЗначение(,Результат.Значение);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура СообщитьОбОтсутствииПодходящихСертификатов(Форма) Экспорт
	
	ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Сертификаты не обнаружены'"));
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПоказатьСтраницуОшибка()

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

&НаСервере
Функция ПроверитьНаОшибки()
	
	Результат = 
		(СоздатьМЧДФНС И Корректно(МЧДФНС) ИЛИ НЕ СоздатьМЧДФНС) // ФНС
		И (СоздатьМЧДСФР И Корректно(МЧДФСС) ИЛИ НЕ СоздатьМЧДСФР) // Только ФСС. УПУП и ЗПЭД не провеяем,т.к. просит учетную запись
		И (СоздатьМЧД_ЕФ(ЭтотОбъект) И Корректно(МЧДЕФ) ИЛИ НЕ СоздатьМЧД_ЕФ(ЭтотОбъект)) // ЕФ
		И (СоздатьМЧДЦБ И Корректно(МЧДЦБ) ИЛИ НЕ СоздатьМЧДЦБ);// ЦБ 
		
	Возврат Результат;
		
КонецФункции

&НаСервере
Функция Корректно(Ссылка)
	
	Результат = Ссылка.ПолучитьОбъект().ПроверитьЗаполнение();
	
	Если НЕ Результат Тогда
		
		Отбор = Новый Структура("Ссылка", Ссылка);		
		НайденныеСтроки = ТаблицаДокументов.НайтиСтроки(Отбор);
			
		Представление = НайденныеСтроки[0].Представление;
		
		Текст = СтрШаблон(НСтр("ru = 'Зайдите в ""%1"" в п.3 и исправьте найденные ошибки'"), Представление);
		ОбщегоНазначения.СообщитьПользователю(Текст);
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция ОтпечатокРуководителя()
	
	// ВладелецЭЦП будет заполнен, если пришли из заявления
	Возврат ДокументооборотСКОВызовСервера.ОтпечатокРуководителя(Организация, ВладелецЭЦП);

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

&НаСервере
Процедура ИзменитьОформлениеРасширенныхНастроек() Экспорт
	
	Элементы.РасширенныеНастройки.Видимость = СоздатьМЧДФНС ИЛИ СоздатьМЧД_ЕФ(ЭтотОбъект) ИЛИ СоздатьМЧДСФР;
	
КонецПроцедуры

&НаСервере
Функция КППОрганизации() Экспорт
	
	Возврат ОбработкаЗаявленийАбонента.КППОрганизации(Организация);
	
КонецФункции

&НаКлиенте
Процедура ОткрытьСтраницуСертификат()
	
	АктивизироватьСтраницу(
		Элементы.Страницы,
		Элементы.Сертификат);
		
	АктивизироватьСтраницу(
		Элементы.Сертификат_Страницы,
		Элементы.СтраницаВыборСертификата);
	
КонецПроцедуры

&НаКлиенте
Процедура ИнициализироватьСертификатРуководителя()

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

&НаКлиенте
Процедура Далее_ПослеПоискаСертификата(Результат, ВходящийКонтекст)Экспорт

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

&НаСервере
Функция ПредставительНеЗаполнен()
	
	Пустой = 
		НЕ ЗначениеЗаполнено(Представитель) 
		ИЛИ ТипЗнч(Представитель) = Тип("Строка");
		
	Возврат Пустой;
		
КонецФункции

&НаСервере
Функция ПредставительЭтоСтрока()
	
	Возврат ТипЗнч(Представитель) = Тип("Строка") И ЗначениеЗаполнено(Представитель);
		
КонецФункции

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

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

&НаКлиенте
Процедура ПолучитьСертификатУчетнойЗаписи(ОписаниеЗавершения)
	
	Отпечаток = ОтпечатокСертификатаУчетнойЗаписи();
	
	Органы = Новый Массив;
	ДобавитьОрганДляПоискаСертификата(Органы, СоздатьМЧДФНС, ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ФНС"));
	ДобавитьОрганДляПоискаСертификата(Органы, СоздатьМЧДРосстат, ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ФСГС"));
	ДобавитьОрганДляПоискаСертификата(Органы, СоздатьМЧДЦБ, ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ЦБ"));
	
	ПолучитьСертификатПредставителяПоОтпечатку(
		ОписаниеЗавершения, 
		Отпечаток, 
		МестоХраненияКлючаУчетнойЗаписи.МодельХраненияЗакрытогоКлюча, 
		Органы);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ДобавитьОрганДляПоискаСертификата(Органы, Условие, НовыйОрган)
	
	Если Условие Тогда
		Органы.Добавить(НовыйОрган);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ИспользоватьАвтонастройку(ОрганСтрокой)
	
	Возврат Мультирежим.РеквизитНастроекОбмена(Организация, ОрганСтрокой, "ИспользоватьАвтонастройку");
	
КонецФункции

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

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

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

&НаСервере
Процедура ПолучитьСертификатПредставителяПоBase64(СтрокаBase64, Органы, Отпечаток)
	
	ДвДанныеЛокальногоСертификата = Base64Значение(СтрокаBase64);
	Сертификат = Новый СертификатКриптографии(ДвДанныеЛокальногоСертификата);
	
	ПолучитьСертификатПредставителяПоСертификату(Сертификат, Органы, Отпечаток);
	
КонецПроцедуры

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

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

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

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

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

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

&НаСервере
Функция ОтпечатокФСС()
	
	Возврат ОтпечатокИзНастрокиОбмена("ФСС", "СертификатСтрахователяОтпечаток");
	
КонецФункции

&НаСервере
Функция ОтпечатокФТС()
	
	Возврат ОтпечатокИзНастрокиОбмена("ФТС", "СертификатАбонентаОтпечаток");
	
КонецФункции

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

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

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

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

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

&НаКлиенте
Процедура ПерейтиНаШагПослеСоздания() Экспорт
	
	Если СопоставлениеМЧД.Количество() = 0 ИЛИ ВсеСертификатыПустые() Тогда
		ПерейтиНаСтраницуСертификат();
	Иначе
		АктивизироватьСтраницуСопоставление();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура АктивизироватьСтраницуСопоставление() Экспорт
	
	ИзменитьОформлениеСтраницыСопоставление();
	
	АктивизироватьСтраницу(
		Элементы.Страницы,
		Элементы.Сопоставление);
	
КонецПроцедуры
	
&НаКлиенте
Процедура ИзменитьОформлениеСтраницыСопоставление() Экспорт
	
	Отбор = Новый Структура();
	Отбор.Вставить("ЕстьОшибка", Истина);
	
	ЕстьОшибки = СопоставлениеМЧД.НайтиСтроки(Отбор).Количество() > 0;
	ОрганыСОшибками = ОрганыСОшибками();
		
	Если ЕстьОшибки Тогда
	
		Если ОрганыСОшибками.Количество() = 1 Тогда
			Шаблон = НСтр("ru = 'Обратите внимание! Для успешного обмена с гос. органами нужен сертификат представителя и МЧД. В настройках обмена с гос. органом %2 не удалось найти сертификат представителя %1. Поэтому МЧД будет выпущен, но отправка отчетности в этот орган в программе будет недоступна.'");
		Иначе
			Шаблон = НСтр("ru = 'Обратите внимание! Для успешного обмена с гос. органами нужен сертификат представителя и МЧД. В настройках обмена с гос. органами %2 не удалось найти сертификат представителя %1. Поэтому МЧД будут выпущены, но отправка отчетности в эти органы в программе будет недоступна.'");
		КонецЕсли;
		
		Текст = СтрШаблон(Шаблон, ФИОвРодительном(Представитель), ОрганыСОшибкамиСтрокой());
		
		Элементы.Сопоставление_ТекстОшибки.Заголовок = Текст;
		
	Иначе
		
		Если ЭтоВызовИзЗаявления Тогда
			Шаблон = НСтр("ru = 'Для успешного обмена с гос.органами от лица %1 необходимо будет сохранить новые МЧД в настройки обмена с гос. органами. Сохранение будет выполнено автоматически после одобрения заявления и регистрации МЧД в гос. органах. Снимите флажок, если в этой программе МЧД использоваться не будет.'");
		Иначе
			Шаблон = НСтр("ru = 'Для успешного обмена с гос.органами от лица %1 необходимо будет сохранить новые МЧД в настройки обмена с гос. органами. Сохранение будет выполнено автоматически после регистрации МЧД в гос. органах. Снимите флажок, если в этой программе МЧД использоваться не будет.'");
		КонецЕсли;
		Текст = СтрШаблон(Шаблон, ФИОвРодительном(Представитель));
		
		Элементы.Сопоставление_Текст.Заголовок = Текст;
		
	КонецЕсли;
	
	Элементы.Сопоставление_ГруппаОшибка.Видимость = ЕстьОшибки;
	Элементы.Сопоставление_Текст.Видимость = НЕ ЕстьОшибки;
	
КонецПроцедуры

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

&НаСервере
Функция ИгнорироватьОшибки()

	Возврат ЭтоВызовИзЗаявленияНаПодключение И НЕ ЗначениеЗаполнено(УчетнаяЗапись);

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

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

&НаСервере
Функция ВсеСертификатыПустые()
	
	Если ЭтоВызовИзЗаявленияНаПодключение Тогда
		Возврат СопоставлениеМЧД.Количество() = 0 И ОтправкаВозможна;
	КонецЕсли;

	Отбор = Новый Структура();
	Отбор.Вставить("Отпечаток", "");
	
	ВсеПустые = СопоставлениеМЧД.Количество() = СопоставлениеМЧД.НайтиСтроки(Отбор).Количество();
		
	Возврат ВсеПустые;

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

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

&НаСервере
Процедура ИнициализироватьТаблицуСопоставлениеМЧД()
	
	СопоставлениеМЧД.Очистить();
	ИнициализироватьТаблицуСопоставлениеМЧД_ИФНС();
	ИнициализироватьТаблицуСопоставлениеМЧД_Росстат();
	ИнициализироватьТаблицуСопоставлениеМЧД_ФСС();
	ИнициализироватьТаблицуСопоставлениеМЧД_ФТС();
	ИнициализироватьТаблицуСопоставлениеМЧД_ЦБ();
	
КонецПроцедуры

&НаСервере
Процедура ИнициализироватьТаблицуСопоставлениеМЧД_Росстат()

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

&НаСервере
Функция ВыборкаИзНастроекОбмена(ИмяРегистра, ИмяСертификата)
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
	               |	НастройкиОбменаФСС.Организация КАК Организация,
	               |	НастройкиОбменаФСС.ИспользоватьОбмен КАК ИспользоватьОбмен,
	               |	НастройкиОбменаФСС.ИспользоватьНесколько КАК ИспользоватьНесколько,
	               |	НастройкиОбменаФСС.Доверенность КАК Доверенность
	               |ПОМЕСТИТЬ ВТСписокОрганизаций
	               |ИЗ
	               |	РегистрСведений.НастройкиОбменаФСС КАК НастройкиОбменаФСС
	               |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК Организации
	               |		ПО (Организации.Ссылка = НастройкиОбменаФСС.Организация)
	               |ГДЕ
	               |	НастройкиОбменаФСС.Пользователь = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
	               |	И НастройкиОбменаФСС.ИспользоватьОбмен = ИСТИНА
	               |	И НЕ Организации.ПометкаУдаления
	               |	И НастройкиОбменаФСС.Организация = &Организация
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	ВТСписокОрганизаций.Организация КАК Организация,
	               |	ВТСписокОрганизаций.ИспользоватьОбмен КАК ИспользоватьОбмен,
	               |	ВТСписокОрганизаций.ИспользоватьНесколько КАК ИспользоватьНесколько,
	               |	ВЫБОР
	               |		КОГДА ВТСписокОрганизаций.ИспользоватьНесколько
	               |			ТОГДА НастройкиОбменаФСС.Доверенность
	               |		ИНАЧЕ ВТСписокОрганизаций.Доверенность
	               |	КОНЕЦ КАК Доверенность
	               |ИЗ
	               |	ВТСписокОрганизаций КАК ВТСписокОрганизаций
	               |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиОбменаФСС КАК НастройкиОбменаФСС
	               |		ПО ВТСписокОрганизаций.Организация = НастройкиОбменаФСС.Организация
	               |			И (НастройкиОбменаФСС.Пользователь = &Пользователь)
	               |			И (НЕ НастройкиОбменаФСС.СертификатСтрахователяОтпечаток = """")
	               |ГДЕ
	               |	(ВТСписокОрганизаций.ИспользоватьНесколько = ЛОЖЬ
	               |			ИЛИ ВТСписокОрганизаций.ИспользоватьНесколько = ИСТИНА
	               |				И НЕ НастройкиОбменаФСС.Пользователь ЕСТЬ NULL)";
	
	Запрос.Текст = СтрЗаменить(Запрос.Текст, "НастройкиОбменаФСС", ИмяРегистра);
	Запрос.Текст = СтрЗаменить(Запрос.Текст, "СертификатСтрахователяОтпечаток", ИмяСертификата);

	Запрос.УстановитьПараметр("Пользователь", ПредставительПользователь);
	Запрос.УстановитьПараметр("Организация", Организация);
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	Возврат Выборка;
	
КонецФункции

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

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

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

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

&НаСервере
Процедура ИнициализироватьТаблицуСопоставлениеМЧД_ИФНС()
	
	Если НЕ СоздатьМЧДФНС 
		ИЛИ НЕ ПодключенОрган(Перечисления.ТипыКонтролирующихОрганов.ФНС) И НЕ ЭтоВызовИзЗаявленияНаПодключение Тогда
		Возврат;
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Истина);
	
	Запрос = Новый Запрос(
			"ВЫБРАТЬ РАЗРЕШЕННЫЕ
			|	РегистрацияВИФНС.Ссылка КАК ИФНС,
			|	ЕСТЬNULL(ТЧПодписанты.Представитель, РегистрацияВИФНС.Представитель) КАК Представитель,
			|	ЕСТЬNULL(ТЧПодписанты.Доверенность, РегистрацияВИФНС.Доверенность) КАК СтараяМЧД,
			|	РегистрацияВИФНС.Код КАК Код,
			|	РегистрацияВИФНС.КПП КАК КПП
			|ИЗ
			|	Справочник.РегистрацииВНалоговомОргане КАК РегистрацияВИФНС
			|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РегистрацииВНалоговомОргане.Подписанты КАК ТЧПодписанты
			|		ПО (ТЧПодписанты.Ссылка = РегистрацияВИФНС.Ссылка)
			|			И (ТЧПодписанты.Представитель = &Представитель)
			|ГДЕ
			|	РегистрацияВИФНС.Владелец = &Владелец
			|	И НЕ РегистрацияВИФНС.ПометкаУдаления");
		
	Запрос.УстановитьПараметр("Владелец", Организация);
	Запрос.УстановитьПараметр("Представитель", Представитель);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		
		Строка = СопоставлениеМЧД.Добавить();
		Строка.ИФНС = Выборка.ИФНС;
		Строка.ИспользоватьНесколько = Выборка.ИФНС.Подписанты.Количество() > 0;
		
		ОрганПредставление = СтрШаблон(НСтр("ru = 'ИФНС %1 
                                |КПП %2'"), Выборка.Код, Выборка.КПП);
		Строка.ОрганПредставление = ОрганПредставление;
		Строка.Орган = ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ФНС");
		
		Строка.Пометка = Истина;
		Строка.СтараяМЧД = Выборка.СтараяМЧД;
		Строка.НоваяМЧД  = МЧДФНС;
		
		Строка.СтараяМЧД_Представление = ПредставлениеМЧД(Выборка.СтараяМЧД, Строка.ОрганПредставление, НСтр("ru = 'ФНС'"), Выборка);
		Строка.НоваяМЧД_Представление  = ПредставлениеМЧД(МЧДФНС, Строка.ОрганПредставление, НСтр("ru = 'ФНС'"));
			
	КонецЦикла;
	
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура ПроверитьПредставителяЦБ_ПослеВопроса(Ответ, ВходящийКонтекст) Экспорт
	
	Кнопки = ВходящийКонтекст.Кнопки;
	
	Если Ответ = Кнопки[1].Значение Тогда
		ВходящийКонтекст.СтрокаЦБ.Пометка = Ложь;
	КонецЕсли;
		
	ВыполнитьОбработкуОповещения(ВходящийКонтекст.ОписаниеЗавершения);
	
КонецПроцедуры

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

&НаСервере
Функция СвойстваОрганизации(Источник)
	
	Возврат ДокументооборотСКОВызовСервера.ПолучитьСвойстваОрганизации(Источник);
	
КонецФункции

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


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