Перем мСоединениеADO; Функция ВыполнитьЗапросADO(ТекстЗапроса) СоединениеADO(); РезультатЗапроса = Новый COMОбъект("ADODB.Recordset"); adOpenStatic = 3; adLockOptimistic = 3; adCmdText = 1; РезультатЗапроса.Open(ТекстЗапроса, мСоединениеADO, adOpenStatic, adLockOptimistic, adCmdText); Возврат РезультатЗапроса; КонецФункции Процедура СоединениеADO() Экспорт Если мСоединениеADO = Неопределено Тогда мСоединениеADO = ирОбщий.ПолучитьСоединениеСУБД(); КонецЕсли; КонецПроцедуры Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) #Если _ Тогда СхемаКомпоновки = Новый СхемаКомпоновкиДанных; КонечнаяНастройка = Новый НастройкиКомпоновкиДанных; ВнешниеНаборыДанных = Новый Структура; ДокументРезультат = Новый ТабличныйДокумент; #КонецЕсли ДокументРезультат.Очистить(); СтандартнаяОбработка = Ложь; АнализТехножурнала = Обработки.ирАнализТехножурнала.Создать(); КонечнаяНастройка = КомпоновщикНастроек.ПолучитьНастройки(); ПорядокЗапроса = ирОбщий.ПолучитьВыражениеПорядкаКомпоновкиНаЯзыкеЛкс(КонечнаяНастройка.Порядок,,, "MSSQL"); Если Не ЗначениеЗаполнено(ПорядокЗапроса) Тогда ПорядокЗапроса = "TotIO desc"; КонецЕсли; ТекстЗапроса = ПолучитьМакет("StatisticsQuery").ПолучитьТекст(); СоединениеADO(); Если мСоединениеADO = Неопределено Тогда Сообщить("Для выполнения отчета необходима клиент-серверная база"); Возврат; КонецЕсли; КоличествоПервых = КонечнаяНастройка.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КоличествоПервых")).Значение; ПопавшиеВПоследниеМинут = КонечнаяНастройка.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПопавшиеВПоследниеМинут")).Значение; ТекстЗапроса = ирОбщий.СтрЗаменитьОбязательноЛкс(ТекстЗапроса, "1111", XMLСтрока(КоличествоПервых)); ТекстЗапроса = ирОбщий.СтрЗаменитьОбязательноЛкс(ТекстЗапроса, "2222", XMLСтрока(ПопавшиеВПоследниеМинут)); //ФормаПодключения = ирКэш.Получить().ПолучитьФорму("ПараметрыСоединенияСУБД"); //ФормаПодключения.ЗаполнитьПараметры(); //ТекстЗапроса = ирОбщий.СтрЗаменитьОбязательноЛкс(ТекстЗапроса, "3333", ФормаПодключения.ИмяБД); ВсеВыбранныеПоля = ирОбщий.ПолучитьВсеВыбранныеПоляГруппировкиКомпоновкиЛкс(КонечнаяНастройка.Выбор, Истина); ВыбранноеПолеПланЗапроса = ирОбщий.НайтиЭлементКоллекцииПоЗначениюСвойстваЛкс(ВсеВыбранныеПоля, "Поле", Новый ПолеКомпоновкиДанных("query_plan")); Если ВыбранноеПолеПланЗапроса = Неопределено Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "qp.query_plan", "NULL"); // получание планов запросов в XML занимает много времени КонецЕсли; ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ORDER BY " + ПорядокЗапроса; РезультатADO = ВыполнитьЗапросADO(ТекстЗапроса); Запросы = ирОбщий.РезультатЗапросаADOВТаблицуЗначенийОбщийЛкс(РезультатADO,,,,, Ложь); // Для использования GWF надо решить сначала проблему смещения дат Запросы.Колонки.Добавить("ТаблицыМетаданных"); Запросы.Колонки.Добавить("ТекстЗапросаМета"); ВыбранноеПолеТаблицыМетаданных = ирОбщий.НайтиЭлементКоллекцииПоЗначениюСвойстваЛкс(ВсеВыбранныеПоля, "Поле", Новый ПолеКомпоновкиДанных("ТаблицыМетаданных")); ВыбранноеПолеТекстЗапросаМета = ирОбщий.НайтиЭлементКоллекцииПоЗначениюСвойстваЛкс(ВсеВыбранныеПоля, "Поле", Новый ПолеКомпоновкиДанных("ТекстЗапросаМета")); Для Каждого СтрокаЗапроса Из Запросы Цикл Если Ложь Или ВыбранноеПолеТекстЗапросаМета <> Неопределено Или ВыбранноеПолеТаблицыМетаданных <> Неопределено Тогда //Если ирОбщий.СтрокиРавныЛкс(СтрокаЗапроса.database_name, ФормаПодключения.ИмяБД) Тогда НайденныеТаблицы = Новый ТаблицаЗначений; СтрокаЗапроса.ТекстЗапросаМета = АнализТехножурнала.ПеревестиТекстБДВТерминыМетаданных(СтрокаЗапроса.query_text,,, "MSSQL", НайденныеТаблицы,,,, Истина); Если НайденныеТаблицы.Количество() > 0 Тогда МассивИмен = НайденныеТаблицы.ВыгрузитьКолонку("ИмяМета"); СтрокаЗапроса.ТаблицыМетаданных = ирОбщий.ПолучитьСтрокуСРазделителемИзМассиваЛкс(МассивИмен); КонецЕсли; //КонецЕсли; КонецЕсли; КонецЦикла; #Если _ Тогда Таблица = Новый ТаблицаЗначений; #КонецЕсли Запросы.Колонки.Добавить("ШаблонЗапроса", Новый ОписаниеТипов("Строка")); Для Каждого СтрокаТаблицы Из Запросы Цикл СтрокаТаблицы.ШаблонЗапроса = АнализТехножурнала.ПолучитьШаблонТекстаБД(СтрокаТаблицы.query_text); КонецЦикла; ВнешниеНаборыДанных = Новый Структура("Запросы", Запросы); ирОбщий.СкомпоноватьВТабличныйДокументЛкс(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДокументРезультат, ВнешниеНаборыДанных, ДанныеРасшифровки); КонецПроцедуры