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

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

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

// Получает сообщение обмена из информационной базы корреспондента во временный каталог пользователя ОС.
//
// Параметры:
//  Отказ                        - Булево - флаг отказа; поднимается в случае возникновения ошибки.
//  УзелИнформационнойБазы       - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения
//                                                    обмена.
//  ВыводитьСообщения            - Булево - если Истина, то выводятся сообщения пользователю.
//
//  Возвращаемое значение:
//   Структура со следующими ключи:
//     * ИмяВременногоКаталогаСообщенийОбмена - полное имя каталога обмена, в которое было загружено сообщение обмена.
//     * ИмяФайлаСообщенияОбмена              - полное имя файла сообщения обмена.
//     * ИдентификаторФайлаПакетаДанных       - дата изменения файла сообщения обмена.
//
Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондента(Отказ, УзелИнформационнойБазы, ВыводитьСообщения = Истина) Экспорт
	
	// Возвращаемое значение функции.
	Результат = Новый Структура;
	Результат.Вставить("ИмяВременногоКаталогаСообщенийОбмена", "");
	Результат.Вставить("ИмяФайлаСообщенияОбмена",              "");
	Результат.Вставить("ИдентификаторФайлаПакетаДанных",       Неопределено);
	
	ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы);
	ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена);
	КодТекущегоУзлаПланаОбмена = ИдентификаторЭтогоУзлаДляОбмена(УзелИнформационнойБазы);

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

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

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

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

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

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

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

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

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

ПолучитьФайлВерсииВРабочийКаталог (БСП)

РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском (БСП)

ПолучитьWSПроксиКорреспондента (БСП)

КаталогФайловойИнформационнойБазы (БСП)

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