НастроитьОбменШаг1 (БСП)

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

Настроить обмен шаг.

Процедура НастроитьОбменШаг1(Сообщение, Отправитель) Экспорт
	
	Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса") Тогда
		Возврат;
	КонецЕсли;
		
	МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса");
	МодульСообщенияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("СообщенияВМоделиСервиса");
	
	Тело = Сообщение.Body;
	
	КодЭтогоУзла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПланыОбмена[Тело.ExchangePlan].ЭтотУзел(), "Код");
	ПсевдонимЭтогоУзла = "";
	
	Если Не ПустаяСтрока(КодЭтогоУзла) И КодЭтогоУзла <> Тело.Code Тогда
		ПсевдонимЭтогоУзла = ОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса());
	
		Если ПсевдонимЭтогоУзла <> Тело.Code Тогда
			СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Ожидаемый код предопределенного узла в этом приложении ""%1""
				|не соответствует фактическому ""%2"" или псевдониму ""%3"". План обмена: %4.'"),
				Тело.Code, КодЭтогоУзла, ПсевдонимЭтогоУзла, Тело.ExchangePlan);
			ВызватьИсключение СтрокаСообщения;
		КонецЕсли;
	КонецЕсли;
	
	КонечнаяТочкаКорреспондента = ОбменДаннымиВМоделиСервиса.МенеджерПланаОбменаКонечныхТочек().НайтиПоКоду(Тело.EndPoint);
	
	Если КонечнаяТочкаКорреспондента.Пустая() Тогда
		ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Не найдена конечная точка корреспондента с кодом ""%1"".'"),
			Тело.EndPoint);
	КонецЕсли;
	
	Префикс = "";
	ПрефиксКорреспондента = "";
	ИдентификаторНастройки = "";
	
	Если Сообщение.Установлено("AdditionalInfo") Тогда
		ДополнительныеСвойства = СериализаторXDTO.ПрочитатьXDTO(Сообщение.AdditionalInfo);
		Если ДополнительныеСвойства.Свойство("Префикс") Тогда
			Префикс = ДополнительныеСвойства.Префикс;
		КонецЕсли;
		Если ДополнительныеСвойства.Свойство("ПрефиксКорреспондента") Тогда
			ПрефиксКорреспондента = ДополнительныеСвойства.ПрефиксКорреспондента;
		КонецЕсли;
		Если ДополнительныеСвойства.Свойство("ИдентификаторНастройки") Тогда
			ИдентификаторНастройки = ДополнительныеСвойства.ИдентификаторНастройки;
		КонецЕсли;
	КонецЕсли;
	
	НастройкиXDTOКорреспондента = Новый Структура;
	
	НастройкиОтбора = СериализаторXDTO.ПрочитатьXDTO(Тело.FilterSettings);
	Если НастройкиОтбора.Свойство("НастройкиXDTOКорреспондента") Тогда
		НастройкиXDTOКорреспондента = НастройкиОтбора.НастройкиXDTOКорреспондента;
	КонецЕсли;
	
	// Создаем настройку обмена.
	НастройкиПодключения = Новый Структура;
	НастройкиПодключения.Вставить("ИмяПланаОбмена", Тело.ExchangePlan);
	НастройкиПодключения.Вставить("ИдентификаторНастройки", ИдентификаторНастройки);
	
	НастройкиПодключения.Вставить("Наименование", ""); // не требуется
	НастройкиПодключения.Вставить("НаименованиеКорреспондента", Тело.CorrespondentName);
	
	НастройкиПодключения.Вставить("Префикс",               Префикс);
	НастройкиПодключения.Вставить("ПрефиксКорреспондента", ПрефиксКорреспондента);
	
	НастройкиПодключения.Вставить("ИдентификаторИнформационнойБазыИсточника", КодЭтогоУзла);
	НастройкиПодключения.Вставить("ИдентификаторИнформационнойБазыПриемника", Тело.CorrespondentCode);
	
	НастройкиПодключения.Вставить("КонечнаяТочкаКорреспондента", КонечнаяТочкаКорреспондента);
	
	НастройкиПодключения.Вставить("НастройкиXDTOКорреспондента", НастройкиXDTOКорреспондента);

	НастройкиПодключения.Вставить("Корреспондент"); // выходной параметр
	
	НастройкиПодключения.Вставить("ОбластьДанныхКорреспондента", Тело.CorrespondentZone);
	
	НачатьТранзакцию();
	Попытка
		ОбменДаннымиВМоделиСервиса.СоздатьНастройкуОбмена_3_0_1_1(НастройкиПодключения,
			Истина, , ПсевдонимЭтогоУзла);
			
		// Отправляем ответное сообщение об успешной операции.
		ОтветноеСообщение = МодульСообщенияВМоделиСервиса.НовоеСообщение(
			СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеНастройкаОбменаШаг1УспешноЗавершена());
			
		ОтветноеСообщение.Body.Zone = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса();
		ОтветноеСообщение.Body.SessionId = Тело.SessionId;
		
		ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone;
		
		МодульСообщенияВМоделиСервиса.ОтправитьСообщение(ОтветноеСообщение, Отправитель, Истина);
		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		
		ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		
		ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(),
			УровеньЖурналаРегистрации.Ошибка, , , ПредставлениеОшибки);
		
		УдалитьНастройкуСинхронизации(НастройкиПодключения.Корреспондент);
		
		// Отправляем ответное сообщение об ошибке.
		НачатьТранзакцию();
		ОтветноеСообщение = МодульСообщенияВМоделиСервиса.НовоеСообщение(
			СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаНастройкиОбменаШаг1());
			
		ОтветноеСообщение.Body.Zone = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса();
		ОтветноеСообщение.Body.SessionId = Тело.SessionId;		
		
		ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone;
		ОтветноеСообщение.Body.ErrorDescription = ПредставлениеОшибки;
		
		МодульСообщенияВМоделиСервиса.ОтправитьСообщение(ОтветноеСообщение, Отправитель, Истина);
		ЗафиксироватьТранзакцию();
	КонецПопытки;
	
	МодульСообщенияВМоделиСервиса.ДоставитьБыстрыеСообщения();
	
КонецПроцедуры

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

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

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

СообщениеНастроитьОбменШаг1 (БСП)

СообщениеНастроитьОбменШаг2 (БСП)

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

ПриОпределенииДоступныхВнешнихСистем (БСП)

СообщениеНастройкаОбменаШаг1УспешноЗавершена (БСП)

СообщениеНастройкаОбменаШаг2УспешноЗавершена (БСП)

СообщениеОшибкаНастройкиОбменаШаг1 (БСП)

СообщениеОшибкаНастройкиОбменаШаг2 (БСП)

НастроитьПредставлениеДанных (БСП)

Синтакс-помощник БСП с нейросетевым ассистентом