ФайлОбменаДанными (БСП)

Автор: 1С
ОбщийМодуль.СервисОбменаСообщениями
БСП

Файл обмена данными. Загружает файл обмена из сервиса Портала 1С:ИТС.

// Загружает файл обмена из сервиса Портала 1С:ИТС.
//
// Параметры:
//  ИдентификаторОбмена - Строка - идентификатор обмена данными на Портале 1С:ИТС;
//  ОписаниеФайлаОбмена - Структура - см. функцию ОписаниеФайлаОбмена.
//
// Возвращаемое значение:
//   Структура - содержит результат операции:
//    *КодОшибки - Строка - код ошибки сервиса обмена данными;
//    *СообщениеОбОшибке  - Строка - описание ошибки для пользователя;
//    *АдресФайла - Строка - адрес файла во временном хранилище.
//
Функция ФайлОбменаДанными(ИдентификаторОбмена, ОписаниеФайлаОбмена) Экспорт
	
	ЗаписатьИнформациюВЖурналРегистрации(
		СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Получение файла обмена данными: %1'"),
				ОписаниеФайлаОбмена.URLФайла),
		Ложь);
	
	РезультатОперации = Новый Структура;
	РезультатОперации.Вставить("КодОшибки",          "");
	РезультатОперации.Вставить("СообщениеОбОшибке",  "");
	РезультатОперации.Вставить("АдресФайла",         "");
	
	ПараметрыПодключения = ИнициализироватьПараметрыПодключения();
	
	URLОперации = ОписаниеФайлаОбмена.URLФайла;
	Результат   = ДанныеАутентификации(URLОперации);
	
	Если Результат.Ошибка Тогда
		РезультатОперации.КодОшибки = КодОшибкиНеверныйЛогинИлиПароль();
		ЗаполнитьЗначенияСвойств(РезультатОперации, Результат, "ИнформацияОбОшибке");
		РезультатОперации.СообщениеОбОшибке = Результат.ИнформацияОбОшибке;
		Возврат РезультатОперации;
	КонецЕсли;
	
	// Дополнительные действия перед загрузкой файла
	СервисОбменаСообщениямиПереопределяемый.ПередЗагрузкойФайлаОбменаДанными(
		ОписаниеФайлаОбмена.ИдентификаторСистемы,
		ОписаниеФайлаОбмена.ДополнительныеПараметры);
	
	ПараметрыЗапросаJSON = packagedownload(
		ИдентификаторОбмена,
		Результат.ДанныеАутентификации,
		ИнтернетПоддержкаПользователей.ДополнительныеПараметрыВызоваОперацииСервиса());
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/json");
	
	ПараметрыОтправки = Новый Структура;
	ПараметрыОтправки.Вставить("Метод"                   , "POST");
	ПараметрыОтправки.Вставить("ФорматОтвета"            , 2);
	ПараметрыОтправки.Вставить("Заголовки"               , Заголовки);
	ПараметрыОтправки.Вставить("ДанныеДляОбработки"      , ПараметрыЗапросаJSON);
	ПараметрыОтправки.Вставить("ФорматДанныхДляОбработки", 1);
	ПараметрыОтправки.Вставить("НастройкиПрокси"         , ПараметрыПодключения.НастройкиПроксиСервера);
	ПараметрыОтправки.Вставить("Таймаут"                 , 30);
	
	// Вызов операции сервиса.
	РезультатОтправки = ИнтернетПоддержкаПользователей.ЗагрузитьСодержимоеИзИнтернет(
		URLОперации,
		,
		,
		ПараметрыОтправки);
	
	Если Не ПустаяСтрока(РезультатОтправки.КодОшибки) Тогда
		
		Если РезультатОтправки.КодСостояния = 400 Тогда
			РезультатОперации.КодОшибки = "НетФайловДляЗагрузки";
			РезультатОперации.СообщениеОбОшибке  = НСтр("ru = 'Отсутствую файлы для загрузки.'");
		Иначе
			РезультатОперации.КодОшибки         = КодОшибкиФайлНеЗагружен();
			РезультатОперации.СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Ошибка при получении файла обмена %1: 
					|%2'"),
				ОписаниеФайлаОбмена.ИдентификаторФайла,
				РезультатОтправки.СообщениеОбОшибке);;
			
			ЧастиСтрок = Новый Массив;
			ЧастиСтрок.Добавить(НСтр("ru = 'Не удалось получить файла обмена.'"));
			ЧастиСтрок.Добавить(Символы.ПС);
			ЧастиСтрок.Добавить(РезультатОперации.СообщениеОбОшибке);
			ЧастиСтрок.Добавить(Символы.ПС);
			ЧастиСтрок.Добавить(Символы.ПС);
			ЧастиСтрок.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Техническая информация об ошибке:
					|При получении файла обмена сервис вернул ошибку.
					|URL: %1
					|Код ошибки: %2
					|Подробная информация:
					|%3'"),
				URLОперации,
				РезультатОтправки.КодОшибки,
				РезультатОтправки.ИнформацияОбОшибке));
			
			ИнформацияОбОшибке = Новый ФорматированнаяСтрока(ЧастиСтрок);
			
			ЗаписатьИнформациюВЖурналРегистрации(
				Строка(ИнформацияОбОшибке),
				Истина);
		КонецЕсли;
		
		Возврат РезультатОперации;
		
	КонецЕсли;
	
	РезультатОперации.АдресФайла = ПоместитьВоВременноеХранилище(РезультатОтправки.Содержимое);
	
	ЗаписатьИнформациюВЖурналРегистрации(
		НСтр("ru = 'Завершено получение файла обмена данными.'"),
		Ложь);
	
	Возврат РезультатОперации;
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ОписаниеФайлаОбменаДанными (БСП)

ПараметрыОбменаДаннымиЧерезФайлИлиСтроку (БСП)

ПодтвердитьОбработкуФайлаОбменаДанными (БСП)

ОткрытьФайлВыгрузки (БСП)

ОткрытьФайлЗагрузки (БСП)

ПередЗагрузкойФайлаОбменаДанными (БСП)

УстановитьСообщениеОбменаДаннымиИзГлавногоУзла (БСП)

ОчиститьСообщениеОбменаДаннымиИзГлавногоУзла (БСП)

ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз