Документооборот с контролирующими органами / Направление 1С-Отчетности / Модуль формы

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

&НаКлиенте
Перем ДанныеЗаполнения;

&НаКлиенте
Перем ДанныеОрганизации;

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОтчетностьПодписываетПредставительПриИзменении(Элемент)
	
	МодифицированностьМЧД = Истина;
	УправлениеФормой(ЭтаФорма);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ДолжностьПриИзменении(Элемент)
	
	МодифицированностьМЧД = Истина;
	УправлениеФормой(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

#Область ОтправкаЗаявления

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция МЧДЦБПодписана(ДоверенностьСсылка)
	
	Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДоверенностьСсылка,
		"ЭлектроннаяПодпись").Получить() <> Неопределено;
	
КонецФункции

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

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

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