#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
Заголовок = "Протокол " + Параметры.ИмяФайла;
СообщениеПротокол = Параметры.СообщениеПротокол;
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
Попытка
ПутьКФайлу = ПолучитьИмяВременногоФайла();
ПолучитьИзВременногоХранилища(Параметры.Протокол).Записать(ПутьКФайлу);
ТекстИзФайла = КонтекстЭДОСервер.ПрочитатьТекстИзФайла(ПутьКФайлу, , Истина);
ОперацииСФайламиЭДКО.УдалитьВременныйФайл(ПутьКФайлу);
Исключение
Отказ = Истина;
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Ошибка чтения протокола из файла: %1'"), Символы.ПС + Символы.ПС + ИнформацияОбОшибке().Описание);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
Возврат;
КонецПопытки;
ЭтоФорматXML = Ложь;
ДеревоXML = КонтекстЭДОСервер.ЗагрузитьСтрокуXMLВДеревоЗначений(ТекстИзФайла);
Если ДеревоXML <> Неопределено Тогда
ЭтоФорматXML = Истина;
КонецЕсли;
Если ЭтоФорматXML Тогда
УзелПротокол = ДеревоXML.Строки.Найти("protocol", "Имя");
Если УзелПротокол <> Неопределено Тогда
УзелСтатусПротокола = УзелПротокол.Строки.Найти("status", "Имя");
СтатусПротокола = "";
Если УзелСтатусПротокола <> Неопределено Тогда
СтатусПротокола = XMLЗначение(Тип("Строка"), УзелСтатусПротокола.Значение);
КонецЕсли;
УзелСообщениеПротокола = УзелПротокол.Строки.Найти("msg", "Имя");
СообщениеПротокола = "";
Если УзелСообщениеПротокола <> Неопределено Тогда
СообщениеПротокола = XMLЗначение(Тип("Строка"), УзелСообщениеПротокола.Значение);
КонецЕсли;
УзелТитульный = УзелПротокол.Строки.Найти("title", "Имя");
Если УзелТитульный <> Неопределено Тогда
ЗначенияЭлементов = Новый Соответствие;
УзлыЭлементы = УзелТитульный.Строки.НайтиСтроки(Новый Структура("Имя, Тип", "item", "Э"));
Для каждого УзелЭлемент Из УзлыЭлементы Цикл
УзелИмяЭлемента = УзелЭлемент.Строки.Найти("name", "Имя");
Если УзелИмяЭлемента <> Неопределено И ЗначениеЗаполнено(УзелИмяЭлемента.Значение) Тогда
УзелЗначениеЭлемента = УзелЭлемент.Строки.Найти("value", "Имя");
ЗначенияЭлементов.Вставить(УзелИмяЭлемента.Значение, ?(УзелЗначениеЭлемента <> Неопределено, XMLЗначение(Тип("Строка"), УзелЗначениеЭлемента.Значение), Неопределено));
КонецЕсли;
КонецЦикла;
ЗначенияУведомлений = Новый Массив;
УзелГруппа = УзелПротокол.Строки.Найти("group", "Имя");
ЗаголовокГруппы = "";
Если УзелГруппа <> Неопределено Тогда
Для каждого УзелУведомление Из УзелГруппа.Строки Цикл
СообщениеЭлемента = СокрЛП(XMLЗначение(Тип("Строка"), УзелУведомление.Значение));
Если УзелУведомление.Тип <> "Э" Тогда
Если УзелУведомление.Имя = "msg" Тогда
ЗаголовокГруппы = СообщениеЭлемента;
КонецЕсли;
Продолжить;
КонецЕсли;
УзелСообщение = УзелУведомление.Строки.Найти("msg", "Имя");
Если УзелСообщение <> Неопределено И ЗначениеЗаполнено(УзелСообщение.Значение) Тогда
СообщениеЭлемента = " - " + СокрЛП(XMLЗначение(Тип("Строка"), УзелСообщение.Значение));
КонецЕсли;
ЗначенияУведомлений.Добавить(СообщениеЭлемента);
КонецЦикла;
КонецЕсли;
ДатаВремяОтправки = Формат(КонтекстЭДОСервер.ДатаВремяИзСтроки(ЗначенияЭлементов["dt_send"]), "ДЛФ=DDT; ДП=-");
ПротоколЯвляетсяПоложительным = "";
ОтчетСдан = КонтекстЭДОСервер.ПротоколФСГСОтчетСданПоТексту(СтатусПротокола, СообщениеПротокола);
Если ОтчетСдан Тогда
ПротоколЯвляетсяПоложительным = "Да";
ИначеЕсли УзелГруппа <> Неопределено Тогда
ПротоколЯвляетсяПоложительным = "Нет";
Элементы.НадписьПротоколЯвляетсяПоложительным.ЦветТекста = Новый Цвет(255, 0, 0);
КонецЕсли;
Если ПротоколЯвляетсяПоложительным = "Да" И НРег(СтатусПротокола) = "ok" Тогда
ТекстПротокола = "ОТЧЕТ ПРИНЯТ УСПЕШНО." + Символы.ПС + Символы.ПС + "Уведомление о при~ме в обработку." + Символы.ПС + Символы.ПС;
ИначеЕсли ПротоколЯвляетсяПоложительным = "Да" Тогда
ТекстПротокола = "ОТЧЕТ ПРИНЯТ УСПЕШНО." + Символы.ПС + Символы.ПС + СообщениеПротокола + Символы.ПС + Символы.ПС;
Иначе
ТекстПротокола = СообщениеПротокола + Символы.ПС + Символы.ПС;
КонецЕсли;
Если ЗначенияЭлементов["dt_load"] <> Неопределено Тогда
ТекстПротокола = ТекстПротокола + "Дата при~ма отч~та: " + Формат(КонтекстЭДОСервер.ДатаВремяИзСтроки(ЗначенияЭлементов["dt_load"]), "ДЛФ=DT; ДП=-") + Символы.ПС;
КонецЕсли;
Если ЗначенияЭлементов["obj"] <> Неопределено Тогда
Если СокрЛП(ЗначенияЭлементов["ko"]) = СокрЛП(ЗначенияЭлементов["obj"]) Тогда
ИдентификаторРеспондента = СокрЛП(ЗначенияЭлементов["obj"]);
Иначе
ИдентификаторРеспондента = СокрЛП(Строка(ЗначенияЭлементов["ko"]) + " " + ЗначенияЭлементов["obj"]);
КонецЕсли;
ТекстПротокола = ТекстПротокола + "Идентификатор респондента: " + ИдентификаторРеспондента + Символы.ПС;
КонецЕсли;
Если ЗначенияЭлементов["file"] <> Неопределено Тогда
ТекстПротокола = ТекстПротокола + "Имя файла с отч~том: " + СокрЛП(ЗначенияЭлементов["file"]) + Символы.ПС;
КонецЕсли;
Если ЗначенияЭлементов["dt_send"] <> Неопределено Тогда
ТекстПротокола = ТекстПротокола + "Дата передачи файла: " + Формат(КонтекстЭДОСервер.ДатаВремяИзСтроки(ЗначенияЭлементов["dt_send"]), "ДЛФ=DT; ДП=-") + Символы.ПС;
КонецЕсли;
ТекстПротокола = ТекстПротокола + Символы.ПС;
Если ЗначенияЭлементов["form_name"] <> Неопределено Тогда
ТекстПротокола = ТекстПротокола + "Форма отч~та: " + СокрЛП(ЗначенияЭлементов["form_name"]) + Символы.ПС;
КонецЕсли;
Если ЗначенияЭлементов["form_code"] <> Неопределено Тогда
ТекстПротокола = ТекстПротокола + "Код формы отч~та: " + СокрЛП(ЗначенияЭлементов["form_code"]) + Символы.ПС;
КонецЕсли;
Если ЗначенияЭлементов["year"] <> Неопределено Тогда
ТекстПротокола = ТекстПротокола + "Год отч~та: " + СокрЛП(ЗначенияЭлементов["year"]) + Символы.ПС;
КонецЕсли;
Если ЗначенияЭлементов["period"] <> Неопределено Тогда
ТекстПротокола = ТекстПротокола + "Код периода отч~та: " + СокрЛП(ЗначенияЭлементов["period"]) + Символы.ПС;
КонецЕсли;
Если ЗначенияУведомлений.Количество() > 0 Тогда
ТекстПротокола = ТекстПротокола + Символы.ПС + ЗаголовокГруппы + ":" + Символы.ПС;
Для каждого Уведомление Из ЗначенияУведомлений Цикл
ТекстПротокола = ТекстПротокола + Уведомление + Символы.ПС;
КонецЦикла;
КонецЕсли;
ТекстПротокола = СтрЗаменить(СтрЗаменить(ТекстПротокола, "~", Символ(1105)), """, """");
Иначе
ЭтоФорматXML = Ложь;
КонецЕсли;
Иначе
ЭтоФорматXML = Ложь;
КонецЕсли;
КонецЕсли;
Если НЕ ЭтоФорматXML Тогда
ДатаВремяОтправки = "";
Для СчетчикСтрок = 1 По СтрЧислоСтрок(ТекстИзФайла) Цикл
ТекСтрока = СтрПолучитьСтроку(ТекстИзФайла, СчетчикСтрок);
ПозСтрДата = СтрНайти(ТекСтрока, "Дата передачи файла:");
Если ПозСтрДата > 0 Тогда
ДатаВремяОтправки = Формат(КонтекстЭДОСервер.ДатаВремяИзСтроки(СокрЛП(Сред(ТекСтрока, ПозСтрДата + 20))), "ДЛФ=DDT; ДП=-");
Прервать;
КонецЕсли;
КонецЦикла;
Если СтрНайти(ВРег(ТекстПротокола), ВРег("Отчёт не принят")) > 0 ИЛИ СтрНайти(ВРег(ТекстПротокола), ВРег("Отчет не принят")) > 0 Тогда
ПротоколЯвляетсяПоложительным = "Нет";
Элементы.НадписьПротоколЯвляетсяПоложительным.ЦветТекста = Новый Цвет(255, 0, 0);
Иначе
ПротоколЯвляетсяПоложительным = "Да";
КонецЕсли;
ТекстПротокола = ТекстИзФайла;
КонецЕсли;
Элементы.КнопкаПечать.Видимость = Параметры.ПечатьВозможна;
Если Параметры.ПечатьВозможна Тогда
ЦиклОбмена = Параметры.ЦиклОбмена;
ФорматДокументооборота = Параметры.ЦиклОбмена.ФорматДокументооборота;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Печать(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ПечатьЗавершение", ЭтотОбъект);
ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ОписаниеОповещения);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ПечатьЗавершение(Результат, ДополнительныеПараметры) Экспорт
КонтекстЭДОКлиент = Результат.КонтекстЭДО;
РезультатНастройки = Новый Структура("ПечататьПротокол, ФорматДокументооборота", Истина, ФорматДокументооборота);
КонтекстЭДОКлиент.СформироватьИПоказатьПечатныеДокументы(ЦиклОбмена, РезультатНастройки);
КонецПроцедуры
#КонецОбласти