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





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

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

___________

14.05.2024

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

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

 

result_array

 

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

 

 

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

Зн = Новый Структура("Текст, Параметры", ТЗ.Текст, ТЗ.Параметры);
МассивТаблиц = Новый Массив;

Если ТипЗнч(Опция) = Тип("Строка") Тогда
////////// если опция - строка - значит считаем что передается точный перечень таблиц
// прямой перечень таблиц уже не нужен - но оставим если вдруг нежелательно все содержимое менеджера тащить
Вр = СокрЛП(Опция);
Пока СтрНайти(Вр, ",") > 0 Цикл
Имя = СокрЛП(Лев(Вр,СтрНайти(Вр, ",") - 1));
Если СтрДлина(Имя) > 0 Тогда
МассивТаблиц.Добавить(Имя);
КонецЕсли;
Вр = СокрЛП(Сред(Вр, СтрНайти(Вр, ",") + 1));
КонецЦикла;
Если СтрДлина(Вр) > 0 Тогда
МассивТаблиц.Добавить(Вр);
КонецЕсли;
ИначеЕсли ТЗ.МенеджерВременныхТаблиц <> Неопределено Тогда //Если Опция = Истина Тогда
Для каждого Вр из ТЗ.МенеджерВременныхТаблиц.Таблицы Цикл
МассивТаблиц.Добавить(Вр.ПолноеИмя);
КонецЦикла;
// любое другое значение позволяет просто вытащить запрос без временных таблиц
КонецЕсли;

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

Зн.Текст = Т + Зн.Текст;

КонецЕсли;
КонецЦикла;


ИначеЕсли ТипЗнч(ТЗ) = Тип("МакетКомпоновкиДанных") Тогда
Запрос = Новый Запрос;
Для каждого Параметр из ТЗ.ЗначенияПараметров Цикл
ЗначПарам = Неопределено;
Если ТипЗнч(Параметр.Значение) = Тип("СписокЗначений") Тогда
ЗначПарам = Новый СписокЗначений;
ЗначПарам.ЗагрузитьЗначения(Параметр.Значение.ВыгрузитьЗначения());
Иначе
ЗначПарам = Параметр.Значение;
КонецЕсли;
Запрос.УстановитьПараметр(Параметр.Имя,ЗначПарам);
КонецЦикла;

// определимся с набором
Если ТипЗнч(Опция) <> Тип("НаборДанныхЗапросМакетаКомпоновкиДанных") Тогда
// набор явно не указан - пробуем подобрать первый попавшийся набор запрос
Для каждого Нб из ТЗ.НаборыДанных Цикл
Если ТипЗнч(Нб) = Тип("НаборДанныхЗапросМакетаКомпоновкиДанных") Тогда
Опция = Нб;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;

Если ТипЗнч(Опция) = Тип("НаборДанныхЗапросМакетаКомпоновкиДанных") Тогда
Запрос.Текст = Опция.Запрос;
Для каждого Параметр из Опция.ЗначенияПараметров Цикл
ЗначПарам = Неопределено;
Если ТипЗнч(Параметр.Значение) = Тип("СписокЗначений") Тогда
ЗначПарам = Новый СписокЗначений;
ЗначПарам.ЗагрузитьЗначения(Параметр.Значение.ВыгрузитьЗначения());
Иначе
ЗначПарам = Параметр.Значение;
КонецЕсли;
Запрос.УстановитьПараметр(Параметр.Имя,ЗначПарам);
КонецЦикла;
КонецЕсли;
Зн = Новый Структура("Текст, Параметры", Запрос.Текст, Запрос.Параметры);
Иначе
Зн = ТЗ;
КонецЕсли;
ЗаписьXML.ОткрытьФайл(ИмяФайла, "UTF-8");

#Если Не ТонкийКлиент И НЕ ВебКлиент Тогда
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Новый ХранилищеЗначения(Зн ,Новый СжатиеДанных(9)));
#КонецЕсли

ЗаписьXML.Закрыть();
Возврат Истина;
КонецФункции

 

03.09.2024

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

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

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

 

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

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 Мелкие косметические изменения в т.ч. вывод количество строк результата выполнения запроса.

 

