Консоль запросов + ТЗ как параметры

Публикация № 78001

Программирование - Инструментарий

43
Стандартная консоль запросов, с добавленной возможностью использования описания/заполнения/использования таблиц значений как параметров. Совместима с настройками базовой консоли. Упрощает отладку запросов, использующих временные таблицы.

Ничего сверхестественного - стандартная консоль запросов, с добавленной возможностью использования описания/заполнения/использования таблиц значений как параметров, включающая в себя возможность получения данных временных таблиц под отладчиком в качестве парамеров.

___________

14.05.2019

Добавлена возможность импорта файла, сохраненного при серверном выполнении.

Добавлена закладка "Промежуточные результаты". Позволяет выполнить запрос через функцию  Запрос.ВыполнитьПакетСПромежуточнымиДанными() и вывести данные сложного запроса в виде массива результатов.

 

result_array

 

Упрощена функция получения параметров таблиц в связи с расширением платформенных возможностей по анализу содержимого менеджера временных таблиц.

 

 

Функция АСТ_Сохранить(ТЗ, ИмяФайла = "", Опция = Неопределено) Экспорт
    // создана для удобства переноса таблиц или запросов в консоль запросов - скидывает тз во внешний файл, который можно вычитать консолью запросов
    ЗаписьXML = Новый ЗаписьXML;
    Если ПустаяСтрока(ИмяФайла) Тогда
        ИмяФайла = КаталогВременныхФайлов() + ?(ТипЗнч(ТЗ) = Тип("ТаблицаЗначений"), "copytz.xml", "copyreq.xml") ;
    КонецЕсли;
    Если ТипЗнч(ТЗ) = Тип("Запрос") Тогда
        
        Зн = Новый Структура("Текст, Параметры", ТЗ.Текст, ТЗ.Параметры);
        МассивТаблиц = Новый Массив;

        Если ТипЗнч(Опция) = Тип("Строка") Тогда
            ////////// если опция - строка - значит считаем что передается точный перечень таблиц   
            // прямой перечень таблиц уже не нужен - но оставим если вдруг нежелательно все содержимое менеджера тащить 
            Вр = СокрЛП(Опция);
            Пока СтрНайти(Вр, ",") > 0 Цикл
                Имя = СокрЛП(Лев(Вр,СтрНайти(Вр, ",") - 1));
                Если СтрДлина(Имя) > 0 Тогда
                    МассивТаблиц.Добавить(Имя);
                КонецЕсли;
                Вр = СокрЛП(Сред(Вр, СтрНайти(Вр, ",") + 1));
            КонецЦикла;
            Если СтрДлина(Вр) > 0 Тогда
                МассивТаблиц.Добавить(Вр);
            КонецЕсли;
        ИначеЕсли ТЗ.МенеджерВременныхТаблиц <> Неопределено Тогда //Если Опция = Истина Тогда
            Для каждого Вр из ТЗ.МенеджерВременныхТаблиц.Таблицы Цикл
                МассивТаблиц.Добавить(Вр.ПолноеИмя);
            КонецЦикла;
            // любое другое значение позволяет просто вытащить запрос без временных таблиц 
        КонецЕсли;
        
        // пробуем вытащить значения в параметры
        Для каждого Тб из  МассивТаблиц Цикл
            ТЗВрем = ТЗ.МенеджерВременныхТаблиц.Таблицы.Найти(Тб);
            Если ТЗВрем <> Неопределено Тогда
                Зн.Параметры.Вставить(Тб, ТЗВрем.ПолучитьДанные().Выгрузить());
                Т = "// '" + Тб  + "' таблица вытащена из менеджера временных таблиц и помещена как параметр"  + Символы.ПС;;
                Т = Т + "ВЫБРАТЬ " ;
                Для каждого Кол из Зн.Параметры[Тб].Колонки Цикл
                    Т = Т + Символы.ПС + Символы.Таб + Тб + "." + Кол.Имя + " КАК " + Кол.Имя + "," ;
                КОнецЦикла;
                Т  = Лев(Т, СтрДлина(Т) - 1);
                Т = Т + Символы.ПС + "ПОМЕСТИТЬ " + Тб ;
                Т = Т + Символы.ПС + "ИЗ" + Символы.ПС + Символы.Таб + "&" + Тб + " КАК " + Тб + Символы.ПС + ";" + Символы.ПС + "//////////////////////////////////////////////////////////" + Символы.ПС+ Символы.ПС;
                
                Зн.Текст = Т + Зн.Текст; 
                
            КонецЕсли;
        КонецЦикла;
        
        
    ИначеЕсли ТипЗнч(ТЗ) = Тип("МакетКомпоновкиДанных") Тогда
        Запрос = Новый Запрос;
        Для каждого Параметр из ТЗ.ЗначенияПараметров Цикл
            ЗначПарам = Неопределено;
            Если ТипЗнч(Параметр.Значение) = Тип("СписокЗначений") Тогда
                ЗначПарам = Новый СписокЗначений;
                ЗначПарам.ЗагрузитьЗначения(Параметр.Значение.ВыгрузитьЗначения());
            Иначе
                ЗначПарам = Параметр.Значение;
            КонецЕсли;
            Запрос.УстановитьПараметр(Параметр.Имя,ЗначПарам);
        КонецЦикла;
        
        // определимся с набором
        Если ТипЗнч(Опция) <> Тип("НаборДанныхЗапросМакетаКомпоновкиДанных") Тогда
            // набор явно не указан - пробуем подобрать первый попавшийся набор запрос
            Для каждого Нб из ТЗ.НаборыДанных Цикл
                Если ТипЗнч(Нб) = Тип("НаборДанныхЗапросМакетаКомпоновкиДанных") Тогда
                    Опция = Нб;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
        
        Если ТипЗнч(Опция) = Тип("НаборДанныхЗапросМакетаКомпоновкиДанных") Тогда
            Запрос.Текст = Опция.Запрос;
            Для каждого Параметр из Опция.ЗначенияПараметров Цикл
                ЗначПарам = Неопределено;
                Если ТипЗнч(Параметр.Значение) = Тип("СписокЗначений") Тогда
                    ЗначПарам = Новый СписокЗначений;
                    ЗначПарам.ЗагрузитьЗначения(Параметр.Значение.ВыгрузитьЗначения());
                Иначе
                    ЗначПарам = Параметр.Значение;
                КонецЕсли;
                Запрос.УстановитьПараметр(Параметр.Имя,ЗначПарам);
            КонецЦикла;
        КонецЕсли;
        Зн = Новый Структура("Текст, Параметры", Запрос.Текст, Запрос.Параметры);
    Иначе
        Зн = ТЗ;    
    КонецЕсли;
    ЗаписьXML.ОткрытьФайл(ИмяФайла, "UTF-8");
    
    #Если Не ТонкийКлиент И НЕ ВебКлиент Тогда
        СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Новый ХранилищеЗначения(Зн ,Новый СжатиеДанных(9)));
    #КонецЕсли
    
    ЗаписьXML.Закрыть();
    Возврат Истина;
