СоздатьНастройкуОбмена_3_0_1_1 (БСП)

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

Создать настройку обмена.

Процедура СоздатьНастройкуОбмена_3_0_1_1(НастройкиПодключения,
		ЭтоКорреспондент = Ложь,
		РежимСовместимостиСБСП_2_0_0 = Ложь,
		ПсевдонимЭтогоУзла = "") Экспорт
		
	КодЭтогоУзла = НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника;
	
	// Проверяем, что для текущего узла задан код.
	Если ПустаяСтрока(КодЭтогоУзла) Тогда
		// Код узла задается в обработчике обновления ИБ.
		ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Для предопределенного узла плана обмена ""%1"" не задан код.'"),
			НастройкиПодключения.ИмяПланаОбмена);
	КонецЕсли;
		
	УстановитьПрефикс = Ложь;
	Если ПустаяСтрока(ОбменДаннымиСервер.ПрефиксИнформационнойБазы()) Тогда
		Если ПустаяСтрока(НастройкиПодключения.Префикс) Тогда
			ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Для продолжения настройки синхронизации данных необходимо
				|задать префикс информационной базы в приложении ""%1"".'"),
				Метаданные.Синоним);
		КонецЕсли;
		
		УстановитьПрефикс = Истина;
	Иначе
		НастройкиПодключения.Префикс = ОбменДаннымиСервер.ПрефиксИнформационнойБазы();
	КонецЕсли;
	
	НачатьТранзакцию();
	Попытка
		Если УстановитьПрефикс Тогда
			ОбменДаннымиСервер.УстановитьПрефиксИнформационнойБазы(НастройкиПодключения.Префикс);
		КонецЕсли;
		
		// Создаем/обновляем узел корреспондента.
		Корреспондент = ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена].НайтиПоКоду(
			НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника);
		
		ПроверитьКод = Ложь;
		Если Корреспондент.Пустая() Тогда
			КорреспондентОбъект = ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена].СоздатьУзел();
			КорреспондентОбъект.Код = НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника;
			
			Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВариантНастройки", КорреспондентОбъект.Метаданные())
				И НастройкиПодключения.Свойство("ИдентификаторНастройки") Тогда
				КорреспондентОбъект.ВариантНастройки = НастройкиПодключения.ИдентификаторНастройки;
			КонецЕсли;
			
			ПроверитьКод = Истина;
		Иначе
			КорреспондентОбъект = Корреспондент.ПолучитьОбъект();
		КонецЕсли;
		
		КорреспондентОбъект.Наименование = НастройкиПодключения.НаименованиеКорреспондента;
		
		Если ПроверитьКод Тогда
			КорреспондентОбъект.Заполнить(Неопределено);
		КонецЕсли;
		
		КорреспондентОбъект.НомерОтправленного = 0;
		КорреспондентОбъект.НомерПринятого     = 0;
		
		КорреспондентОбъект.РегистрироватьИзменения = Истина;
		
		// Версия формата обмена.
		Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена)
			И НастройкиПодключения.Свойство("НастройкиXDTOКорреспондента") Тогда
			
			КорреспондентОбъект.ВерсияФорматаОбмена = ОбменДаннымиXDTOСервер.МаксимальнаяОбщаяВерсияФормата(
				НастройкиПодключения.ИмяПланаОбмена, НастройкиПодключения.НастройкиXDTOКорреспондента.ПоддерживаемыеВерсии);
				
		КонецЕсли;
		
		КорреспондентОбъект.ОбменДанными.Загрузка = Истина;
		КорреспондентОбъект.Записать();
		
		Корреспондент = КорреспондентОбъект.Ссылка;
		
		// Настройки XDTO корреспондента.
		Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда
			
			Если НастройкиПодключения.Свойство("НастройкиXDTOКорреспондента") Тогда
				РегистрыСведений.НастройкиОбменаДаннымиXDTO.ОбновитьНастройкиКорреспондента(Корреспондент,
					"ПоддерживаемыеОбъекты",
					НастройкиПодключения.НастройкиXDTOКорреспондента.ПоддерживаемыеОбъекты.Получить());
			КонецЕсли;
			
			РегистрыСведений.НастройкиОбменаДаннымиXDTO.ОбновитьНастройкиКорреспондента(Корреспондент,
				"ОбластьДанныхКорреспондента",
				НастройкиПодключения.ОбластьДанныхКорреспондента);
			
			СтруктураЗаписи = Новый Структура;
			СтруктураЗаписи.Вставить("УзелИнформационнойБазы",       Корреспондент);
			СтруктураЗаписи.Вставить("ИмяПланаОбменаКорреспондента", НастройкиПодключения.ИмяПланаОбмена);
			
			ОбменДаннымиСлужебный.ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиОбменаДаннымиXDTO");
			
		КонецЕсли;
		
		// Общие данные узлов.
		РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ОбновитьПрефиксы(
			Корреспондент,
			НастройкиПодключения.Префикс,
			НастройкиПодключения.ПрефиксКорреспондента);
			
		Если Не ПустаяСтрока(ПсевдонимЭтогоУзла) Тогда
			ВиртуальныеКоды = РегистрыСведений["ПсевдонимыПредопределенныхУзлов"].СоздатьНаборЗаписей();
			ВиртуальныйКод = ВиртуальныеКоды.Добавить();
			ВиртуальныйКод.Корреспондент = Корреспондент;
			ВиртуальныйКод.КодУзла       = ПсевдонимЭтогоУзла;
			
			ВиртуальныеКоды.Записать();
		КонецЕсли;
		
		ФактическийКодКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Корреспондент, "Код");
		
		Если ПроверитьКод
			И НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника <> ФактическийКодКорреспондента Тогда
			СтрокаСообщения = НСтр("ru = 'Ошибка назначения кода узла корреспондента.
				|Назначенное значение ""%1""
				|Фактическое значение ""%2"".'");
			СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения,
				НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника,
				ФактическийКодКорреспондента);
			ВызватьИсключение СтрокаСообщения;
		КонецЕсли;
		
		// Работа с настройками транспорта.
		Параметры = Новый Структура;
		Параметры.Вставить("Корреспондент", Корреспондент);
		Параметры.Вставить("КодЭтогоУзла", КодЭтогоУзла);
		Параметры.Вставить("КодКорреспондента", НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника);
		Параметры.Вставить("КонечнаяТочкаКорреспондента", НастройкиПодключения.КонечнаяТочкаКорреспондента);
		Параметры.Вставить("ЭтоКорреспондент", ЭтоКорреспондент);
		Параметры.Вставить("РежимСовместимостиСБСП_2_0_0", РежимСовместимостиСБСП_2_0_0);
		Параметры.Вставить("ПсевдонимЭтогоУзла", ПсевдонимЭтогоУзла);
		
		ОбновитьНастройкиТранспортаОбластиДанных(Параметры);
		
		НастройкиПодключения.Корреспондент = Корреспондент;
		
		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		ВызватьИсключение;
	КонецПопытки;
	
КонецПроцедуры

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

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

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

СоздатьНастройкуОбмена (БСП)

СоздатьВременныйКаталогСообщенийОбмена (БСП)

ИдентификаторОбменДанными (БСП)

ЗначениеНастройкиПланаОбмена (БСП)

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

ОткрытьПомощникНастройкиОбменаДанными (БСП)

НастройкиПланаОбмена (БСП)

ОписаниеВариантаНастройки (БСП)

ИнициализироватьВедениеПротоколаОбмена (БСП)

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