RDT1C/Reports/ирАнализЗамераПроизводительности/Ext/ObjectModule.bsl
Администратор 7c4a4725ab 4.53
Добавлен инструмент "Конструктор регулярного выражения"
    Статистика по запросам MSSQL
        *Исправлена ошибка открытия формы в портативном варианте
    Консоль запросов
        *В режиме редактирования узла дерева запроса реализована возможность перехода к другим узлам дерева, но одновременно редактироваться по-прежнему может только один узел
    Тестирование метаданных
        +Добавлена кнопка "Новое окно"
        *Добавлена передача параметра "Автотест" при получении управляемых форм
    Консоль компоновки
        +Обработчику события ПередВыполнением добавлен параметр ВнешниеНаборыДанных
    Редактор изменений на узлах
        *Исправлена ошибка добавления регистрации изменений регистров через кнопку Подбор
    Динамический список
        +Теперь доступна сортировка по всем возможным колонкам
        +Добавлено поле количества строк в выбранной таблице без учета отбора
    Управление службами серверов 1С
        +Добавлена поддержка служб "Сервер отладки", "Сервер хранилища конфигураций", "Сервер администрирования"
        +Добавлена таблица доступных сборок платформы
4.54
    Конструктор регулярного выражения
        +Реализовано автообновление проверочного текста в процессе редактирования
        +Добавлены флажки "Многострочный" и "Игнорировать регистр"
        *Исправлена проблема пропажи служебных символов XML при обновлении проверочного текста
        *Исправлено удаление оформления из выражений параметров при генерации кода 1С
        +По кнопке "Сгенерировать код" теперь в параметр ТекстГдеИскать передается проверочный текст
        *Исправлена ошибка в портативном варианте при открытии формы настроек
    Консоль запросов
        *Исправлена свежая ошибка открытия конструктора запроса ИР
        *Исправлена свежая некритичная ошибка при добавлении запроса
    Управление службами серверов 1С
        +При выборе новой сборки платформы теперь явно указывается ее разрядность
        *Исправлено чтение сборок платформы для новых типов служб
2018-05-20 20:48:55 +03:00