КонецФункции

 


03.09.2015

В функции получения запроса в режиме отладки добавлена возможность автоматического определения используемых временных таблиц (переданных через менеджер запросов) и помещения их значений в соответствующий параметр.

Для определения состава временных таблиц осуществляются попытки выполнить запрос, с последующим анализом ошибки (в случае системных сообщений платформы на отличном от русского языка - требуется внести соответствующую правку в текст функции).

Также стоит учитывать, что в процессе автоматического анализа будет запрос будет единожды выполнен. Если само по себе выполнение запроса вызывает проблемы (зависает / либо слишком долго), используйте явное указание списка необходимых временных таблиц.

 

Получение запроса со временными таблицыми под отладчиком

15.11.2013

Данная редакция функции сохранения под отладчиком расширяет возможность отладки сложных запросов, использующих таблицы из менеджеры временных таблиц - в качестве третьего параметра позволяет указывать имена временных таблиц (через запятую), используемых в запросе. Содержимое временных таблиц которых при этом  будет вычитано из менеджера и использовано как параметр-таблица значений.

В качестве экзотического дополнения,  можно указывать МакетКомпоновкиДанных как источник запроса. В этом случае будет запрос будет извлечен из первого набора данных макета, либо можно указать конкретный набор в качестве третьего параметра.

15.11.10/2 Можно использовать результаты выполнения запроса как основание для создания структуры ТЗ и заполнения данными.


