ВыполнитьОбменДаннымиПоСценариюОбменаДанными (БСП)

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

Выполнить обмен данными по сценарию обмена данными. Выполняет процесс обмена данными отдельно для каждой строки настройки обмена.

// Выполняет процесс обмена данными отдельно для каждой строки настройки обмена.
// Процесс обмена данными состоит из двух стадий:
// - инициализация обмена - подготовка подсистемы обмена данными к процессу обмена
// - обмен данными        - процесс зачитывания файла сообщения с последующей загрузкой этих данных в ИБ 
//                          или выгрузки изменений в файл сообщения.
// Стадия инициализации выполняется один раз за сеанс и сохраняется в кэше сеанса на сервере 
// до перезапуска сеанса или сброса повторно-используемых значений подсистемы обмена данными.
// Сброс повторно-используемых значений происходит при изменении данных, влияющих на процесс обмена данными
// (настройки транспорта, настройка выполнения обмена, настройка отборов на узлах планов обмена).
//
// Обмен может быть выполнен полностью для всех строк сценария,
// а может быть выполнен для отдельной строки ТЧ сценария обмена.
//
// Параметры:
//  Отказ                     - Булево - флаг отказа; поднимается в случае возникновения ошибки при выполнении сценария.
//  НастройкаВыполненияОбмена - СправочникСсылка.СценарииОбменовДанными - элемент справочника,
//                              по значениям реквизитов которого будет выполнен обмен данными.
//  НомерСтроки               - Число - Номер строки по которой будет выполнен обмен данными.
//                              Если не указан, то обмен данными будет выполнен для всех строк.
// 
Процедура ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Отказ, НастройкаВыполненияОбмена, НомерСтроки = Неопределено) Экспорт
	
	ПроверитьВозможностьВыполненияОбменов();
	
	ПроверитьИспользованиеОбменаДанными();
	
	УстановитьПривилегированныйРежим(Истина);
	
	ТекстЗапроса = "
	|ВЫБРАТЬ
	|	НастройкиВыполненияОбменаНастройкиОбмена.Ссылка                         КАК НастройкаВыполненияОбмена,
	|	НастройкиВыполненияОбменаНастройкиОбмена.НомерСтроки                    КАК НомерСтроки,
	|	НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие            КАК ВыполняемоеДействие,
	|	НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена            КАК ВидТранспортаОбмена,
	|	НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы         КАК УзелИнформационнойБазы,
	|
	|	ВЫБОР КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.COM)
	|	ТОГДА ИСТИНА
	|	ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК ОбменЧерезВнешнееСоединение,
	|
	|	ВЫБОР КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.WS)
	|	ТОГДА ИСТИНА
	|	ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК ОбменЧерезВебСервис,
	|
	|	ВЫБОР КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.ВнешняяСистема)
	|	ТОГДА ИСТИНА
	|	ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК ОбменСВнешнейСистемой
	|ИЗ
	|	Справочник.СценарииОбменовДанными.НастройкиОбмена КАК НастройкиВыполненияОбменаНастройкиОбмена
	|ГДЕ
	|	НастройкиВыполненияОбменаНастройкиОбмена.Ссылка = &НастройкаВыполненияОбмена
	|	[УсловиеПоНомеруСтроки]
	|УПОРЯДОЧИТЬ ПО
	|	НастройкиВыполненияОбменаНастройкиОбмена.НомерСтроки
	|";
	
	УсловиеПоНомеруСтроки = ?(НомерСтроки = Неопределено, "", "И НастройкиВыполненияОбменаНастройкиОбмена.НомерСтроки = &НомерСтроки");
	
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[УсловиеПоНомеруСтроки]", УсловиеПоНомеруСтроки);
	
	Запрос = Новый Запрос;
	Запрос.Текст = ТекстЗапроса;
	Запрос.УстановитьПараметр("НастройкаВыполненияОбмена", НастройкаВыполненияОбмена);
	Запрос.УстановитьПараметр("НомерСтроки", НомерСтроки);
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	ЭтоПодчиненныйУзелРИБТребующийУстановкиОбновления = 
		ЭтоПодчиненныйУзелРИБ() И ТребуетсяУстановкаОбновления();
		
	Пока Выборка.Следующий() Цикл
		ОтказПоСтрокеСценария = Ложь;
		Если ЭтоПодчиненныйУзелРИБТребующийУстановкиОбновления
			И ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Выборка.УзелИнформационнойБазы) Тогда
			// Обмен по расписанию не выполняется.
			Продолжить;
		ИначеЕсли Не НастройкаСинхронизацииЗавершена(Выборка.УзелИнформационнойБазы)
			И Не Выборка.ОбменСВнешнейСистемой Тогда
			Продолжить;
		КонецЕсли;
		
		Если Выборка.ОбменЧерезВнешнееСоединение Тогда
			
			ПроверитьВозможностьВнешнегоСоединения();
			
			КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(Выборка.ВыполняемоеДействие);
			
			ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(ОтказПоСтрокеСценария,
				Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие, КоличествоЭлементовВТранзакции);
			
		ИначеЕсли Выборка.ОбменЧерезВебСервис Тогда
			
			ПараметрыОбмена = ПараметрыОбмена();
			ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(ОтказПоСтрокеСценария,
				Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие, ПараметрыОбмена);
			
		Иначе
			
			// ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ
			СтруктураНастроекОбмена = НастройкиОбменаДанными(Выборка.НастройкаВыполненияОбмена, Выборка.НомерСтроки);
			
			// Если настройка содержит ошибки, то обмен не производим; статус "Отменено".
			Если СтруктураНастроекОбмена.Отказ Тогда
				
				ОтказПоСтрокеСценария = Истина;
				
				// Фиксируем в ЖР лог по обмену данными.
				ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена);
				Продолжить;
			КонецЕсли;
			
			СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено;
			
			// Добавляем в ЖР информацию о процессе обмена данными.
			СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными по настройке %1'", ОбщегоНазначения.КодОсновногоЯзыка());
			СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.НастройкаВыполненияОбменаНаименование);
			ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена);
			
			// ОБМЕН ДАННЫМИ
			ВыполнитьОбменДаннымиЧерезФайловыйРесурс(СтруктураНастроекОбмена);
			
			// Фиксируем в ЖР лог по обмену данными.
			ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена);
			
			Если Не РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда
				
				ОтказПоСтрокеСценария = Истина;
				
			КонецЕсли;
			
		КонецЕсли;
		Если ОтказПоСтрокеСценария Тогда
			Отказ = Истина;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

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

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

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

ВыполнитьОбменДаннымиПоСценариюОбменаДанными (БСП)

ВыполнитьОбменДаннымиПоРегламентномуЗаданию (БСП)

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

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

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

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

ОбработкаКомандыНастроитьРасписаниеВыполненияОбмена (БСП)

ВыполнитьОбменДанными (БСП)

ВыполнитьОбменДаннымиОбработкаКоманды (БСП)

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