ЗаполнитьСтруктуруНастроекXDTOКорреспондента (БСП)

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

Заполнить структуру настроек xdto корреспондента.

Процедура ЗаполнитьСтруктуруНастроекXDTOКорреспондента(СтруктураНастроек,
		Header, ФорматСодержитВерсию = Истина, УзелОбмена = Неопределено) Экспорт
	
	СтруктураНастроек.Вставить("Формат", "");
	СтруктураНастроек.Вставить("ПоддерживаемыеВерсии",  Новый Массив);
	СтруктураНастроек.Вставить("ПоддерживаемыеОбъекты", Новый ТаблицаЗначений);
	
	ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата(
		СтруктураНастроек.ПоддерживаемыеОбъекты, "ОтправкаПолучение");
	
	Если ФорматСодержитВерсию Тогда
		ФорматОбмена = РазложитьФорматОбмена(Header.Format);
		СтруктураНастроек.Формат = ФорматОбмена.БазовыйФормат;
	Иначе
		СтруктураНастроек.Формат = Header.Format;
	КонецЕсли;
	
	Для Каждого AvailableVersion Из Header.AvailableVersion Цикл
		СтруктураНастроек.ПоддерживаемыеВерсии.Добавить(AvailableVersion);
	КонецЦикла;
	
	Если Не Header.Установлено("AvailableObjectTypes")
		И Не УзелОбмена = Неопределено
		И ФорматСодержитВерсию Тогда
		// Обратная совместимость с 2.x.
		// Поскольку от корреспондента нет и не может быть получено информации о поддержке объектов,
		// принимаем, что он умеет отправлять все объекты, которые эта база может получать,
		// и может получать все объекты, которые эта база может отправлять.
		// В качестве версии формата принимается максимальная общая версия.
		
		ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбмена);
		
		ТаблицаОбъектыБазы = ПоддерживаемыеОбъектыФормата(ИмяПланаОбмена,
			"ОтправкаПолучение", ?(УзелОбмена.Пустая(), Неопределено, УзелОбмена));
		
		Для Каждого Версия Из СтруктураНастроек.ПоддерживаемыеВерсии Цикл
			ОтборПоВерсии = Новый Структура("Версия", Версия);
			
			СтрокиОбъектыБазы = ТаблицаОбъектыБазы.НайтиСтроки(ОтборПоВерсии);
			Для Каждого СтрокаОбъектыБазы Из СтрокиОбъектыБазы Цикл
				
				СтрокаОбъектыКорреспондента = СтруктураНастроек.ПоддерживаемыеОбъекты.Добавить();
				ЗаполнитьЗначенияСвойств(СтрокаОбъектыКорреспондента, СтрокаОбъектыБазы, "Версия, Объект");
				СтрокаОбъектыКорреспондента.Отправка = СтрокаОбъектыБазы.Получение;
				СтрокаОбъектыКорреспондента.Получение = СтрокаОбъектыБазы.Отправка;
				
			КонецЦикла;
		КонецЦикла;
		
		Возврат;
	КонецЕсли;
	
	Если Header.AvailableObjectTypes = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Для Каждого ObjectType Из Header.AvailableObjectTypes.ObjectType Цикл
		
		Отправка  = Новый Массив;
		Получение = Новый Массив;
		
		Если Не ПустаяСтрока(ObjectType.Sending) Тогда
			
			Если ObjectType.Sending = "*" Тогда
				Для Каждого Версия Из СтруктураНастроек.ПоддерживаемыеВерсии Цикл
					Отправка.Добавить(СокрЛП(Версия));
				КонецЦикла;
			Иначе
				Для Каждого Версия Из СтрРазделить(ObjectType.Sending, ",", Ложь) Цикл
					Отправка.Добавить(СокрЛП(Версия));
				КонецЦикла;
			КонецЕсли;
			
		КонецЕсли;
		
		Если Не ПустаяСтрока(ObjectType.Receiving) Тогда
			
			Если ObjectType.Receiving = "*" Тогда
				Для Каждого Версия Из СтруктураНастроек.ПоддерживаемыеВерсии Цикл
					Получение.Добавить(СокрЛП(Версия));
				КонецЦикла;
			Иначе
				Для Каждого Версия Из СтрРазделить(ObjectType.Receiving, ",", Ложь) Цикл
					Получение.Добавить(СокрЛП(Версия));
				КонецЦикла;
			КонецЕсли;
			
		КонецЕсли;
		
		Для Каждого Версия Из Отправка Цикл
			
			СтрокаОбъект = СтруктураНастроек.ПоддерживаемыеОбъекты.Добавить();
			СтрокаОбъект.Объект = ObjectType.Name;
			СтрокаОбъект.Версия = Версия;
			СтрокаОбъект.Отправка = Истина;
			
			Индекс = Получение.Найти(Версия);
			Если Не Индекс = Неопределено Тогда
				СтрокаОбъект.Получение = Истина;
				Получение.Удалить(Индекс);
			КонецЕсли;
			
		КонецЦикла;
		
		Для Каждого Версия Из Получение Цикл
			
			СтрокаОбъект = СтруктураНастроек.ПоддерживаемыеОбъекты.Добавить();
			СтрокаОбъект.Объект = ObjectType.Name;
			СтрокаОбъект.Версия = Версия;
			СтрокаОбъект.Получение = Истина;
			
		КонецЦикла;
		
	КонецЦикла;
	
КонецПроцедуры

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

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

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

ЗаполнитьСтруктуруНастроекXDTO (БСП)

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

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

ЗаполнитьСтруктуруСертификата (БСП)

ОбработчикВыбораЭлементовБазыКорреспондентаНачалоВыбора (БСП)

ОбработчикВыбораЭлементовБазыКорреспондентаПодбор (БСП)

ОбработчикВыбораЭлементовБазыКорреспондентаОбработкаВыбора (БСП)

ЗаполнитьСпискиНастроек (БСП)

СтруктураНастроекОбменаДляСеансаИнтерактивнойЗагрузки (БСП)

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