23.11.11/1 Добавлена возможность выгружать таблицы в файл / из файла.

10.04.11/1 Добавлена возможность выгружать запросы с параметрами (в т.ч. таблицы значений) в файл / из файла


Для выгрузки таблиц/запросов из конфигуратора в режиме отладки добавьте и используйте функцию

Функция EWG_Сохранить(ТЗ, ИмяФайла = "") Экспорт
    ЗаписьXML = Новый ЗаписьXML;
    Если ПустаяСтрока(ИмяФайла) Тогда
        ИмяФайла = КаталогВременныхФайлов() + ?(ТипЗнч(ТЗ) = Тип("Запрос"), "copyreq.xml", "copytz.xml") ;
    КонецЕсли;
    Зн = ?(ТипЗнч(ТЗ) = Тип("Запрос"), Новый Структура("Текст, Параметры", ТЗ.Текст, ТЗ.Параметры), ТЗ);
    ЗаписьXML.ОткрытьФайл(ИмяФайла, "UTF-8");
    СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Новый ХранилищеЗначения(Зн ,Новый СжатиеДанных(9)));
    ЗаписьXML.Закрыть();
    Возврат Истина;
КонецФункции


 

Примеры обращения под отладчиком  :

EWG_Сохранить(НекийЗапрос.Выполнить().Выгрузить()); // будет выгружена таблица результатов запроса

EWG_Сохранить(НекийЗапрос); // будет выгружен текст запроса с параметрами и всеми используемыми временными таблицами

EWG_Сохранить(НекийЗапрос,, "ВТКонтрагенты, ВТДокументы"); // будет выгружен текст запроса с параметрами плюс времененные таблицы, соответствующие указанным.

 

 

Таблицы в консоль подгружаются через выбор пункта меню консоли "Импорт из файла по-умолчанию" на закладке ТЗ-параметры.

Запросы подгружаются через выбор пункта меню консоли "Импорт из файла по-умолчанию" на основной панели формы, либо через контекстное меню дерева запросов.

 

28.08.12 Мелкие косметические изменения в т.ч. вывод количество строк результата выполнения запроса.

 

43

Скачать файлы

Наименование Файл Версия Размер
Консоль для 8.3
.epf 106,32Kb
14.05.19
420
.epf 070213 106,32Kb 420 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. fierylions 05.02.11 09:30 Сейчас в теме
а как её запустить если в самом конфигураторе то просто код показывает если в предприятии то пустое окошечко
2. vec435 15 11.04.12 10:15 Сейчас в теме
при отладке из конфигуратора тз выгружается как отдельный файл или добавляется в параметры?
3. Kashemir 351 11.04.12 11:54 Сейчас в теме
Выгружается в отдельный файл, который можно загрузить в консоли как значение параметра
8. Bukaska 128 15.11.13 14:24 Сейчас в теме
(3) Это консоль для обычного приложения?(ТолстыйКлиент) или для управляемого приложения?(Тонкий клиент)
А то для обычного приложения я как то скачивала консоль: только загрузил запрос - консоль уже создала параметры, остается только ввести значения.
Вот бы для тонкого клиента что-нить такое.. А то другой раз запросы как простыня, чекнешься параметры искать)
9. Kashemir 351 15.11.13 14:34 Сейчас в теме
(8) Bukaska, для толстого клиента.
4. pvlunegov 138 20.04.12 11:28 Сейчас в теме
Спасибо автору за замечательную возможность работы с Таблицами Значений в качестве параметра запроса.
Единственная обработка (консоль запросов) на данном сайте, в которой ПОЛНОСТЬЮ реализована данная функция.

Есть даже сохранение ТЗ в файл запросов. Это просто замечательно!

Смотрел аналогичные консоли, там этой функции или нет, или урезанная, или атрофированная, или без сохранения таблицы в файл запросов.

