СопоставитьСсылки (БСП)

Автор: 1С
ОбщийМодуль.ВыгрузкаЗагрузкаПредопределенныхДанных
БСП

Сопоставить ссылки.

Функция СопоставитьСсылки(Контейнер, МенеджерСопоставленияСсылок, ТаблицаИсходныхСсылок) Экспорт
	
	ИсходныеСсылкиДляСтандартнойОбработки = Новый ТаблицаЗначений();
	Для Каждого Колонка Из ТаблицаИсходныхСсылок.Колонки Цикл
		Если Колонка.Имя <> "ИмяПредопределенныхДанных" Тогда
			ИсходныеСсылкиДляСтандартнойОбработки.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
		КонецЕсли;
	КонецЦикла;
	
	ИмяКолонки = МенеджерСопоставленияСсылок.ИмяКолонкиИсходныхСсылок();
	
	Результат = Новый ТаблицаЗначений();
	Результат.Колонки.Добавить(ИмяКолонки, ТаблицаИсходныхСсылок.Колонки.Найти(ИмяКолонки).ТипЗначения);
	Результат.Колонки.Добавить("Ссылка", ТаблицаИсходныхСсылок.Колонки.Найти(ИмяКолонки).ТипЗначения);
	
	ОбъектМетаданных = Неопределено;
	
	Для Каждого СтрокаТаблицыИсходныхСсылок Из ТаблицаИсходныхСсылок Цикл
		
		Если ЗначениеЗаполнено(СтрокаТаблицыИсходныхСсылок.ИмяПредопределенныхДанных) Тогда
			
			ТекстЗапроса = 
				"ВЫБРАТЬ
				|	Таблица.Ссылка КАК Ссылка
				|ИЗ
				|	" + СтрокаТаблицыИсходныхСсылок[ИмяКолонки].Метаданные().ПолноеИмя() + " КАК Таблица
				|ГДЕ
				|	Таблица.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных";
			Запрос = Новый Запрос(ТекстЗапроса);
			Запрос.УстановитьПараметр("ИмяПредопределенныхДанных", СтрокаТаблицыИсходныхСсылок.ИмяПредопределенныхДанных);
			
			РезультатЗапроса = Запрос.Выполнить();
			Если Не РезультатЗапроса.Пустой() Тогда
				
				Выборка = РезультатЗапроса.Выбрать();
				
				Если Выборка.Количество() = 1 Тогда
					
					Выборка.Следующий();
					
					СтрокаРезультата = Результат.Добавить();
					СтрокаРезультата.Ссылка = Выборка.Ссылка;
					СтрокаРезультата[ИмяКолонки] = СтрокаТаблицыИсходныхСсылок[ИмяКолонки];
					
				Иначе
					
					ВызватьИсключение СтрШаблон(
						НСтр("ru = 'Обнаружено дублирование предопределенных элементов %1 в таблице %2!'", Метаданные.ОсновнойЯзык.КодЯзыка),
						СтрокаТаблицыИсходныхСсылок.ИмяПредопределенныхДанных,
						СтрокаТаблицыИсходныхСсылок[ИмяКолонки].Метаданные().ПолноеИмя()
					);
					
				КонецЕсли;
				
			КонецЕсли;
			
		Иначе
			
			Если ОбъектМетаданных = Неопределено Тогда
				ОбъектМетаданных = СтрокаТаблицыИсходныхСсылок[ИмяКолонки].Метаданные();
			КонецЕсли;
			
			СсылкаДляСтандартнойОбработки = ИсходныеСсылкиДляСтандартнойОбработки.Добавить();
			ЗаполнитьЗначенияСвойств(СсылкаДляСтандартнойОбработки, СтрокаТаблицыИсходныхСсылок);
			
		КонецЕсли;
		
	КонецЦикла;
	
	Если ИсходныеСсылкиДляСтандартнойОбработки.Количество() > 0 Тогда
		
		Выборка = Обработки.ВыгрузкаЗагрузкаДанныхМенеджерСопоставленияСсылок.ВыборкаСопоставленияСсылок(
			ОбъектМетаданных, ИсходныеСсылкиДляСтандартнойОбработки, ИмяКолонки);
		
		Пока Выборка.Следующий() Цикл
			
			СтрокаРезультата = Результат.Добавить();
			СтрокаРезультата.Ссылка = Выборка.Ссылка;
			СтрокаРезультата[ИмяКолонки] = Выборка[ИмяКолонки];
			
		КонецЦикла;
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

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

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

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

СопоставитьЗагружаемыеДанныеИзФайла (БСП)

НажатиеНаСсылкуВсеИнформационныеСсылки (БСП)

СсылкаОбъекта (БСП)

КлючРегистраПоСсылке (БСП)

СсылкаПоКлючуРегистра (БСП)

ОписаниеТипаВсеСсылки (БСП)

Печать из "вне" ссылки в файл

Получить ссылку по типу и гуид

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