Выполнить обмен данными для узла информационной базы через файл или строку.
Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбмена) Экспорт
ПроверитьВозможностьВыполненияОбменов();
ПроверитьИспользованиеОбменаДанными();
УстановитьПривилегированныйРежим(Истина);
Если ПараметрыОбмена.УзелИнформационнойБазы = Неопределено Тогда
ИмяПланаОбмена = ПараметрыОбмена.ИмяПланаОбмена;
КодУзлаИнформационнойБазы = ПараметрыОбмена.КодУзлаИнформационнойБазы;
ПараметрыОбмена.УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзлаИнформационнойБазы);
Если ПараметрыОбмена.УзелИнформационнойБазы.Пустая()
И ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда
ОшибкаПерехода = Ложь;
НастройкаСинхронизацииЧерезУФ = ПланыОбмена[ИмяПланаОбмена].ПереходНаСинхронизациюЧерезУниверсальныйФорматИнтернет(
КодУзлаИнформационнойБазы, ОшибкаПерехода);
Если ЗначениеЗаполнено(НастройкаСинхронизацииЧерезУФ) Тогда
ПараметрыОбмена.УзелИнформационнойБазы = НастройкаСинхронизацииЧерезУФ;
ИначеЕсли ОшибкаПерехода Тогда
СтрокаСообщенияОбОшибке = НСтр("ru = 'Не удалось выполнить переход на синхронизацию данных через универсальный формат.'");
ВызватьИсключение СтрокаСообщенияОбОшибке;
КонецЕсли;
КонецЕсли;
Если ПараметрыОбмена.УзелИнформационнойБазы.Пустая() Тогда
СтрокаСообщенияОбОшибке = НСтр("ru = 'Узел плана обмена %1 с кодом %2 не найден.'");
СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ИмяПланаОбмена, КодУзлаИнформационнойБазы);
ВызватьИсключение СтрокаСообщенияОбОшибке;
КонецЕсли;
КонецЕсли;
ВыполнитьОбновлениеНастроекОбмена(ПараметрыОбмена.УзелИнформационнойБазы);
Если Не НастройкаСинхронизацииЗавершена(ПараметрыОбмена.УзелИнформационнойБазы) Тогда
ПредставлениеПрограммы = ?(ОбщегоНазначения.РазделениеВключено(),
Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы());
ДанныеКорреспондента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПараметрыОбмена.УзелИнформационнойБазы,
"Код, Наименование");
СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'В ""%1"" настройка синхронизации данных с ""%2"" (идентификатор ""%3"") еще не завершена.'"),
ПредставлениеПрограммы, ДанныеКорреспондента.Наименование, ДанныеКорреспондента.Код);
ВызватьИсключение СтрокаСообщенияОбОшибке;
КонецЕсли;
// ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ
СтруктураНастроекОбмена = НастройкиОбменаДляУзлаИнформационнойБазы(
ПараметрыОбмена.УзелИнформационнойБазы, ПараметрыОбмена.ДействиеПриОбмене, Неопределено, Ложь);
Если СтруктураНастроекОбмена.Отказ Тогда
СтрокаСообщенияОбОшибке = НСтр("ru = 'Ошибка при инициализации процесса обмена данными.'");
ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена);
ВызватьИсключение СтрокаСообщенияОбОшибке;
КонецЕсли;
СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено;
Если ПараметрыОбмена.ДатаНачалаОперации <> Неопределено Тогда
СтруктураНастроекОбмена.ДатаНачала = ПараметрыОбмена.ДатаНачалаОперации;
КонецЕсли;
СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначения.КодОсновногоЯзыка());
СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование);
ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена);
Если СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда
СозданВременныйФайл = Ложь;
Если ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена = ""
И ПараметрыОбмена.СообщениеОбмена <> "" Тогда
ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена = ПолучитьИмяВременногоФайла(".xml");
ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.УстановитьТекст(ПараметрыОбмена.СообщениеОбмена);
ТекстовыйФайл.Записать(ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена);
СозданВременныйФайл = Истина;
КонецЕсли;
ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена, ПараметрыОбмена.СообщениеОбмена);
// {Обработчик: ПослеЧтенияСообщенияОбмена} Начало
СтандартнаяОбработка = Истина;
ПослеЧтенияСообщенияОбмена(
СтруктураНастроекОбмена.УзелИнформационнойБазы,
ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена,
РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена),
СтандартнаяОбработка);
// {Обработчик: ПослеЧтенияСообщенияОбмена} Окончание
Если СозданВременныйФайл Тогда
Попытка
УдалитьФайлы(ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена);
Исключение
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(),
УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЕсли;
ИначеЕсли СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда
ЗаписатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена, ПараметрыОбмена.СообщениеОбмена);
КонецЕсли;
ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена);
Если Не РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда
ВызватьИсключение СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке;
КонецЕсли;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации (БСП)
ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезСтроку (БСП)
ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезСтроку (БСП)
ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезФайл (БСП)
ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы (БСП)
ВыполнитьВыгрузкуДляУзлаИнформационнойБазы (БСП)
ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы (БСП)
ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов (БСП)
ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)