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

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

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

Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбмена) Экспорт
	
	ПроверитьВозможностьВыполненияОбменов();
	
	ПроверитьИспользованиеОбменаДанными();
	
	УстановитьПривилегированныйРежим(Истина);
	
	Если ПараметрыОбмена.УзелИнформационнойБазы = Неопределено Тогда
		
		ИмяПланаОбмена = ПараметрыОбмена.ИмяПланаОбмена;
		КодУзлаИнформационнойБазы = ПараметрыОбмена.КодУзлаИнформационнойБазы;
		
		ПараметрыОбмена.УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзлаИнформационнойБазы);
			
		Если ПараметрыОбмена.УзелИнформационнойБазы.Пустая()
			И ЭтоПланОбмена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
///////////////////////////////////////////////////////////////////////////////////////////////////////

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

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

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

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

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

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

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

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

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

ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов (БСП)

ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов (БСП)

TurboConf ИР адаптер 2.53