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