Документооборот с контролирующими органами / Квитанция о приеме / Модуль формы

файл

#Область ОбработчикиСобытийФормы

&НаКлиенте
Процедура ПриОткрытии(Отказ)

	Если ЗначениеЗаполнено(ТекстПредупреждения) Тогда 
		ПоказатьПредупреждение(, ТекстПредупреждения);
		Отказ = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ПолеВводаОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормы

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Печать(Команда)
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПечатьЗавершение", ЭтотОбъект);
	ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ОписаниеОповещения);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаКлиенте
Процедура ПечатьЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	КонтекстЭДОКлиент = Результат.КонтекстЭДО;
	РезультатНастройки = Новый Структура("ПечататьРезультатПриема, ФорматДокументооборота", Истина, ФорматДокументооборота);
	КонтекстЭДОКлиент.СформироватьИПоказатьПечатныеДокументы(ЦиклОбмена, РезультатНастройки);
	
КонецПроцедуры

#КонецОбласти

Связанные материалы