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