ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис (БСП)

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

Получить сообщение обмена во временный каталог из информационной базы корреспондента через веб сервис. Получает сообщение обмена из информационной базы корреспондента через веб-сервис во временный каталог пользователя

// Получает сообщение обмена из информационной базы корреспондента через веб-сервис во временный каталог пользователя
// ОС.
//
// Параметры:
//  Отказ                   - Булево - флаг отказа; поднимается в случае возникновения ошибки.
//  УзелИнформационнойБазы  - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена.
//  ИдентификаторФайла      - УникальныйИдентификатор - Идентификатор файла.
//  ДлительнаяОперация      - Булево - Признак использования длительное операции.
//  ИдентификаторОперации   - УникальныйИдентификатор - Уникальный идентификатор длительной операции.
//  ПараметрыАутентификации - Структура. Содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль).
//
//  Возвращаемое значение:
//   Структура со следующими ключи:
//     * ИмяВременногоКаталогаСообщенийОбмена - полное имя каталога обмена, в которое было загружено сообщение обмена.
//     * ИмяФайлаСообщенияОбмена              - полное имя файла сообщения обмена.
//     * ИдентификаторФайлаПакетаДанных       - дата изменения файла сообщения обмена.
//
Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис(
											Отказ,
											УзелИнформационнойБазы,
											ИдентификаторФайла,
											ДлительнаяОперация,
											ИдентификаторОперации,
											ПараметрыАутентификации = Неопределено) Экспорт
	
	ПроверитьВозможностьВыполненияОбменов();
	
	ПроверитьИспользованиеОбменаДанными();
	
	УстановитьПривилегированныйРежим(Истина);
	
	// Возвращаемое значение функции.
	Результат = Новый Структура;
	Результат.Вставить("ИмяВременногоКаталогаСообщенийОбмена", "");
	Результат.Вставить("ИмяФайлаСообщенияОбмена",              "");
	Результат.Вставить("ИдентификаторФайлаПакетаДанных",       Неопределено);
	
	// Параметры, которые будут определены в функции.
	ИмяКаталогаСообщенияОбмена = "";
	ИмяФайлаСообщенияОбмена = "";
	ДатаФайлаСообщенияОбмена = Дата('00010101');
	
	СтруктураНастроекОбмена = Новый Структура;
	СтруктураНастроекОбмена.Вставить("ИмяПланаОбмена", ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы));
	СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы);
	СтруктураНастроекОбмена.Вставить("КлючСообщенияЖурналаРегистрации",
		КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных));
	СтруктураНастроекОбмена.Вставить("ТекущийУзелПланаОбмена",
		ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(СтруктураНастроекОбмена.ИмяПланаОбмена));
	СтруктураНастроекОбмена.Вставить("ТекущийУзелПланаОбменаКод",
		ИдентификаторЭтогоУзлаДляОбмена(УзелИнформационнойБазы));
	СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене", Перечисления.ДействияПриОбмене.ЗагрузкаДанных);
		
	ПараметрыПрокси = Новый Структура;
	ПараметрыПрокси.Вставить("ПараметрыАутентификации", ПараметрыАутентификации);
	
	Прокси = Неопределено;
	СостояниеНастройки = Неопределено;
	СообщениеОбОшибке = "";
	ИнициализироватьWSПроксиДляУправленияОбменомДанными(Прокси, СтруктураНастроекОбмена, ПараметрыПрокси, Отказ, СостояниеНастройки, СообщениеОбОшибке);
	
	Если Отказ Тогда
		ЗаписьЖурналаРегистрацииОбменаДанными(СообщениеОбОшибке, СтруктураНастроекОбмена, Истина);
		Возврат Результат;
	КонецЕсли;
	
	Попытка
		
		Прокси.UploadData(
			СтруктураНастроекОбмена.ИмяПланаОбмена,
			СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод,
			ИдентификаторФайла,
			ДлительнаяОперация,
			ИдентификаторОперации,
			Истина);
		
	Исключение
		
		Отказ = Истина;
		Сообщение = НСтр("ru = 'При выгрузке данных возникли ошибки во второй информационной базе: %1'", ОбщегоНазначения.КодОсновногоЯзыка());
		Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		
		ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина);
		
		Возврат Результат;
	КонецПопытки;
	
	Если ДлительнаяОперация Тогда
		ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание получения данных от базы-корреспондента...'",
			ОбщегоНазначения.КодОсновногоЯзыка()), СтруктураНастроекОбмена);
		Возврат Результат;
	КонецЕсли;
	
	Попытка
		ИмяФайлаИзСервисаПередачиФайлов = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла),
			СтруктураНастроекОбмена.УзелИнформационнойБазы,, ПараметрыАутентификации);
	Исключение
		
		Отказ = Истина;
		Сообщение = НСтр("ru = 'Возникли ошибки при получении сообщения обмена из сервиса передачи файлов: %1'", ОбщегоНазначения.КодОсновногоЯзыка());
		Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		
		ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина);
		
		Возврат Результат;
	КонецПопытки;
	
	Попытка
		ИмяКаталогаСообщенияОбмена = СоздатьВременныйКаталогСообщенийОбмена();
	Исключение
		Отказ = Истина;
		Сообщение = НСтр("ru = 'При получении сообщения обмена возникли ошибки: %1'", ОбщегоНазначения.КодОсновногоЯзыка());
		Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		
		ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина);
		
		Возврат Результат;
	КонецПопытки;
	
	ШаблонИмениФайлаСообщения = ШаблонИмениФайлаСообщения(СтруктураНастроекОбмена.ТекущийУзелПланаОбмена,
		СтруктураНастроекОбмена.УзелИнформационнойБазы, Ложь);
	
	ИмяФайлаСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена, ШаблонИмениФайлаСообщения + ".xml");
	
	ПереместитьФайл(ИмяФайлаИзСервисаПередачиФайлов, ИмяФайлаСообщенияОбмена);
	
	ФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщенияОбмена);
	Если ФайлСообщенияОбмена.Существует() Тогда
		ДатаФайлаСообщенияОбмена = ФайлСообщенияОбмена.ПолучитьВремяИзменения();
	КонецЕсли;
	
	Результат.ИмяВременногоКаталогаСообщенийОбмена = ИмяКаталогаСообщенияОбмена;
	Результат.ИмяФайлаСообщенияОбмена              = ИмяФайлаСообщенияОбмена;
	Результат.ИдентификаторФайлаПакетаДанных       = ДатаФайлаСообщенияОбмена;
	
	Возврат Результат;
КонецФункции

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

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

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

ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации (БСП)

ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондента (БСП)

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

Обмен через ВЕБ Сервисы 2 часть

ПолучитьСообщениеОбменаВоВременныйКаталог (БСП)

Обмен через ВЕБ Сервисы 1 часть

СоздатьВременныйКаталогСообщенийОбмена (БСП)

ПолучитьВерсииИнтерфейса (БСП)

ОбработчикВыбораЭлементовБазыКорреспондентаНачалоВыбора (БСП)

TurboConf 6 - расширение Конфигуратора 1С