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