RDT1C/Reports/ирСтатистикаПоЗапросамСУБД/Ext/ObjectModule.bsl
Администратор 22d195419a Добавлен инструмент "Статистика по запросам MSSQL"
Подбор и обработка объектов
        +В обработке "Изменить/добавить строку" добавить флажок "Принудительная запись"
        *Улучшена обработка недоступных полей и таблиц из-за прав и функциональных опций
        *Исправлено свежее воссоздание объектов сразу после удаления в обработке в обработке "Удалить" в непортативных вариантах с включенным флажком "Объекты на сервере"
    Сравнение таблиц
        +Добавлен флажок "Располагать сравниваемые ячейки вертикально"
    Форма выбора метаданных
        +Добавлена кнопка "Функциональные опции" для включения и заполнения одноименной колонки
    Общее
        *Восстановлена совместимость варианта Расширение с 8.3.10 и 8.3.11
        *Исправлена свежая ошибка "Не установлен отбор по регистратору" при записи регистров в клиент-серверном режиме в непортативных вариантах с включенном флажком "Объекты на сервере"
        *Исправлено открытие лишней пустой формы при выполнении команды "Список инструментов и общие настройки" в управляемом приложении
    Конструктор запроса
        *Исправлена ошибка при разборе инструкции INSERT
        *Исправлено превращение значений параметров некоторых типов в строки
    Консоль заданий
        +Для списка фоновых заданий добавлена колонка "Ошибки ЖР", отражающая количество ошибок в журнале регистрации, и переключатель для ее заполнения
        *Исправлено обнобновление отбора по текущему методу в режиме "По методу" при смене текущего метода
    Управление службами серверов 1С
        +Добавлена команда запуска консоли серверов с дополнением ее списка серверов
    Консоль компоновки
        *Исправлена очистка доступных полей компоновщика настроек в некоторых случаях
        +Добавлена индикация наличия неактуальных полей в области и отборе строки условного оформления
    Редактор объекта БД
        *Отключена управляемая форма как менее функциональная, менее быстрая и не привносящая новых возможностей
    Консоль запросов
        *Исправлены мелкие ошибки в работе с ADODB, включая режим без использования компоненты GameWithFire
        *Улучшен поиск итогов по ОБЩИЕ на закладке "Выборки итогов"
    Анализ журнала регистрации
        *Исправлена очистка не включенных элементов отбора при открытии с передачей отбора
    Отложенная отладка
        *В команде "Открыть объект для отладки" исправлен поиск объекта, сохраненного под другим пользователем в вариантах кроме Подсистема
2018-04-22 19:37:06 +03:00

90 lines
7.9 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.

Перем мСоединение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);
КонецЦикла;
ВнешниеНаборыДанных = Новый Структура("Запросы", Запросы);
ирОбщий.СкомпоноватьВТабличныйДокументЛкс(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДокументРезультат, ВнешниеНаборыДанных, ДанныеРасшифровки);
КонецПроцедуры