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