Загрузка данных


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
		
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	смк_МетрикиИспользованияМетаданных.Период,
	               |	смк_МетрикиИспользованияМетаданных.Пользователь,
	               |	смк_МетрикиИспользованияМетаданных.НаименованиеВКонфигурации,
	               |	смк_МетрикиИспользованияМетаданных.Синоним,
	               |	смк_МетрикиИспользованияМетаданных.ТипВзаимодействия,
	               |	смк_МетрикиИспользованияМетаданных.Примечание КАК ПримечаниеJSON
	               |ИЗ
	               |	РегистрСведений.смк_МетрикиИспользованияМетаданных КАК смк_МетрикиИспользованияМетаданных";
	
	ТаблицаДанных = Запрос.Выполнить().Выгрузить(); 
	
	ОбработатьОтборыИзJSON(ТаблицаДанных);
	
	ВнешниеНаборы = Новый Структура("ТаблицаДанных", ТаблицаДанных);
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, 
	                                    КомпоновщикНастроек.ПолучитьНастройки(), 
	                                    ДанныеРасшифровки);
	
	Процессор = Новый ПроцессорКомпоновкиДанных;
	Процессор.Инициализировать(Макет, ВнешниеНаборы, ДанныеРасшифровки);

	Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	Вывод.УстановитьДокумент(ДокументРезультат);
	Вывод.Вывести(Процессор);
	
КонецПроцедуры

Процедура ОбработатьОтборыИзJSON(ТаблицаДанных) 
	
	МассивТипов = Новый Массив;
	Для Каждого ТипЭлемента Из Документы.ТипВсеСсылки().Типы() Цикл
		МассивТипов.Добавить(ТипЭлемента); 
	КонецЦикла;  
	Для Каждого ТипЭлемента Из Перечисления.ТипВсеСсылки().Типы() Цикл
		МассивТипов.Добавить(ТипЭлемента); 
	КонецЦикла;
	Для Каждого ТипЭлемента Из БизнесПроцессы.ТипВсеСсылки().Типы() Цикл
		МассивТипов.Добавить(ТипЭлемента); 
	КонецЦикла;
	Для Каждого ТипЭлемента Из ПланыВидовХарактеристик.ТипВсеСсылки().Типы() Цикл
		МассивТипов.Добавить(ТипЭлемента); 
	КонецЦикла;
	Для Каждого ТипЭлемента Из Задачи.ТипВсеСсылки().Типы() Цикл
		МассивТипов.Добавить(ТипЭлемента); 
	КонецЦикла;
	
	ТаблицаДанных.Колонки.Добавить("Отбор_Ключ", Новый ОписаниеТипов("Строка"));  
	ТаблицаДанных.Колонки.Добавить("Отбор_Значение", Новый ОписаниеТипов(Справочники.ТипВсеСсылки(),МассивТипов));  
	ТаблицаДанных.Колонки.Добавить("Отбор_ВидСравнения", Новый ОписаниеТипов("Строка"));
		
	Для Каждого Стр Из ТаблицаДанных Цикл
		
		Если Стр.ТипВзаимодействия <> Перечисления.смк_ТипыВзаимодействияСОбъектамиМетаданных.ФормированиеОтчета
			ИЛИ НЕ ЗначениеЗаполнено(Стр.ПримечаниеJSON) Тогда
			Продолжить;
		КонецЕсли;
		
		Попытка
			Чтение = Новый ЧтениеJSON;
			Чтение.УстановитьСтроку(Стр.ПримечаниеJSON);
			Данные = ПрочитатьJSON(Чтение, Истина);
			Чтение.Закрыть();
			
			Отбор = Данные.Получить("Отбор");
			Если ТипЗнч(Отбор) <> Тип("Структура") И ТипЗнч(Отбор) <> Тип("Соответствие") Тогда
				Продолжить;
			КонецЕсли;
			
			Для Каждого КЗ Из Отбор Цикл
				
				Стр.Отбор_Ключ = КЗ.Ключ;
				
				Инфо = КЗ.Значение;
				Если ТипЗнч(Инфо) = Тип("Структура") ИЛИ ТипЗнч(Инфо) = Тип("Соответствие") Тогда
					Стр.Отбор_Значение     = ОбъектПоУИД(Инфо.Получить("Значение"), Инфо.Получить("ЗначениеТипДанных"));
					Стр.Отбор_ВидСравнения = Строка(Инфо.Получить("ВидСравнения"));
				Иначе
					Стр.Отбор_Значение = Строка(Инфо);
				КонецЕсли;
			КонецЦикла;
						
		Исключение
			Продолжить;	
		КонецПопытки; 
		
	КонецЦикла;

КонецПроцедуры

Функция ОбъектПоУИД(УИДОбъекта, ТипДанныхСтрокой) 
	
	СсылкаНаОбъект = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ТипДанныхСтрокой).ПолучитьСсылку(Новый УникальныйИдентификатор(УИДОбъекта));
	Если ОбщегоНазначения.СсылкаСуществует(СсылкаНаОбъект) Тогда
		Возврат СсылкаНаОбъект 
	КонецЕсли;
	
	Возврат "Объект не найден"
	
КонецФункции