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