RDT1C/Reports/ирАнализЗамераПроизводительности/Ext/ObjectModule.bsl
Администратор 6b2afa2228 Добавлен инструмент Анализ замера производительности
Форма выбора объектов метаданных
        *Исправлено вычисление количества строк кнопкой "Количество" у табличных частей и перерасчетов
    Общее
        *Исправлены ошибки при работе с наборами записей перерасчетов
        *Исправлена ошибка обработки отказа от записи при наличии ссылки на объект БД в дополнительных свойствах объекта
        +В форме настроек подключения к СУБД собственной базы добавлен режим выполнения запросов непосредственно с сервера 1С
    Статистика по запросам MSSQL
        +Добавлено подменю вариантов отчета
        +Добавлена кнопка передачи компоновки отчета в консоль компоновки
        +Добавлена кнопка передачи запроса отчета в консоль запросов
    Консоль кода
        *Исправлена команда "В однострочный" для выделенного фрагмента
    Консоль запросов
        +На закладке "Запрос результата" добавлена кнопка "Статистика MSSQL" для открытия инструмента "Статистика по запросам MSSQL" с передачей интервала последнего выполнения запроса
        *Исправлена потеря регистра букв имен на закладке "Временные таблицы" в некоторых случаях в режиме дерева запроса
    Тестирование метаданных
        *Исправлена ошибка  тестирования элементов управления управляемых форм
    Поиск дублей и замена ссылок
        *Исправлено заполнение колонки "Ценность данных" кнопкой "обновить ценность" на закладке "Группы дублей"
    Конструктор запроса
        *Исправлено попадание элементов отбора с агрегатами в некоторых случаях в секцию ГДЕ вместо ИМЕЮЩИЕ при сборке текста
        *Исправлено в некоторых случаях некорректное преобразование константного правого значения элемента условия в параметр
    Структура хранения БД
        +Добавлена кнопка "Описание шаблонов ИТС"
    Редактор объекта БД
        +На закладке "Связанные колонки" добавлено групповое изменение пометок
        +В списке реквизитов добавлена колонка "Зависит от" для отражения связей параметров выбора
        *Исправлена работа связей параметров выбора сломанная несколько версий назад
        +Добавлена команда выгрузки избранных связанных колонок
        +При загрузке объекта из памяти теперь считываются дополнительные свойства в одноименную таблицу на форме
        *Исправлена ошибка при выборе метассылок (например перечислений) внесенная несколько версий назад
    Подбор и обработка объектов
        *Исправлена ошибка обработки строк некоторых регистров
        +В обработке "Добавить/изменить строку" добавлена колонка "Зависит от" для отражения связей параметров выбора
    Консоль заданий
        +Добавлена команда перехода к методу из списка фоновых заданий
        +Для фонового задания сделана полноценная форма
        *Список методов теперь сортируется по алфавиту
        +В списке методов добавлены колонки "Последний конец" и "Возраст, м"
        +Добавлен режим автообновления для списка методов
    Редактор хранилищ настроек
        +Добавлены команды выгрузки/загрузки выделенных настроек в/из файла
        +Добавлена команда установки отбора по настройкам инструментов разработчика
    Анализ техножурнала
        +При загрузке логов с отбором теперь выводится сообщение с представлением фильтра
        +Добавлен фильтр по типу события на этапе загрузке логов
2018-05-02 23:53:06 +03:00

151 lines
13 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.

