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

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

Создать настройку обмена. Для внутреннего использования

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

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

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

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

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

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

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

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

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

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

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

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

TurboConf ИР адаптер 2.63