Документооборот с контролирующими органами / Форма состояния отправки / Модуль формы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ВыгрузитьВсеФайлыИПодписи(Команда)
	
	Если ЗначениеЗаполнено(Отправка) Тогда
		ВыгрузитьЦиклыОбмена();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОбновитьЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	УправлениеЭУ();
	
	// Перерисовываем другие формы при необходимости
	ОповеститьОбОкончанииОтправки();
	
	ДлительнаяОтправкаКлиент.ОповеститьОЗавершенииОбмена(); // Из формы этапов отправки.
	
КонецПроцедуры

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

	ЭлектронныйДокументооборотСКонтролирующимиОрганами.ОтметитьКакПрочтенное(Ссылка);

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

&НаСервере
Процедура УстановитьШиринуТаблицыДляФТС()

	Если ВидКонтролирующегоОргана = Перечисления.ТипыКонтролирующихОрганов.ФТС
		И ТипЗнч(Ссылка) <> Тип("СправочникСсылка.МашиночитаемыеДоверенностиРаспределенныйРеестр") Тогда
		Элементы.СведенияПоРезультатуЭтапа1.Ширина = 50;
		Элементы.СведенияПоРезультатуЭтапа2.Ширина = 50;
		Элементы.СведенияПоРезультатуЭтапа3.Ширина = 50;
		Элементы.СведенияПоРезультатуЭтапа4.Ширина = 50;
	КонецЕсли;

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

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

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

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

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

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

&НаСервере
Функция ЭлементНаименованиеЭтапа(НомерСтроки)
	Возврат Элементы["НаименованиеЭтапа" + Строка(НомерСтроки)];
КонецФункции

&НаСервере
Функция ЭлементДатаСовершенияЭтапа(НомерСтроки)
	Возврат Элементы["ДатаСовершенияЭтапа" + Строка(НомерСтроки)];
КонецФункции

&НаСервере
Функция ЭлементКомментарийЭтапа(НомерСтроки)
	Возврат Элементы["КомментарийЭтапа" + Строка(НомерСтроки)];
КонецФункции

&НаСервере
Функция ЭлементПротоколЭтапа(НомерСтроки)
	Возврат Элементы["ПротоколЭтапа" + Строка(НомерСтроки)];
КонецФункции

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

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

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

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

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

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

&НаСервере
Процедура ПрорисоватьНеотправленныеИзвещения(ТекущееСостояниеОтправки)

	Элементы.БлокНеотправленныхСообщений.Видимость = ТекущееСостояниеОтправки.НеотправленныеИзвещения.ЕстьНеотправленныеИзвещения;

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

&НаСервере
Процедура ПрорисоватьКритическиеОшибки(ТекущееСостояниеОтправки)

	// Критические сообщения
	ЕстьКритическиеОшибки = ТекущееСостояниеОтправки.ЕстьКритическиеОшибки;
	Элементы.БлокКритическихОшибок.Видимость 	= ЕстьКритическиеОшибки;
	Элементы.ЗначокКритическойОшибки.Видимость 	= ЕстьКритическиеОшибки;

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

&НаСервере
Процедура ПрорисоватьТаблицу(ТекущееСостояниеОтправки)

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

&НаСервере
Процедура ПрорисоватьИсториюОтправок()

	ВсеОтправки = ЭлектронныйДокументооборотСКонтролирующимиОрганами.ВсеОтправки(Ссылка);
	Элементы.ВсеОтправки.Видимость = ВсеОтправки.Количество() > 1;

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

&НаСервере
Процедура ЗаполнитьДанныеВШапкеФормы()

	Период = ПредставлениеПериода;
	Если СтрНайти(Период, "0001") > 0 Тогда
		Период = "";
	КонецЕсли;
	Период = ?(ЗначениеЗаполнено(Период)," (" + Период + ")", "");
	
	ЗаголовокФормы = Наименование + Период;
	
	Элементы.Наименование.Заголовок	= ЗаголовокФормы;
	
	Получатель 	= ПредставлениеГосОргана;
	Отправитель = Организация;
	
	// Если это входящая переписка заполняем получателя и отправителя наоборот
	Если ТипЗнч(Ссылка) = Тип("СправочникСсылка.ПерепискаСКонтролирующимиОрганами") Тогда
		Если Ссылка.Статус = Перечисления.СтатусыПисем.Полученное Тогда
			Получатель 	= Организация;
			Отправитель = ПредставлениеГосОргана;
		КонецЕсли;
	КонецЕсли;
	
	// Отправитель
	Если ЗначениеЗаполнено(Отправитель) Тогда
		Элементы.ОтКого.Заголовок = Отправитель;
	Иначе
		Элементы.ЗаголовокОтКого.Видимость 	= Ложь;
		Элементы.ОтКого.Видимость 			= Ложь;
	КонецЕсли;
	
	// Получатель
	Если ЗначениеЗаполнено(Получатель) Тогда
		Элементы.Кому.Заголовок	= Получатель;
	Иначе
		Элементы.ЗаголовокКому.Видимость 	= Ложь;
		Элементы.Кому.Видимость 			= Ложь;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

&НаСервере
Функция НомерТекущегоСостоянияВТаблицеСостояний(ТаблицаСостояний)
	
	НомерТекущегоЭтапа = 0;
	Для каждого СтрокаТаблицыСостояний Из ТаблицаСостояний Цикл
		
		НомерСтроки = ТаблицаСостояний.Индекс(СтрокаТаблицыСостояний) + 1;
		Если СтрокаТаблицыСостояний.ЭтапПройден Тогда
			 НомерТекущегоЭтапа = НомерСтроки;
		КонецЕсли; 
		
	КонецЦикла;
	
	Возврат НомерТекущегоЭтапа;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПрорисоватьСПАРК()

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

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

&НаКлиенте
Процедура ПослеПодтвержденияЧтоЭДООбязателен(Результат, ВходящийКонтекст) Экспорт
	
	УправлениеЭУ();
	
КонецПроцедуры

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

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

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