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