mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-18 21:54:12 +00:00
Конструктор запроса
+Реализована возможность удаление поля объединения
*В расширенной проверке реализован обход ошибки платформы 8.3.12+, из-за которой не активизировалась страница с проблемным списком выражений
Консоль кода
*Устранено добавление имен недоступных на клиенте общих модулей в параметры при автозаполнении
*В режиме редактора алгоритма при применении изменений теперь выполняется синтаксический контроль
*Устранено изменение имени файла после выполнения команды "Объединить с файлом"
Консоль компоновки
+Добавлено сохранение таблиц внешних наборов данных вместе с отчетом
+На странице "Наборы данных внешние" добавлена кнопка "Сбросить"
*Исправлено не сохранение результатов редактирования элементов схемы компоновки непосредственно в форме инструмента (вычисляемые поля, параметры и т.д.)
*Устранено изменение имени файла после выполнения команды "Объединить с файлом"
Общее для варианта Расширение
*Теперь при входе администратора ему добавляется роль ирРазработчик, если у всех пользователей отсутствует эта роль или включена настройка ДобавлятьРольИРВсемАдминистраторам
*Настройка ДобавлятьРольИРВсемАдминистраторам теперь умолчанию равна Ложь
*Исправлено сохранение настройки ДобавлятьРольИРВсемАдминистраторам для всех пользователей
Подбор и обработка объектов
*Обработка "изменить/добавить строку" переименована в "изменить реквизиты / добавить строку"
Общее
*Исправлена некорректная кодировка при выполнении команд системы на некоторых конфигурациях ОС
+В портативном варианте реализована поддержка перенаправления на сервер операции удаления ссылочного объекта
*Фраза "Административная регистрация COM компонент" глобально заменена на "Регистрация COM-компонент"
*Исправлено некорректное вычисление цвета текста колонки "Функциональные опции"
*Исправлено сохранение флажка "Привилегированный режим"
*В команде "Открыть объект для отладки" исправлен ввод диагностического сообщения при вводе некорректной строки
Контекстная подсказка
*Устранены некоторые ограничения/ошибки при работе с включенным флажком "Объекты на сервере"
Настройка журнала регистрации
*При возникновении ошибки платформы в портативном варианте на 8.2 в клиент-серверной базе теперь выдается более понятная ошибка
Редактор объекта БД
+При выполнении команды "Изменить ячейки текущей колонки" теперь сразу устанавливается флажок "Только выделенные" если выделено больше одной строки
Консоль запросов
*Устранено изменение имени файла после выполнения команды "Объединить с файлом"
*Исправлено растягивание нижних табличных полей на мониторах 1440p+
Управление службами серверов 1С
*Исправлена лишняя проверка уникальности некоторых колонок
Структура хранения БД
+Добавлена кнопка открытия конвертора текста БД
+При нажатии кнопки "Очистка таблиц СУБД..." теперь помеченными по умолчанию будут выделенные в основной форме метаданные
4.68
Адаптация расширения
+Добавлен флажок "Сгенерировать роль ирВсеПрава"
*Исправлено закрытие формы после вывода некоторых ошибок
Отладка внешних обработок БСП
+Реализована поддержка БСП 2.4 в варианте Расширение с использованием адаптации
Форма выбора объекта метаданных
+Объекты, на которые у текущего пользователя нет права Просмотр или выключенные функциональными опциями, теперь окрашиваются красным цветом текста
Грамматика языка запросов
+Добавлена поддержка функции АвтоНомерЗаписи()
*Исправлена ошибка разбора "ПОМЕСТИТЬ Таблица"
Контекстная подсказка
*Исправлена свежая ошибка вычисления табличной части обработки или отчета
Консоль компоновки
*Исправлена свежая проблема не передачи таблиц-параметров при открытии инструмента
Конструктор запроса
*Исправлена некорректная сборка запроса WQL с автополями
*Исправлено дублирование полей у частей объединений при наличии автополей
Общее
+При открытии параметров вывода строк теперь сразу устанавливается флажок "Только выделенные" если выделено больше одной строки
*В окне "О подсистеме" сокращена длительность замирания при отсутствии доступа в интернет в некоторых случаях
*В подключении к СУБД к собственной базе в режиме "На сервере" устранено подключение с клиента
*Отменено свежее некорректное исправление кодировки командных файлов
Статистистика по запросам MSSQL
*Улучшено преобразование границ интервала времени 1С в SQL
+По умолчанию элемент отбора "Ненулевой вввод/вывод" в варианте "Последние" теперь отключен
141 lines
16 KiB
Plaintext
141 lines
16 KiB
Plaintext
//ирПортативный Перем ирПортативный Экспорт;
|
||
//ирПортативный Перем ирОбщий Экспорт;
|
||
//ирПортативный Перем ирСервер Экспорт;
|
||
//ирПортативный Перем ирКэш Экспорт;
|
||
//ирПортативный Перем ирПривилегированный Экспорт;
|
||
|
||
Перем РежимОтладки Экспорт;
|
||
|
||
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
|
||
|
||
#Если _ Тогда
|
||
СхемаКомпоновки = Новый СхемаКомпоновкиДанных;
|
||
КонечнаяНастройка = Новый НастройкиКомпоновкиДанных;
|
||
ВнешниеНаборыДанных = Новый Структура;
|
||
ДокументРезультат = Новый ТабличныйДокумент;
|
||
#КонецЕсли
|
||
СтандартнаяОбработка = Ложь;
|
||
ДокументРезультат.Очистить();
|
||
Если Не ирОбщий.ПроверитьСоединениеADOЭтойБДЛкс() Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
ТекстЗапроса = ПолучитьМакет("StatisticsQuery").ПолучитьТекст();
|
||
АнализТехножурнала = ирОбщий.ПолучитьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирАнализТехножурнала");
|
||
#Если Сервер И Не Сервер Тогда
|
||
АнализТехножурнала = Обработки.ирАнализТехножурнала.Создать();
|
||
#КонецЕсли
|
||
КонечнаяНастройка = КомпоновщикНастроек.ПолучитьНастройки();
|
||
ПорядокЗапроса = ирОбщий.ВыражениеПорядкаКомпоновкиНаЯзыкеЛкс(КонечнаяНастройка.Порядок,,, "MSSQL");
|
||
Если Не ЗначениеЗаполнено(ПорядокЗапроса) Тогда
|
||
ПорядокЗапроса = "TotIO desc";
|
||
КонецЕсли;
|
||
// http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=542796
|
||
ТекущаяДата = ТекущаяДата();
|
||
СмещениеВремени = ТекущаяДата - ирОбщий.ВыполнитьЗапросКЭтойБазеЧерезADOЛкс("select CURRENT_TIMESTAMP",,, 0, Ложь)[0][0] - 1;
|
||
|
||
КоличествоПервых = КонечнаяНастройка.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КоличествоПервых")).Значение;
|
||
ПараметрПопавшиеВПоследниеМинут = КонечнаяНастройка.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПопавшиеВПоследниеМинут"));
|
||
ПопавшиеВПоследниеМинут = 1000;
|
||
Если ПараметрПопавшиеВПоследниеМинут.Использование Тогда
|
||
ПопавшиеВПоследниеМинут = ПараметрПопавшиеВПоследниеМинут.Значение
|
||
КонецЕсли;
|
||
ПараметрНачалоИнтервала = КонечнаяНастройка.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоИнтервала"));
|
||
НачалоИнтервала = Дата(2000,1,1);
|
||
Если ПараметрНачалоИнтервала.Использование Тогда
|
||
НачалоИнтервала = Дата(ПараметрНачалоИнтервала.Значение) - СмещениеВремени - 1;
|
||
КонецЕсли;
|
||
ТекстЗапроса = ирОбщий.СтрЗаменитьОбязательноЛкс(ТекстЗапроса, "1111-11-11 11:11:11", Формат(НачалоИнтервала, "ДФ=""yyyy-MM-dd HH:mm:ss"""));
|
||
ПараметрКонецИнтервала = КонечнаяНастройка.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецИнтервала"));
|
||
КонецИнтервала = Дата(2100,1,1);
|
||
Если ПараметрКонецИнтервала.Использование Тогда
|
||
КонецИнтервала = Дата(ПараметрКонецИнтервала.Значение) - СмещениеВремени + 1;
|
||
КонецЕсли;
|
||
ТекстЗапроса = ирОбщий.СтрЗаменитьОбязательноЛкс(ТекстЗапроса, "2222-22-22 22:22:22", Формат(КонецИнтервала, "ДФ=""yyyy-MM-dd HH:mm:ss"""));
|
||
ТекстЗапроса = ирОбщий.СтрЗаменитьОбязательноЛкс(ТекстЗапроса, "top 111", "top " + XMLСтрока(КоличествоПервых));
|
||
ТекстЗапроса = ирОбщий.СтрЗаменитьОбязательноЛкс(ТекстЗапроса, "333", XMLСтрока(ПопавшиеВПоследниеМинут));
|
||
НенулевойВводВывод = ирОбщий.НайтиЭлементКоллекцииПоЗначениюСвойстваЛкс(КонечнаяНастройка.Отбор.Элементы, "Представление", "Ненулевой ввод/вывод");
|
||
Если НенулевойВводВывод = Неопределено Или Не НенулевойВводВывод.Использование Тогда
|
||
// Этот фрагмент сильно ускоряет запрос, но иногда будет отсекать полезные данные
|
||
ТекстЗапроса = ирОбщий.СтрЗаменитьОбязательноЛкс(ТекстЗапроса, "(total_logical_reads > 0 or total_logical_writes > 0)", "(1=1)");
|
||
КонецЕсли;
|
||
ГруппаОтбора = ирОбщий.НайтиЭлементКоллекцииПоЗначениюСвойстваЛкс(КонечнаяНастройка.Отбор.Элементы, "Представление", "Не содержит служебных таблиц 1С");
|
||
Если ГруппаОтбора <> Неопределено И ГруппаОтбора.Использование Тогда
|
||
ОбработкаСтруктураХраненияБД = ирОбщий.ПолучитьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирСтруктураХраненияБД");
|
||
#Если Сервер И Не Сервер Тогда
|
||
ОбработкаСтруктураХраненияБД = обработки.ирСтруктураХраненияБД.Создать();
|
||
#КонецЕсли
|
||
Для Каждого ИмяСлужебнойТаблицы Из ОбработкаСтруктураХраненияБД.мИменаДополнительныхТаблиц Цикл
|
||
ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаОтбора, "ТекстЗапроса", "FROM " + ИмяСлужебнойТаблицы.Ключ, ВидСравненияКомпоновкиДанных.НеСодержит,, Ложь);
|
||
ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаОтбора, "ТекстЗапроса", "FROM dbo." + ИмяСлужебнойТаблицы.Ключ, ВидСравненияКомпоновкиДанных.НеСодержит,, Ложь);
|
||
ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаОтбора, "ТекстЗапроса", "UPDATE " + ИмяСлужебнойТаблицы.Ключ, ВидСравненияКомпоновкиДанных.НеСодержит,, Ложь);
|
||
ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаОтбора, "ТекстЗапроса", "UPDATE dbo." + ИмяСлужебнойТаблицы.Ключ, ВидСравненияКомпоновкиДанных.НеСодержит,, Ложь);
|
||
ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаОтбора, "ТекстЗапроса", "INSERT " + ИмяСлужебнойТаблицы.Ключ, ВидСравненияКомпоновкиДанных.НеСодержит,, Ложь);
|
||
ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаОтбора, "ТекстЗапроса", "INSERT dbo." + ИмяСлужебнойТаблицы.Ключ, ВидСравненияКомпоновкиДанных.НеСодержит,, Ложь);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
//ФормаПодключения = ирКэш.Получить().ПолучитьФорму("ПараметрыСоединенияСУБД");
|
||
//ФормаПодключения.ЗаполнитьПараметры();
|
||
//ТекстЗапроса = ирОбщий.СтрЗаменитьОбязательноЛкс(ТекстЗапроса, "3333", ФормаПодключения.ИмяБД);
|
||
ВсеВыбранныеПоля = ирОбщий.ПолучитьВсеВыбранныеПоляГруппировкиКомпоновкиЛкс(КонечнаяНастройка.Выбор, Истина);
|
||
ВыбранноеПолеПланЗапроса = ирОбщий.НайтиЭлементКоллекцииПоЗначениюСвойстваЛкс(ВсеВыбранныеПоля, "Поле", Новый ПолеКомпоновкиДанных("query_plan"));
|
||
Если ВыбранноеПолеПланЗапроса = Неопределено Тогда
|
||
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "qp.query_plan", "NULL"); // получание планов запросов в XML занимает много времени
|
||
КонецЕсли;
|
||
ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ORDER BY " + ПорядокЗапроса;
|
||
Запросы = ирОбщий.ВыполнитьЗапросКЭтойБазеЧерезADOЛкс(ТекстЗапроса, РежимОтладки = 1, "Статистика MSSQL", 0, Ложь);
|
||
Если Запросы = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
Запросы.Колонки.Добавить("ТаблицыМетаданных");
|
||
Запросы.Колонки.Добавить("ТекстЗапросаМета");
|
||
ВыбранноеПолеТаблицыМетаданных = ирОбщий.НайтиЭлементКоллекцииПоЗначениюСвойстваЛкс(ВсеВыбранныеПоля, "Поле", Новый ПолеКомпоновкиДанных("ТаблицыМетаданных"));
|
||
ВыбранноеПолеТекстЗапросаМета = ирОбщий.НайтиЭлементКоллекцииПоЗначениюСвойстваЛкс(ВсеВыбранныеПоля, "Поле", Новый ПолеКомпоновкиДанных("ТекстЗапросаМета"));
|
||
Для Каждого СтрокаЗапроса Из Запросы Цикл
|
||
Если Ложь
|
||
Или ВыбранноеПолеТекстЗапросаМета <> Неопределено
|
||
Или ВыбранноеПолеТаблицыМетаданных <> Неопределено
|
||
Тогда
|
||
//Если ирОбщий.СтрокиРавныЛкс(СтрокаЗапроса.database_name, ФормаПодключения.ИмяБД) Тогда
|
||
НайденныеТаблицы = Новый ТаблицаЗначений;
|
||
СтрокаЗапроса.ТекстЗапросаМета = АнализТехножурнала.ПеревестиТекстБДВТерминыМетаданных(СтрокаЗапроса.query_text,,, "MSSQL", НайденныеТаблицы,,,, Истина);
|
||
Если НайденныеТаблицы.Количество() > 0 Тогда
|
||
МассивИмен = НайденныеТаблицы.ВыгрузитьКолонку("ИмяМета");
|
||
СтрокаЗапроса.ТаблицыМетаданных = ирОбщий.ПолучитьСтрокуСРазделителемИзМассиваЛкс(МассивИмен);
|
||
КонецЕсли;
|
||
//КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
#Если _ Тогда
|
||
Таблица = Новый ТаблицаЗначений;
|
||
#КонецЕсли
|
||
Запросы.Колонки.Добавить("ШаблонЗапроса", Новый ОписаниеТипов("Строка"));
|
||
Для Каждого СтрокаТаблицы Из Запросы Цикл
|
||
СтрокаТаблицы.ШаблонЗапроса = АнализТехножурнала.ПолучитьШаблонТекстаБД(СтрокаТаблицы.query_text);
|
||
КонецЦикла;
|
||
ВнешниеНаборыДанных = Новый Структура("Запросы", Запросы);
|
||
Если РежимОтладки = 2 Тогда
|
||
ирОбщий.ОтладитьЛкс(СхемаКомпоновкиДанных, , КонечнаяНастройка, ВнешниеНаборыДанных);
|
||
Возврат;
|
||
КонецЕсли;
|
||
ирОбщий.СкомпоноватьВТабличныйДокументЛкс(СхемаКомпоновкиДанных, КонечнаяНастройка, ДокументРезультат, ВнешниеНаборыДанных, ДанныеРасшифровки);
|
||
|
||
КонецПроцедуры
|
||
|
||
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
|
||
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
|
||
//ирПортативный #Если Клиент Тогда
|
||
//ирПортативный Контейнер = Новый Структура();
|
||
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
|
||
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
|
||
//ирПортативный ирПортативный.Открыть();
|
||
//ирПортативный КонецЕсли;
|
||
//ирПортативный #Иначе
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
|
||
//ирПортативный #КонецЕсли
|
||
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
|
||
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
|
||
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
|
||
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
|
||
|
||
РежимОтладки = 0; |