183 lines
16 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,
// {ОписаниеРегулярногоВыражения.Начало} конструктор из подсистемы "Инструменты разработчика" (http://devtool1c.ucoz.ru)
// Перем УИД, ЭкспЧисло, Число, Строка, Запятая, Файл, ИДМодуля, Модуль, НомерСтроки, Текст, Количество, ВремяЧистоеСВложенными, ВремяЧистое, ВремяПроцентСВложенными, ВремяПроцент, Клиент, Сервер, ОбработкаСервером, ШаблонЗаписи;
// {Шаблон.Начало}
// + <УИД> = \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+=(?:<Запятая><Строка>)?)?)?}<Запятая><Модуль><Запятая><НомерСтроки><Запятая><Текст><Запятая><Количество><Запятая><ВремяЧистоеСВложенными><Запятая><ВремяЧистое><Запятая><ВремяПроцентСВложенными><Запятая><ВремяПроцент><Запятая><Клиент><Запятая><Сервер><Запятая><ОбработкаСервером><Запятая><УИД><Запятая>
// {Шаблон.Конец}
УИД = "\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+=(?:" + Запятая + "" + Строка + ")?)?)?}" + Запятая + "" + Модуль + "" + Запятая + "" + НомерСтроки + "" + Запятая + "" + Текст + "" + Запятая + "" + Количество + "" + Запятая + "" + ВремяЧистоеСВложенными + "" + Запятая + "" + ВремяЧистое + "" + Запятая + "" + ВремяПроцентСВложенными + "" + Запятая + "" + ВремяПроцент + "" + Запятая + "" + Клиент + "" + Запятая + "" + Сервер + "" + Запятая + "" + ОбработкаСервером + "" + Запятая + "" + УИД + "" + Запятая + "";
// {ОписаниеРегулярногоВыражения.Конец}
Вхождения = ирОбщий.НайтиРегулярноеВыражениеЛкс(ТекстГдеИскать, ШаблонЗаписи, "Файл, ИДМодуля, ИДМодуля1, Модуль, НомерСтроки, Текст, Количество, ВремяЧистоеСВложенными, ВремяЧистое, ВремяПроцентСВложенными, ВремяПроцент, Клиент, Сервер, ОбработкаСервером");
#Если Сервер И Не Сервер Тогда
Вхождения = Обработки.ирТаблицыДляКонтекстнойПодсказки.Создать().ВхожденияРегулярногоВыражения;
#КонецЕсли
Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(Вхождения.Количество());
Для Каждого Вхождение Из Вхождения Цикл
ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
СтрокаЗамера = Таблица.Добавить();
СтрокаЗамера.Файл = Вычислить(Вхождение.Файл);
СтрокаЗамера.ИДМодуля = Вхождение.ИДМодуля + "," + Вхождение.ИДМодуля1;
СтрокаЗамера.Модуль = Вычислить(Вхождение.Модуль);
СтрокаЗамера.НомерСтроки = Число(Вхождение.НомерСтроки);
СтрокаЗамера.Текст = Вычислить(Вхождение.Текст);
СтрокаЗамера.Количество = Число(Вхождение.Количество);
СтрокаЗамера.ВремяЧистоеСВложенными = Число(Вхождение.ВремяЧистоеСВложенными);
СтрокаЗамера.ВремяЧистое = Число(Вхождение.ВремяЧистое);
СтрокаЗамера.ВремяПроцентСВложенными = Число(Вхождение.ВремяПроцентСВложенными);
СтрокаЗамера.ВремяПроцент = Число(Вхождение.ВремяПроцент);
СтрокаЗамера.Клиент = Число(Вхождение.Клиент);
СтрокаЗамера.Сервер = Число(Вхождение.Сервер);
СтрокаЗамера.ОбработкаСервером = Число(Вхождение.ОбработкаСервером);
КонецЦикла;
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
Таблица.Сортировать("ИДМодуля, НомерСтроки, Клиент");
ПредыдущаяСтрока = Неопределено;
НомерМетода = 0;
Для Каждого СтрокаЗамера Из Таблица Цикл
ЭтоНовыйМетод = ПредыдущаяСтрока = Неопределено;
Если Истина
И ПредыдущаяСтрока <> Неопределено
И (Ложь
Или Найти(НРег(ПредыдущаяСтрока.Текст), "конецпроцедуры") > 0
Или Найти(НРег(ПредыдущаяСтрока.Текст), "конецфункции") > 0)
Тогда
ПредыдущаяСтрока.КоличествоВыходов = ПредыдущаяСтрока.Количество;
Если ПредыдущаяСтрока.НомерСтроки <> СтрокаЗамера.НомерСтроки Тогда
ЭтоНовыйМетод = Истина;
КонецЕсли;
КонецЕсли;
Если Истина
И ПредыдущаяСтрока <> Неопределено
И ПредыдущаяСтрока.ИДМодуля <> СтрокаЗамера.ИДМодуля
Тогда
ЭтоНовыйМетод = Истина;
КонецЕсли;
Если Ложь
Или ЭтоНовыйМетод
Или (Истина
И ПредыдущаяСтрока <> Неопределено
И ПредыдущаяСтрока.КоличествоВходов > 0
И ПредыдущаяСтрока.ИДМодуля = СтрокаЗамера.ИДМодуля
И ПредыдущаяСтрока.НомерСтроки = СтрокаЗамера.НомерСтроки)
Тогда
СтрокаЗамера.КоличествоВходов = СтрокаЗамера.Количество;
СтрокаЗамера.НомерПервойСтрокиМетода = СтрокаЗамера.НомерСтроки;
КонецЕсли;
Если ЭтоНовыйМетод Тогда
НомерМетода = НомерМетода + 1;
КонецЕсли;
СтрокаЗамера.Метод = "Метод" + XMLСтрока(НомерМетода);
ПредыдущаяСтрока = СтрокаЗамера;
КонецЦикла;
СтрокаЗамера.КоличествоВыходов = СтрокаЗамера.Количество;
КонечнаяНастройка = КомпоновщикНастроек.Настройки;
ВнешниеНаборыДанных = Новый Структура("Таблица", Таблица);
Если РежимОтладки = 2 Тогда
ирОбщий.ОтладитьЛкс(СхемаКомпоновкиДанных, , КонечнаяНастройка, ВнешниеНаборыДанных);
Возврат;
КонецЕсли;
ирОбщий.СкомпоноватьВТабличныйДокументЛкс(СхемаКомпоновкиДанных, КонечнаяНастройка, ДокументРезультат, ВнешниеНаборыДанных, ДанныеРасшифровки);
КонецПроцедуры
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
//ирПортативный #Если Клиент Тогда
//ирПортативный Контейнер = Новый Структура();
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
//ирПортативный ирПортативный.Открыть();
//ирПортативный КонецЕсли;
//ирПортативный #Иначе
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
//ирПортативный #КонецЕсли
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
РежимОтладки = 0;