Формирование исходящего запроса ЕГАИС / Модуль

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

&НаКлиенте
Перем ПолученныеОбъекты;

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ОрганизацииЕГАИСпоИНН(Знач ИНН)
	
	Возврат Справочники.КлассификаторОрганизацийЕГАИС.ОрганизацииЕГАИСпоИНН(ИНН);
	
КонецФункции

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

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

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