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