mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-17 05:04:11 +00:00
*Исправлена невозможность выбирать папку в управляемой форме
*В обычной форме оптимизировано отображение данных таблиц с большим количеством колонок за счет отключения видимости части колонок
Грамматика языка запросов
*Исправлена поддержка конструкции "ПустаяТаблица.(,,)"
Загрузка табличных данных
*Исправлена ошибка обработки ошибки в обработчиках
Контекстная подсказка
*Исправлены ошибки в клиент-серверных базах под управляемое приложения при вычислении свойств некоторых объектов данных
Различные значения колонки
*Исправлено свежее включение выключенных элементов отбора по периоду при копировании отбора динамического списка
Статистика по запросам MSSQL
*Исправлена ошибка при расшифровке ячейки с текстом запроса в портативном варианте
Анализ замера производительности
+Добавлено поле "Ссылка строки" для перехода к строке в конфигураторе через ClipAngel
187 lines
17 KiB
Plaintext
187 lines
17 KiB
Plaintext
//ирПортативный Перем ирПортативный Экспорт;
|
||
//ирПортативный Перем ирОбщий Экспорт;
|
||
//ирПортативный Перем ирСервер Экспорт;
|
||
//ирПортативный Перем ирКэш Экспорт;
|
||
//ирПортативный Перем ирПривилегированный Экспорт;
|
||
|
||
Перем РежимОтладки Экспорт;
|
||
|
||
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
|
||
|
||
#Если _ Тогда
|
||
СхемаКомпоновки = Новый СхемаКомпоновкиДанных;
|
||
КонечнаяНастройка = Новый НастройкиКомпоновкиДанных;
|
||
ВнешниеНаборыДанных = Новый Структура;
|
||
ДокументРезультат = Новый ТабличныйДокумент;
|
||
#КонецЕсли
|
||
ДокументРезультат.Очистить();
|
||
СтандартнаяОбработка = Ложь;
|
||
ФайлЗамера = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ФайлЗамера")).Значение;
|
||
Таблица = Новый ТаблицаЗначений;
|
||
Таблица.Колонки.Добавить("Файл");
|
||
Таблица.Колонки.Добавить("Модуль");
|
||
Таблица.Колонки.Добавить("ИДМодуля");
|
||
Таблица.Колонки.Добавить("Текст");
|
||
Таблица.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число"));
|
||
Таблица.Колонки.Добавить("НомерПервойСтрокиМетода", Новый ОписаниеТипов("Число"));
|
||
Таблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
|
||
Таблица.Колонки.Добавить("ВремяЧистое", Новый ОписаниеТипов("Число"));
|
||
Таблица.Колонки.Добавить("ВремяЧистоеСВложенными", Новый ОписаниеТипов("Число"));
|
||
Таблица.Колонки.Добавить("ВремяПроцент", Новый ОписаниеТипов("Число"));
|
||
Таблица.Колонки.Добавить("ВремяПроцентСВложенными", Новый ОписаниеТипов("Число"));
|
||
Таблица.Колонки.Добавить("Клиент", Новый ОписаниеТипов("Булево"));
|
||
Таблица.Колонки.Добавить("Сервер", Новый ОписаниеТипов("Булево"));
|
||
Таблица.Колонки.Добавить("ОбработкаСервером", Новый ОписаниеТипов("Булево"));
|
||
Таблица.Колонки.Добавить("Метод", Новый ОписаниеТипов("Строка"));
|
||
Таблица.Колонки.Добавить("КоличествоВходов", Новый ОписаниеТипов("Число"));
|
||
Таблица.Колонки.Добавить("КоличествоВыходов", Новый ОписаниеТипов("Число"));
|
||
Таблица.Колонки.Добавить("СсылкаСтроки", Новый ОписаниеТипов("Строка"));
|
||
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
Попытка
|
||
ТекстовыйДокумент.Прочитать(ФайлЗамера);
|
||
Исключение
|
||
Сообщить("Ошибка чтения файла замера: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
|
||
Возврат;
|
||
КонецПопытки;
|
||
ТекстГдеИскать = ТекстовыйДокумент.ПолучитьТекст();
|
||
// Пример
|
||
// {{"",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;
|
||
СтрокаЗамера.Модуль = Вычислить(Вхождение.Модуль);
|
||
СтрокаЗамера.НомерСтроки = Число(Вхождение.НомерСтроки);
|
||
СтрокаЗамера.Текст = Вычислить(Вхождение.Текст);
|
||
СтрокаЗамера.Количество = Число(Вхождение.Количество);
|
||
СтрокаЗамера.ВремяЧистоеСВложенными = Число(Вхождение.ВремяЧистоеСВложенными);
|
||
СтрокаЗамера.ВремяЧистое = Число(Вхождение.ВремяЧистое);
|
||
СтрокаЗамера.ВремяПроцентСВложенными = Число(Вхождение.ВремяПроцентСВложенными);
|
||
СтрокаЗамера.ВремяПроцент = Число(Вхождение.ВремяПроцент);
|
||
СтрокаЗамера.Клиент = Число(Вхождение.Клиент);
|
||
СтрокаЗамера.Сервер = Число(Вхождение.Сервер);
|
||
СтрокаЗамера.ОбработкаСервером = Число(Вхождение.ОбработкаСервером);
|
||
Если НРег(ирОбщий.ПолучитьПоследнийФрагментЛкс(СтрокаЗамера.Модуль)) <> "epf" Тогда
|
||
СтрокаЗамера.СсылкаСтроки = "{" + СтрокаЗамера.Модуль + "(" + XMLСтрока(СтрокаЗамера.НомерСтроки) + ")}";
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
|
||
Таблица.Сортировать("ИДМодуля, НомерСтроки, Клиент");
|
||
ПредыдущаяСтрока = Неопределено;
|
||
НомерМетода = 0;
|
||
Для Каждого СтрокаЗамера Из Таблица Цикл
|
||
ЭтоНовыйМетод = ПредыдущаяСтрока = Неопределено;
|
||
Если Истина
|
||
И ПредыдущаяСтрока <> Неопределено
|
||
И (Ложь
|
||
Или Найти(НРег(ПредыдущаяСтрока.Текст), "конецпроцедуры") > 0
|
||
Или Найти(НРег(ПредыдущаяСтрока.Текст), "конецфункции") > 0)
|
||
Тогда
|
||
ПредыдущаяСтрока.КоличествоВыходов = ПредыдущаяСтрока.Количество;
|
||
Если ПредыдущаяСтрока.НомерСтроки <> СтрокаЗамера.НомерСтроки Тогда
|
||
ЭтоНовыйМетод = Истина;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если Истина
|
||
И ПредыдущаяСтрока <> Неопределено
|
||
И ПредыдущаяСтрока.ИДМодуля <> СтрокаЗамера.ИДМодуля
|
||
Тогда
|
||
ЭтоНовыйМетод = Истина;
|
||
КонецЕсли;
|
||
Если Ложь
|
||
Или ЭтоНовыйМетод
|
||
Или (Истина
|
||
И ПредыдущаяСтрока <> Неопределено
|
||
И ПредыдущаяСтрока.КоличествоВходов > 0
|
||
И ПредыдущаяСтрока.ИДМодуля = СтрокаЗамера.ИДМодуля
|
||
И ПредыдущаяСтрока.НомерСтроки = СтрокаЗамера.НомерСтроки)
|
||
Тогда
|
||
СтрокаЗамера.КоличествоВходов = СтрокаЗамера.Количество;
|
||
СтрокаЗамера.НомерПервойСтрокиМетода = СтрокаЗамера.НомерСтроки;
|
||
КонецЕсли;
|
||
Если ЭтоНовыйМетод Тогда
|
||
НомерМетода = НомерМетода + 1;
|
||
КонецЕсли;
|
||
СтрокаЗамера.Метод = "Метод" + XMLСтрока(НомерМетода);
|
||
ПредыдущаяСтрока = СтрокаЗамера;
|
||
КонецЦикла;
|
||
СтрокаЗамера.КоличествоВыходов = СтрокаЗамера.Количество;
|
||
КонечнаяНастройка = КомпоновщикНастроек.Настройки;
|
||
ВнешниеНаборыДанных = Новый Структура("Таблица", Таблица);
|
||
Если РежимОтладки = 2 Тогда
|
||
ирОбщий.ОтладитьЛкс(СхемаКомпоновкиДанных, , КонечнаяНастройка, ВнешниеНаборыДанных);
|
||
Возврат;
|
||
КонецЕсли;
|
||
ирОбщий.СкомпоноватьВТабличныйДокументЛкс(СхемаКомпоновкиДанных, КонечнаяНастройка, ДокументРезультат, ВнешниеНаборыДанных, ДанныеРасшифровки);
|
||
|
||
КонецПроцедуры
|
||
|
||
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
|
||
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
|
||
//ирПортативный #Если Клиент Тогда
|
||
//ирПортативный Контейнер = Новый Структура();
|
||
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
|
||
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
|
||
//ирПортативный ирПортативный.Открыть();
|
||
//ирПортативный КонецЕсли;
|
||
//ирПортативный #Иначе
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
|
||
//ирПортативный #КонецЕсли
|
||
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
|
||
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
|
||
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
|
||
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
|
||
|
||
РежимОтладки = 0; |