epf_QueryConsole/src/ИнструментыРазработчикаКонс.../Forms/ПланВыполненияЗапроса/Ext/Form/Module.bsl

247 lines
15 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Параметры.МеткаЗапроса) Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
МеткаЗапроса = Параметры.МеткаЗапроса;
ЭтотОбъект.Заголовок = НСтр("ru = 'План выполнения запроса ('") + Параметры.ИмяЗапроса + ")";
ПолноеИмяФайлаЖурнала = ФайлТехнологическийЖурнал(Параметры.ИдентификаторПроцессаОС, Параметры.КаталогСЛогФайлами);
Если НЕ ДанныеИзТехнологическогоЖурналаПрочитаны(ПолноеИмяФайлаЖурнала) Тогда
Элементы.ГруппаПланВыполненияЗапроса.ТекущаяСтраница = Элементы.ГруппаПолучениеПланаВыполненияЗапроса;
ТребуетсяПрочитатьЖурналИмя = ПолноеИмяФайлаЖурнала;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
&НаКлиенте
Процедура ТипПоказаЗапросаПриИзменении(Элемент)
Если ВидОтображенияДанных = 0 Тогда
Если ТипСУБД = "DBMSSQL" Тогда
Элементы.ДеревоОператорМетаданные.Видимость=Истина;
Элементы.ДеревоОператор.Видимость=Ложь;
Иначе
ПланВыполненияЗапросаТекст = ПланВыполненияЗапросаВМетаданных;
КонецЕсли;
СформированныйСКЛТекстЗапроса = ТекстЗапросаВВидеМетаданных;
Иначе
Если ТипСУБД = "DBMSSQL" Тогда
Элементы.ДеревоОператорМетаданные.Видимость=Ложь;
Элементы.ДеревоОператор.Видимость=Истина;
Иначе
ПланВыполненияЗапросаТекст = ПланВыполненияЗапросаИзТехЖурнала;
КонецЕсли;
СформированныйСКЛТекстЗапроса = ТекстЗапросаВСКЛ;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыПланВыполненияЗапросаSQLServer
&НаКлиенте
Процедура ДеревоПриАктивизацииСтроки(Элемент)
Если ТипСУБД = "DBMSSQL" Тогда
Если ВидОтображенияДанных = 0 Тогда
ОписаниеОператора = Элемент.ТекущиеДанные.ОператорМетаданные;
Иначе
ОписаниеОператора = Элемент.ТекущиеДанные.Оператор;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеФункции
&НаСервере
Функция ОбъектОбработки()
Возврат РеквизитФормыВЗначение("Объект");
КонецФункции
&НаСервере
Функция ФайлТехнологическийЖурнал(ИдентификаторПроцессаОС, КаталогСЛогФайлами)
ОжидаемоеИмяФайла = ИмяФайлТехнологическийЖурнал(ТекущаяДатаСеанса());
ПолноеИмяФайлаЖурнала = НайтиФайлТехнологическийЖурнал(ОжидаемоеИмяФайла, ИдентификаторПроцессаОС, КаталогСЛогФайлами);
Если ЗначениеЗаполнено(ПолноеИмяФайлаЖурнала) Тогда
Возврат ПолноеИмяФайлаЖурнала;
Иначе
ОжидаемоеИмяФайла = ИмяФайлТехнологическийЖурнал(ТекущаяДатаСеанса() - 3600);
ПолноеИмяФайлаЖурнала = НайтиФайлТехнологическийЖурнал(ОжидаемоеИмяФайла, ИдентификаторПроцессаОС, КаталогСЛогФайлами);
Если ЗначениеЗаполнено(ПолноеИмяФайлаЖурнала) Тогда
Возврат ПолноеИмяФайлаЖурнала;
КонецЕсли;
КонецЕсли;
Возврат Неопределено;
КонецФункции
&НаСервере
Функция ИмяФайлТехнологическийЖурнал(ДатаФайла)
ОжидаемоеИмяФайла = Формат(ДатаФайла, "ДФ=yyMMddHH")+ ".log";
Возврат ОжидаемоеИмяФайла;
КонецФункции
&НаСервере
Функция НайтиФайлТехнологическийЖурнал(ИмяФайла, ИдентификаторПроцессаОС, КаталогСЛогФайлами)
СписокФайлов = НайтиФайлы(КаталогСЛогФайлами, "*.log", Истина);
Для каждого Файл Из СписокФайлов Цикл
Если Найти(Файл.Путь, "_" + ИдентификаторПроцессаОС) > 0 Тогда
Если Файл.Имя = ИмяФайла Тогда
Возврат Файл.ПолноеИмя;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
&НаСервере
Функция ДанныеИзТехнологическогоЖурналаПрочитаны(ПолноеИмяФайлаЖурнала)
ПрочитанныеДанные = Новый Структура("ТипСУБД, СКЛЗапрос, ПланВыполненияЗапроса");
ОбъектОбработки().ПрочитатьТехнологическийЖурнал(ПолноеИмяФайлаЖурнала, МеткаЗапроса, ПрочитанныеДанные);
ТипСУБД = ПрочитанныеДанные.ТипСУБД;
ТекстЗапросаВСКЛ = ПрочитанныеДанные.СКЛЗапрос;
ПланВыполненияЗапросаИзТехЖурнала = ПрочитанныеДанные.ПланВыполненияЗапроса;
Если НЕ ЗначениеЗаполнено(ТипСУБД) Тогда
Возврат Ложь;
КонецЕсли;
ВВидеМетаданных = ОбъектОбработки().ПреобразоватьВМетаданные(ТекстЗапросаВСКЛ, ПланВыполненияЗапросаИзТехЖурнала, ТипСУБД);
ТекстЗапросаВВидеМетаданных = ВВидеМетаданных.ТекстЗапросаВВидеМетаданных;
ПланВыполненияЗапросаВМетаданных = ВВидеМетаданных.ПланВыполненияЗапросаВМетаданных;
СформированныйСКЛТекстЗапроса = ВВидеМетаданных.ТекстЗапросаВВидеМетаданных;
ПланВыполненияЗапросаТекст = ВВидеМетаданных.ПланВыполненияЗапросаВМетаданных;
Если ТипСУБД = "DBMSSQL" Тогда
СуммарнаяСтоимостьОбщая = 0;
Элементы.ГруппаПланВыполненияЗапроса.ТекущаяСтраница = Элементы.ГруппаПланВыполненияЗапросаSQLСервер;
ДеревоПланаЗапроса = РеквизитФормыВЗначение("ДеревоПланаВыполненияЗапроса");
ОбъектОбработки().ПолучитьДеревоПланаВыполненияЗапроса(ПланВыполненияЗапросаИзТехЖурнала, ПланВыполненияЗапросаВМетаданных, ДеревоПланаЗапроса, СуммарнаяСтоимостьОбщая);
ЗначениеВРеквизитФормы(ДеревоПланаЗапроса, "ДеревоПланаВыполненияЗапроса");
СуммарнаяСтоимостьЗапроса = СуммарнаяСтоимостьОбщая;
Элементы.ГруппаИнформацияОСтоимостиЗапроса.Видимость = Истина;
Элементы.ПоказыватьПланВыполненияЗапросаВВиде.Видимость = Истина;
Максимум = НайтиМаксимальныйПоказательСтоимости(ДеревоПланаЗапроса.Строки);
УстановитьОформлениеДанныхВКолонкеСтоимость(Максимум);
Иначе
Элементы.ГруппаИнформацияОСтоимостиЗапроса.Видимость = Ложь;
Элементы.ГруппаПланВыполненияЗапроса.ТекущаяСтраница = Элементы.ГруппаПланВыполненияЗапросаТекстовоеПредставление;
Элементы.ПоказыватьПланВыполненияЗапросаВВиде.Видимость = Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервере
Процедура УстановитьОформлениеДанныхВКолонкеСтоимость(Максимум)
УсловноеОформление.Элементы.Очистить();
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ПолеОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ДеревоСтоимость");
ПолеОформления.Использование = Истина;
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоПланаВыполненияЗапроса.Стоимость");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Максимум;
ЭлементОтбора.Использование = Истина;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(, , Истина));
КонецПроцедуры
&НаСервере
Функция НайтиМаксимальныйПоказательСтоимости(СтрокиДерева, Максимум = 0)
Для каждого Строка Из СтрокиДерева Цикл
Если Строка.Строки.Количество() > 0 Тогда
Максимум = НайтиМаксимальныйПоказательСтоимости(Строка.Строки, Максимум);
КонецЕсли;
Если Строка.Стоимость > Максимум Тогда
Максимум = Строка.Стоимость;
КонецЕсли;
КонецЦикла;
Возврат Максимум;
КонецФункции
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ЗначениеЗаполнено(ТребуетсяПрочитатьЖурналИмя) Тогда
ПодключитьОбработчикОжидания("ПрочитатьДанныеИзТехнологическогоЖурналаОбработчик", 2);
Элементы.ГруппаПолучениеПланаВыполненияЗапроса.Видимость = Истина;
КоличествоПопыток = 0;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьДанныеИзТехнологическогоЖурналаОбработчик()
Если ДанныеИзТехнологическогоЖурналаПрочитаны(ТребуетсяПрочитатьЖурналИмя) Тогда
ОтключитьОбработчикОжидания("ПрочитатьДанныеИзТехнологическогоЖурналаОбработчик");
ТребуетсяПрочитатьЖурналИмя = Неопределено;
Элементы.ГруппаПолучениеПланаВыполненияЗапроса.Видимость = Ложь;
Иначе
Если КоличествоПопыток < 5 Тогда
КоличествоПопыток = КоличествоПопыток + 1;
Иначе
ОтключитьОбработчикОжидания("ПрочитатьДанныеИзТехнологическогоЖурналаОбработчик");
ТребуетсяПрочитатьЖурналИмя = Неопределено;
Элементы.ГруппаПолучениеПланаВыполненияЗапроса.Видимость = Ложь;
ПоказатьПредупреждение(, НСтр("ru = 'Ошибка получения плана выполнения запроса'"));
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказыватьПланВыполненияЗапросаВВидеПриИзменении(Элемент)
Если ПоказыватьПланВыполненияЗапросаВВиде = 0 Тогда
Элементы.ГруппаПланВыполненияЗапроса.ТекущаяСтраница = Элементы.ГруппаПланВыполненияЗапросаSQLСервер;
Иначе
Элементы.ГруппаПланВыполненияЗапроса.ТекущаяСтраница = Элементы.ГруппаПланВыполненияЗапросаТекстовоеПредставление;
КонецЕсли;
КонецПроцедуры
#КонецОбласти