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

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

&НаКлиенте
Перем ВыполняемоеОповещение;

&НаКлиенте
Перем ОповещениеОЗавершении;

&НаКлиенте
Перем ФормаВладелец;

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

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

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

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

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

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

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

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

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

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


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

&НаКлиенте
Процедура ЗакрытьФорму(Команда)

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

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

&НаКлиенте
Процедура Показать(Команда)
	
	Подключаемый_ЗакрытьФорму();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура Подключаемый_ПолучитьОшибкиИЗакрытьФорму()
	
	ПолучитьВсеОшибки();
	РазрешитьЗакрытиеФормы 		 = Истина;
	ЗакрытьБезДальнейшихДействий = Истина;
	Подключаемый_ЗакрытьФорму();
	
КонецПроцедуры


#Область ВыводНадписей

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция СтрокаКрасным(ИсходнаяСтрока)

	Возврат Новый ФорматированнаяСтрока(ИсходнаяСтрока, ,Новый Цвет(255,0,0));

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

&НаКлиентеНаСервереБезКонтекста
Функция СтрокаСерым(ИсходнаяСтрока)

	Возврат Новый ФорматированнаяСтрока(ИсходнаяСтрока, ,Новый Цвет(128,128,128));

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

&НаКлиенте
Процедура УстановитьТекущуюОрганизацию(НовоеЗначениеТекущейОрганизаци)

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

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

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

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

&НаКлиенте
Функция ДополнительныеПараметрыОперации()

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

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

&НаКлиенте
Процедура ОбработкаОповещенийОбновления(ИмяСобытия, Параметр, Источник)

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

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

&НаКлиенте
Процедура ОбработатьЗавершениеДлительногоОбмена(Параметр)

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

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

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


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

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

// Используется в следующих случаях:
//   1. При отправке в ФТС может быть выведена своя форма ошибок.
//   2. Если пользователь отказался от ввода пароля и это единственная причина, по которой отправка не выполнилась.
//
&НаКлиенте
Процедура ЗавершитьБезДальнейшихДействий()

	РазрешитьЗакрыватьФорму();
	ЗакрытьБезДальнейшихДействий = Истина;
	
	Подключаемый_ЗакрытьФорму();

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

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

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

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

&НаКлиенте
Процедура РазрешитьЗакрыватьФорму()
	
	// Форму не закрываем, но разрешаем закрыть вручную. 
	РазрешитьЗакрытиеФормы = Истина;

	// Кнопку закрытия показываем в самом конце, когда уже выполнены все действия.
	Элементы.ФормаЗакрыть.Видимость = Истина;
	
КонецПроцедуры

&НаКлиенте
Функция ЗаменитьДвойнойПробел(Знач Строка)
	
	Пока СтрНайти(Строка, "  ") <> 0 Цикл
		Строка = СокрЛП(СтрЗаменить(Строка, "  ", " "));
	КонецЦикла;
	
	Возврат Строка;
	
КонецФункции

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

&НаСервере
Процедура ОбработатьВходныеПараметрыОтправкиЗаявления(Параметры)

	ЭтоОтправкаЗаявления = Истина;
	ТекущаяОрганизация 	= Параметры.Организация;
	СоздаватьКлюч 		= Параметры.СоздаватьКлюч;
	
КонецПроцедуры

&НаСервере
Процедура ОбработатьВходныеПараметрыОбновления(Параметры)

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОтработатьСменуЭтапаОбмена(Параметр)

	ПометитьЭтапыПройденными(Параметр);
	ОпределитьКоличествоПройденныхЭтаповОбмена();
	
	ВывестиПоясняющийТекстПриВыполняющейсяОперации(ЭтотОбъект);

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

&НаКлиенте
Процедура ОтработатьСменуЭтапаРасшифровки(Параметр)

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

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

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

&НаКлиенте
Процедура ДобавитьУсловиеОтбора(Отбор, Ключ, Значение)
	
	Если ЗначениеЗаполнено(Значение) Тогда
		Отбор.Вставить(Ключ, Значение);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

#Область Автозапрос

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

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

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

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

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

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

#Область НовыеСообщения

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

&НаСервере
Процедура УдалитьИзДереваТекущуюСсылку(НовоеДеревоНовых)

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

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

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

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

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

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

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

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

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