24 Comments

  1. fierylions

    а как её запустить если в самом конфигураторе то просто код показывает если в предприятии то пустое окошечко

    Reply
  2. vec435

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

    Reply
  3. Kashemir

    Выгружается в отдельный файл, который можно загрузить в консоли как значение параметра

    Reply
  4. pvlunegov

    Спасибо автору за замечательную возможность работы с Таблицами Значений в качестве параметра запроса.

    Единственная обработка (консоль запросов) на данном сайте, в которой ПОЛНОСТЬЮ реализована данная функция.

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

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

    Всем, кому надо работать с ТЗ и сохранять запросы в файл — рекомендую!

    Reply
  5. MakcTLT63

    Глянул скрины. У меня эта обработка хранится под именем EWG_Консользапросов.

    Автор позаимствовал идею?

    Reply
  6. Kashemir

    (5) MakcTLT63, EWG это аббревиатура мой текущей фирмы. Идея и реализация собственная.

    Reply
  7. MakcTLT63

    (6)

    Упс.. Прошу прощения за необоснованные подозрения.

    Обработка лучшая.

    Когда надо поработать с ТЗ она просто незаменима.

    Reply
  8. Bukaska

    (3) Это консоль для обычного приложения?(ТолстыйКлиент) или для управляемого приложения?(Тонкий клиент)

    А то для обычного приложения я как то скачивала консоль: только загрузил запрос — консоль уже создала параметры, остается только ввести значения.

    Вот бы для тонкого клиента что-нить такое.. А то другой раз запросы как простыня, чекнешься параметры искать)

    Reply
  9. Kashemir

    (8) Bukaska, для толстого клиента.

    Reply
  10. Kashemir

    (7) MakcTLT63, Приятно, что кому-то пригодилась 🙂

    Reply
  11. desarz

    Отличная штука!

    Reply
  12. sick_russian

    на скрине видно что колонке присваивается тип «СправочникСсылка.Номенклатура», а я такой тип выбрать не могу( почему?

    Reply
  13. Kashemir

    Подозреваю что в используемой конфигурации нет справочника «Номенклатура» 🙂

    Reply
  14. Nebiros777

    Удобная штука, постоянно подобной пользуюсь.

    Reply
  15. CaptainMorgan

    А вариант с управляемой формой возможен?

    Reply
  16. oyeah

    (15) CaptainMorgan, Вариант для УФ на диске ИТС RequestConsoleManagedИнструментыРазработчикаКонсольЗапросов­83.epf

    Reply
  17. premierex

    Не работает с параметром типа «Список значений», выдаёт ошибку «{(1,1)}: Переменная не определена (Прочее)

    <<?>>Прочее», где «Прочее» — элемент справочника, заданного в параметре типа «Список значений». Да и сам подбор в список очень уж неудобно организован: тип выбирается из длинного выпадающего меню. Пока до самого низа его прокрутишь, чтобы необходимый тип выбрать, уже и желание пропадает этой консолью пользоваться.

    Reply
  18. unichkin

    ИР круче.

    Reply
  19. Kashemir

    (18) unichkin, Безусловно — но не всегда космический корабль удобнее автомобиля.

    Reply
  20. user645364_roman_sh

    Вот здесь выполняется запрос ОтладочныйЗапрос, для которого нет никаких параметров кроме параметров типа таблица значений.

    Попытка

    ОтладочныйЗапрос.Выполнить();

    Исключение

    ТекстОшибки = ОписаниеОшибки();

    Продолжить;

    КонецПопытки;

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

    ОтладочныйЗапрос.Текст = ТЗ.Текст;

    //по идее должны следовать строки

    Для Каждого ЭлементСтруктуры Из Зн.Параметры Цикл

    ОтладочныйЗапрос.Параметры.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение);

    КонецЦикла;

    Reply
  21. user645364_roman_sh

    Второе замечание касается случаев когда МенеджерВременныхТаблиц запроса ТЗ содержит временные таблицы со значениями полей Неопределено или Null. Тогда начинает ругаться что при выполнении запроса ОтладочныйЗапрос эти его поля нетипизированные. Здесь может помочь вариант их к-л массово типизировать. Я в этом случае таким полям до использования функции EWG_Сохранить присвоил пустые ссылки в запросе используя Значение(справочник. и т.д…Понимаю некорректно, но по-другому не придумал.

    Reply
  22. Kashemir

    (20) Параметры так и копируются. Через попытку вытягиваются обращения ко временным таблицам. Альтернативой может служит только полноценный синтаксический анализатор, но даже он не сможет типизировать данные временные таблицы.

    По мере получения ошибок при обращениях к данным временным таблицам появляется возможность изнать их имена, после чего можно через * выгрузить их из менеджера со всеми типизациями определенными для них в термах 1С.

    Reply
  23. Kashemir

    (21) Не понял проблему.

    Reply
  24. RailMen

    Допилил консольку так: сделал кнопку «Загрузить таблицу из excel». При загрузке из excel автоматом задаются типы колонок.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *