Сопоставить ссылки.
Функция СопоставитьСсылки(Контейнер, МенеджерСопоставленияСсылок, ТаблицаИсходныхСсылок) Экспорт
ИсходныеСсылкиДляСтандартнойОбработки = Новый ТаблицаЗначений();
Для Каждого Колонка Из ТаблицаИсходныхСсылок.Колонки Цикл
Если Колонка.Имя <> "ИмяПредопределенныхДанных" Тогда
ИсходныеСсылкиДляСтандартнойОбработки.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
КонецЕсли;
КонецЦикла;
ИмяКолонки = МенеджерСопоставленияСсылок.ИмяКолонкиИсходныхСсылок();
Результат = Новый ТаблицаЗначений();
Результат.Колонки.Добавить(ИмяКолонки, ТаблицаИсходныхСсылок.Колонки.Найти(ИмяКолонки).ТипЗначения);
Результат.Колонки.Добавить("Ссылка", ТаблицаИсходныхСсылок.Колонки.Найти(ИмяКолонки).ТипЗначения);
ОбъектМетаданных = Неопределено;
Для Каждого СтрокаТаблицыИсходныхСсылок Из ТаблицаИсходныхСсылок Цикл
Если ЗначениеЗаполнено(СтрокаТаблицыИсходныхСсылок.ИмяПредопределенныхДанных) Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| Таблица.Ссылка КАК Ссылка
|ИЗ
| " + СтрокаТаблицыИсходныхСсылок[ИмяКолонки].Метаданные().ПолноеИмя() + " КАК Таблица
|ГДЕ
| Таблица.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ИмяПредопределенныхДанных", СтрокаТаблицыИсходныхСсылок.ИмяПредопределенныхДанных);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Количество() = 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
///////////////////////////////////////////////////////////////////////////////////////////////////////
СопоставитьЗагружаемыеДанныеИзФайла (БСП)
Получить ссылку из навигационной ссылки
Получение ссылки по навигационной ссылке