Всем, кому надо работать с ТЗ и сохранять запросы в файл - рекомендую!
5. MakcTLT63 9 15.11.13 08:51 Сейчас в теме
Глянул скрины. У меня эта обработка хранится под именем EWG_Консользапросов.
Автор позаимствовал идею?
6. Kashemir 351 15.11.13 12:21 Сейчас в теме
(5) MakcTLT63, EWG это аббревиатура мой текущей фирмы. Идея и реализация собственная.
7. MakcTLT63 9 15.11.13 14:20 Сейчас в теме
(6)
Упс.. Прошу прощения за необоснованные подозрения.
Обработка лучшая.
Когда надо поработать с ТЗ она просто незаменима.
10. Kashemir 351 15.11.13 14:41 Сейчас в теме
(7) MakcTLT63, Приятно, что кому-то пригодилась :)
11. desarz 61 05.12.13 15:33 Сейчас в теме
12. sick_russian 05.02.14 06:25 Сейчас в теме
на скрине видно что колонке присваивается тип "СправочникСсылка.Номенклатура", а я такой тип выбрать не могу( почему?
13. Kashemir 351 10.02.14 19:37 Сейчас в теме
Подозреваю что в используемой конфигурации нет справочника "Номенклатура" :)
14. Nebiros777 5 25.02.14 13:31 Сейчас в теме
Удобная штука, постоянно подобной пользуюсь.
15. CaptainMorgan 14.03.14 12:58 Сейчас в теме
А вариант с управляемой формой возможен?
16. oyeah 14.01.15 02:35 Сейчас в теме
(15) CaptainMorgan, Вариант для УФ на диске ИТС RequestConsoleManaged\ИнструментыРазработчикаКонсольЗапросов­83.epf
17. premier 172 08.04.15 14:25 Сейчас в теме
Не работает с параметром типа "Список значений", выдаёт ошибку "{(1,1)}: Переменная не определена (Прочее)
<<?>>Прочее", где "Прочее" - элемент справочника, заданного в параметре типа "Список значений". Да и сам подбор в список очень уж неудобно организован: тип выбирается из длинного выпадающего меню. Пока до самого низа его прокрутишь, чтобы необходимый тип выбрать, уже и желание пропадает этой консолью пользоваться.
18. unichkin 1156 03.09.15 21:33 Сейчас в теме
19. Kashemir 351 04.09.15 10:53 Сейчас в теме
(18) unichkin, Безусловно - но не всегда космический корабль удобнее автомобиля.
20. user645364_roman_sh 10.06.18 18:05 Сейчас в теме
Вот здесь выполняется запрос ОтладочныйЗапрос, для которого нет никаких параметров кроме параметров типа таблица значений.
Попытка
ОтладочныйЗапрос.Выполнить();
Исключение
ТекстОшибки = ОписаниеОшибки();
Продолжить;
КонецПопытки;

Почему не копируются параметры сразу? Например после строк

ОтладочныйЗапрос.Текст = ТЗ.Текст;
//по идее должны следовать строки
Для Каждого ЭлементСтруктуры Из Зн.Параметры Цикл
ОтладочныйЗапрос.Параметры.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение);
КонецЦикла;
22. Kashemir 351 21.06.18 03:55 Сейчас в теме
(20) Параметры так и копируются. Через попытку вытягиваются обращения ко временным таблицам. Альтернативой может служит только полноценный синтаксический анализатор, но даже он не сможет типизировать данные временные таблицы.
По мере получения ошибок при обращениях к данным временным таблицам появляется возможность изнать их имена, после чего можно через * выгрузить их из менеджера со всеми типизациями определенными для них в термах 1С.
21. user645364_roman_sh 10.06.18 18:28 Сейчас в теме
Второе замечание касается случаев когда МенеджерВременныхТаблиц запроса ТЗ содержит временные таблицы со значениями полей Неопределено или Null. Тогда начинает ругаться что при выполнении запроса ОтладочныйЗапрос эти его поля нетипизированные. Здесь может помочь вариант их к-л массово типизировать. Я в этом случае таким полям до использования функции EWG_Сохранить присвоил пустые ссылки в запросе используя Значение(справочник. и т.д...Понимаю некорректно, но по-другому не придумал.
23. Kashemir 351 21.06.18 04:00 Сейчас в теме
24. RailMen 779 11.09.18 19:06 Сейчас в теме
Допилил консольку так: сделал кнопку "Загрузить таблицу из excel". При загрузке из excel автоматом задаются типы колонок.

Прикрепленные файлы:
EWG_Консользапросов (Консоль запросов + ТЗ как параметры 8.2) 2.epf
Оставьте свое сообщение