План запроса в форме анализа техножурнала находится в "сыром" виде, который визуально сложно анализировать. Предлагаю добавить функцию, которая будет применять форматирование для текстов планов запроса для упрощения восприятия и анализа оных.
// Возвращает отформатированный текст плана запроса, выровненный по столбцам в части цифр. // // Параметры: // ТекстПланаЗапроса - Строка, "сырой" текст плана запроса // // Возвращаемое значение: // Строка, результат форматирования // Функция ФорматироватьПланЗапроса(ТекстПланаЗапроса)
Если ПустаяСтрока(ТекстПланаЗапроса) Тогда Возврат "" КонецЕсли;
Размерность = Новый Структура; ТаблицаТрасса = Новый ТаблицаЗначений;
Колонки = Новый Массив; Для пц = 1 По 8 Цикл Колонки.Добавить("Показатель" + пц); КонецЦикла; Колонки.Добавить("Расшифровка");
Для каждого Колонка Из Колонки Цикл ТаблицаТрасса.Колонки.Добавить(Колонка, Новый ОписаниеТипов("Строка")); Размерность.Вставить(Колонка, 0); КонецЦикла;
Для пц = 1 По СтрЧислоСтрок(ТекстПланаЗапроса) Цикл ЭлементТрассы = СтрЗаменить(СтрПолучитьСтроку(ТекстПланаЗапроса, пц), ",", Символы.ПС); НоваяСтрока = ТаблицаТрасса.Добавить(); Для пц1 = 1 По 8 Цикл НоваяСтрока["Показатель" + пц1] = СтрПолучитьСтроку(ЭлементТрассы, пц1) + ","; КонецЦикла; Расшифровка = ""; Для пц1 = 9 По СтрЧислоСтрок(ЭлементТрассы) Цикл Расшифровка = Расшифровка + "," + СтрПолучитьСтроку(ЭлементТрассы, пц1); КонецЦикла; НоваяСтрока.Расшифровка = Сред(Расшифровка, 2); Для каждого Колонка Из Колонки Цикл Размерность[Колонка] = Макс(Размерность[Колонка], СтрДлина(НоваяСтрока[Колонка])); КонецЦикла; КонецЦикла;
Забивка = ""; Для пц = 1 По Размерность.Расшифровка Цикл Забивка = Забивка + " "; КонецЦикла;
МакетТекст = ШаблонМакет; Для каждого Колонка Из Колонки Цикл ЧтоИщем = "[" + Колонка + "]"; ЧтоМеняем = "[" + Лев(Забивка, Размерность[Колонка] - 2) + "]"; МакетТекст = СтрЗаменить(МакетТекст, ЧтоИщем, ЧтоМеняем); КонецЦикла;
Макет = Новый ТекстовыйДокумент; Макет.УстановитьТекст(МакетТекст);
Документ = Новый ТекстовыйДокумент; Для каждого Строка Из ТаблицаТрасса Цикл Область = Макет.ПолучитьОбласть("Трасса"); ЗаполнитьЗначенияСвойств(Область.Параметры, Строка); Документ.Вывести(Область); КонецЦикла;
Возврат Документ.ПолучитьТекст();
КонецФункции // ФорматироватьПланЗапроса()
Сообщение отредактировал smerch - Пятница, 12.04.2019, 14:17