//ирПортативный Перем ирПортативный Экспорт;
//ирПортативный Перем ирОбщий Экспорт;
//ирПортативный Перем ирСервер Экспорт;
//ирПортативный Перем ирКэш Экспорт;
//ирПортативный Перем ирПривилегированный Экспорт;
Перем РежимОтладки Экспорт;
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
#Если _ Тогда
СхемаКомпоновки = Новый СхемаКомпоновкиДанных;
КонечнаяНастройка = Новый НастройкиКомпоновкиДанных;
ВнешниеНаборыДанных = Новый Структура;
ДокументРезультат = Новый ТабличныйДокумент;
#КонецЕсли
ДокументРезультат.Очистить();
СтандартнаяОбработка = Ложь;
ФайлЗамера = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ФайлЗамера")).Значение;
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Файл");
Таблица.Колонки.Добавить("Модуль");
Таблица.Колонки.Добавить("ИДМодуля");
Таблица.Колонки.Добавить("Текст");
Таблица.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("НомерПервойСтрокиМетода", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("ВремяЧистое", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("ВремяЧистоеСВложенными", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("ВремяПроцент", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("ВремяПроцентСВложенными", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Клиент", Новый ОписаниеТипов("Булево"));
Таблица.Колонки.Добавить("Сервер", Новый ОписаниеТипов("Булево"));
Таблица.Колонки.Добавить("ОбработкаСервером", Новый ОписаниеТипов("Булево"));
Таблица.Колонки.Добавить("Метод", Новый ОписаниеТипов("Строка"));
Таблица.Колонки.Добавить("КоличествоВходов", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("КоличествоВыходов", Новый ОписаниеТипов("Число"));
ТекстовыйДокумент = Новый ТекстовыйДокумент;
Попытка
ТекстовыйДокумент.Прочитать(ФайлЗамера);
Исключение
Сообщить("Ошибка чтения файла замера: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
Текст = ТекстовыйДокумент.ПолучитьТекст();
// Пример
// {{"",0},ada14b12-452d-4f85-9d71-99554e8fc6c0,a78d9ce3-4e0c-48d5-9863-ae7342eedf94,0,00000000-0000-0000-0000-000000000000,0,AAAAAAAAAAAAAAAAAAAAAAAAAAA=,""},"МодульОбычногоПриложения",515,"Если глЗначениеПеременной(""глОбработкаАвтоОбменДанными"") = Неопределено Тогда",1,0.00023340955344883218397869,0.000020323812104611060902992,0.000450628996772107550476536,0.000039237892896673637698585,1,0,0,aaff96cf-5e0a-4e93-aa3e-70ab34e49a77,
шГУИД = "\b[A-F0-9]{8}(?:-[A-F0-9]{4}){3}-[A-Z0-9]{12}\b";
шЭкспЧисло = "[-+]?(?:\b[0-9]+(?:\.[0-9]*)?|\.[0-9]+\b)(?:[eE][-+]?[0-9]+\b)?";
шЧисло = "(?:[\d]+)";
шСтрока = """(?:(?:"""")|[^""])*""";
шЗапятая = "\s*,\s*";
ШаблонЗаписи = "{\s*{\s*" + "(" + шСтрока + ")" + шЗапятая + шЧисло + "\s*}" + шЗапятая + "(" + шГУИД + ")" + шЗапятая + "(" + шГУИД + ")" + шЗапятая + шЧисло + "\s*"
+ "(?:" + шЗапятая + шГУИД + шЗапятая + шЧисло + "(?:" + шЗапятая + "\w+=(?:" + шЗапятая + шСтрока + ")?)?)?}"
+ шЗапятая + "(" + шСтрока + ")" + шЗапятая + "(" + шЧисло + ")" + шЗапятая + "(" + шСтрока + ")" + шЗапятая + "(" + шЧисло + ")"
+ шЗапятая + "(" + шЭкспЧисло + ")" + шЗапятая + "(" + шЭкспЧисло + ")" + шЗапятая + "(" + шЭкспЧисло + ")" + шЗапятая + "(" + шЭкспЧисло + ")"
+ шЗапятая + "(" + шЧисло + ")" + шЗапятая + "(" + шЧисло + ")" + шЗапятая + "(" + шЧисло + ")" + шЗапятая + шГУИД + шЗапятая;
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
RegExp.Multiline = Истина;
RegExp.Pattern = ШаблонЗаписи;
Вхождения = RegExp.Execute(Текст);
СсылкаСервиса = 0;
Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(Вхождения.Count);
Для Каждого Вхождение Из Вхождения Цикл
ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
СтрокаЗамера = Таблица.Добавить();
СтрокаЗамера.Файл = Вычислить(Вхождение.SubMatches(0));
СтрокаЗамера.ИДМодуля = Вхождение.SubMatches(1) + "," + Вхождение.SubMatches(2);
СтрокаЗамера.Модуль = Вычислить(Вхождение.SubMatches(3));
СтрокаЗамера.НомерСтроки = Число(Вхождение.SubMatches(4));
СтрокаЗамера.Текст = Вычислить(Вхождение.SubMatches(5));
СтрокаЗамера.Количество = Число(Вхождение.SubMatches(6));
СтрокаЗамера.ВремяЧистоеСВложенными = Число(Вхождение.SubMatches(7));
СтрокаЗамера.ВремяЧистое = Число(Вхождение.SubMatches(8));
СтрокаЗамера.ВремяПроцентСВложенными = Число(Вхождение.SubMatches(9));
СтрокаЗамера.ВремяПроцент = Число(Вхождение.SubMatches(10));
СтрокаЗамера.Клиент = Число(Вхождение.SubMatches(11));
СтрокаЗамера.Сервер = Число(Вхождение.SubMatches(12));
СтрокаЗамера.ОбработкаСервером = Число(Вхождение.SubMatches(13));
КонецЦикла;
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
Таблица.Сортировать("ИДМодуля, НомерСтроки, Клиент");
ПредыдущаяСтрока = Неопределено;
НомерМетода = 0;
Для Каждого СтрокаЗамера Из Таблица Цикл
ЭтоНовыйМетод = ПредыдущаяСтрока = Неопределено;
Если Истина
И ПредыдущаяСтрока <> Неопределено
И (Ложь
Или Найти(НРег(ПредыдущаяСтрока.Текст), "конецпроцедуры") > 0
Или Найти(НРег(ПредыдущаяСтрока.Текст), "конецфункции") > 0)
Тогда
ПредыдущаяСтрока.КоличествоВыходов = ПредыдущаяСтрока.Количество;
Если ПредыдущаяСтрока.НомерСтроки <> СтрокаЗамера.НомерСтроки Тогда
ЭтоНовыйМетод = Истина;
КонецЕсли;
КонецЕсли;
Если Истина
И ПредыдущаяСтрока <> Неопределено
И ПредыдущаяСтрока.ИДМодуля <> СтрокаЗамера.ИДМодуля
Тогда
ЭтоНовыйМетод = Истина;
КонецЕсли;
Если Ложь
Или ЭтоНовыйМетод
Или (Истина
И ПредыдущаяСтрока <> Неопределено
И ПредыдущаяСтрока.КоличествоВходов > 0
И ПредыдущаяСтрока.ИДМодуля = СтрокаЗамера.ИДМодуля
И ПредыдущаяСтрока.НомерСтроки = СтрокаЗамера.НомерСтроки)
Тогда
СтрокаЗамера.КоличествоВходов = СтрокаЗамера.Количество;
СтрокаЗамера.НомерПервойСтрокиМетода = СтрокаЗамера.НомерСтроки;
КонецЕсли;
Если ЭтоНовыйМетод Тогда
НомерМетода = НомерМетода + 1;
КонецЕсли;
СтрокаЗамера.Метод = "Метод" + XMLСтрока(НомерМетода);
ПредыдущаяСтрока = СтрокаЗамера;
КонецЦикла;
СтрокаЗамера.КоличествоВыходов = СтрокаЗамера.Количество;
КонечнаяНастройка = КомпоновщикНастроек.Настройки;
ВнешниеНаборыДанных = Новый Структура("Таблица", Таблица);
Если РежимОтладки = 2 Тогда
ирОбщий.ОтладитьЛкс(СхемаКомпоновкиДанных, , КонечнаяНастройка, ВнешниеНаборыДанных);
Возврат;
КонецЕсли;
ирОбщий.СкомпоноватьВТабличныйДокументЛкс(СхемаКомпоновкиДанных, КонечнаяНастройка, ДокументРезультат, ВнешниеНаборыДанных, ДанныеРасшифровки);
КонецПроцедуры
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
//ирПортативный #Если Клиент Тогда
//ирПортативный Контейнер = Новый Структура();
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
//ирПортативный ирПортативный.Открыть();
//ирПортативный КонецЕсли;
//ирПортативный #Иначе
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
//ирПортативный #КонецЕсли
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
РежимОтладки = 0;