Получить сообщение обмена во временный каталог из информационной базы корреспондента. Получает сообщение обмена из информационной базы корреспондента во временный каталог пользователя ОС.
// Получает сообщение обмена из информационной базы корреспондента во временный каталог пользователя ОС.
//
// Параметры:
// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки.
// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения
// обмена.
// ВыводитьСообщения - Булево - если Истина, то выводятся сообщения пользователю.
//
// Возвращаемое значение:
// Структура со следующими ключи:
// * ИмяВременногоКаталогаСообщенийОбмена - полное имя каталога обмена, в которое было загружено сообщение обмена.
// * ИмяФайлаСообщенияОбмена - полное имя файла сообщения обмена.
// * ИдентификаторФайлаПакетаДанных - дата изменения файла сообщения обмена.
//
Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондента(Отказ, УзелИнформационнойБазы, ВыводитьСообщения = Истина) Экспорт
// Возвращаемое значение функции.
Результат = Новый Структура;
Результат.Вставить("ИмяВременногоКаталогаСообщенийОбмена", "");
Результат.Вставить("ИмяФайлаСообщенияОбмена", "");
Результат.Вставить("ИдентификаторФайлаПакетаДанных", Неопределено);
ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы);
ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена);
КодТекущегоУзлаПланаОбмена = ИдентификаторЭтогоУзлаДляОбмена(УзелИнформационнойБазы);
ШаблонИмениФайлаСообщения = ШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, Ложь);
// Параметры, которые будут определены в функции.
ДатаФайлаСообщенияОбмена = Дата('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
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис (БСП)
ПолучитьСообщениеОбменаВоВременныйКаталог (БСП)
СоздатьВременныйКаталогСообщенийОбмена (БСП)
ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации (БСП)
ПолучитьФайлВерсииВРабочийКаталог (БСП)
РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)