//ирПортативный Перем ирПортативный Экспорт; //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; //ирПортативный Перем ирПривилегированный Экспорт; Перем РежимОтладки Экспорт; Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) #Если _ Тогда СхемаКомпоновки = Новый СхемаКомпоновкиДанных; КонечнаяНастройка = Новый НастройкиКомпоновкиДанных; ВнешниеНаборыДанных = Новый Структура; ДокументРезультат = Новый ТабличныйДокумент; #КонецЕсли ДокументРезультат.Очистить(); СтандартнаяОбработка = Ложь; ФайлЗамера = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ФайлЗамера")).Значение; Таблица = Новый ТаблицаЗначений; Таблица.Колонки.Добавить("Файл"); Таблица.Колонки.Добавить("Модуль"); Таблица.Колонки.Добавить("ИДМодуля"); Таблица.Колонки.Добавить("Текст"); Таблица.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число")); Таблица.Колонки.Добавить("НомерПервойСтрокиМетода", Новый ОписаниеТипов("Число")); Таблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число")); Таблица.Колонки.Добавить("ВремяЧистое", Новый ОписаниеТипов("Число")); Таблица.Колонки.Добавить("ВремяЧистоеСВложенными", Новый ОписаниеТипов("Число")); Таблица.Колонки.Добавить("ВремяПроцент", Новый ОписаниеТипов("Число")); Таблица.Колонки.Добавить("ВремяПроцентСВложенными", Новый ОписаниеТипов("Число")); Таблица.Колонки.Добавить("Клиент", Новый ОписаниеТипов("Булево")); Таблица.Колонки.Добавить("Сервер", Новый ОписаниеТипов("Булево")); Таблица.Колонки.Добавить("ОбработкаСервером", Новый ОписаниеТипов("Булево")); Таблица.Колонки.Добавить("Метод", Новый ОписаниеТипов("Строка")); Таблица.Колонки.Добавить("КоличествоВходов", Новый ОписаниеТипов("Число")); Таблица.Колонки.Добавить("КоличествоВыходов", Новый ОписаниеТипов("Число")); ТекстовыйДокумент = Новый ТекстовыйДокумент; Попытка ТекстовыйДокумент.Прочитать(ФайлЗамера); Исключение Сообщить("Ошибка чтения файла замера: " + ОписаниеОшибки(), СтатусСообщения.Внимание); Возврат; КонецПопытки; Текст = ТекстовыйДокумент.ПолучитьТекст(); // Пример // {{"",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;