Ничего сверхестественного — стандартная консоль запросов, с добавленной возможностью использования описания/заполнения/использования таблиц значений как параметров, включающая в себя возможность получения данных временных таблиц под отладчиком в качестве парамеров.
___________
14.05.2024
Добавлена возможность импорта файла, сохраненного при серверном выполнении.
Добавлена закладка "Промежуточные результаты". Позволяет выполнить запрос через функцию Запрос.ВыполнитьПакетСПромежуточнымиДанными() и вывести данные сложного запроса в виде массива результатов.
Упрощена функция получения параметров таблиц в связи с расширением платформенных возможностей по анализу содержимого менеджера временных таблиц.
Функция АСТ_Сохранить(ТЗ, ИмяФайла = "", Опция = Неопределено) Экспорт
// создана для удобства переноса таблиц или запросов в консоль запросов - скидывает тз во внешний файл, который можно вычитать консолью запросов
Запись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 Мелкие косметические изменения в т.ч. вывод количество строк результата выполнения запроса.
а как её запустить если в самом конфигураторе то просто код показывает если в предприятии то пустое окошечко
при отладке из конфигуратора тз выгружается как отдельный файл или добавляется в параметры?
Выгружается в отдельный файл, который можно загрузить в консоли как значение параметра
Спасибо автору за замечательную возможность работы с Таблицами Значений в качестве параметра запроса.
Единственная обработка (консоль запросов) на данном сайте, в которой ПОЛНОСТЬЮ реализована данная функция.
Есть даже сохранение ТЗ в файл запросов. Это просто замечательно!
Смотрел аналогичные консоли, там этой функции или нет, или урезанная, или атрофированная, или без сохранения таблицы в файл запросов.
Всем, кому надо работать с ТЗ и сохранять запросы в файл — рекомендую!
Глянул скрины. У меня эта обработка хранится под именем EWG_Консользапросов.
Автор позаимствовал идею?
(5) MakcTLT63, EWG это аббревиатура мой текущей фирмы. Идея и реализация собственная.
(6)
Упс.. Прошу прощения за необоснованные подозрения.
Обработка лучшая.
Когда надо поработать с ТЗ она просто незаменима.
(3) Это консоль для обычного приложения?(ТолстыйКлиент) или для управляемого приложения?(Тонкий клиент)
А то для обычного приложения я как то скачивала консоль: только загрузил запрос — консоль уже создала параметры, остается только ввести значения.
Вот бы для тонкого клиента что-нить такое.. А то другой раз запросы как простыня, чекнешься параметры искать)
(8) Bukaska, для толстого клиента.
(7) MakcTLT63, Приятно, что кому-то пригодилась 🙂
Отличная штука!
на скрине видно что колонке присваивается тип «СправочникСсылка.Номенклатура», а я такой тип выбрать не могу( почему?
Подозреваю что в используемой конфигурации нет справочника «Номенклатура» 🙂
Удобная штука, постоянно подобной пользуюсь.
А вариант с управляемой формой возможен?
(15) CaptainMorgan, Вариант для УФ на диске ИТС RequestConsoleManagedИнструментыРазработчикаКонсольЗапросов 83.epf
Не работает с параметром типа «Список значений», выдаёт ошибку «{(1,1)}: Переменная не определена (Прочее)
<<?>>Прочее», где «Прочее» — элемент справочника, заданного в параметре типа «Список значений». Да и сам подбор в список очень уж неудобно организован: тип выбирается из длинного выпадающего меню. Пока до самого низа его прокрутишь, чтобы необходимый тип выбрать, уже и желание пропадает этой консолью пользоваться.
ИР круче.
(18) unichkin, Безусловно — но не всегда космический корабль удобнее автомобиля.
Вот здесь выполняется запрос ОтладочныйЗапрос, для которого нет никаких параметров кроме параметров типа таблица значений.
Попытка
ОтладочныйЗапрос.Выполнить();
Исключение
ТекстОшибки = ОписаниеОшибки();
Продолжить;
КонецПопытки;
Почему не копируются параметры сразу? Например после строк
ОтладочныйЗапрос.Текст = ТЗ.Текст;
//по идее должны следовать строки
Для Каждого ЭлементСтруктуры Из Зн.Параметры Цикл
ОтладочныйЗапрос.Параметры.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение);
КонецЦикла;
Второе замечание касается случаев когда МенеджерВременныхТаблиц запроса ТЗ содержит временные таблицы со значениями полей Неопределено или Null. Тогда начинает ругаться что при выполнении запроса ОтладочныйЗапрос эти его поля нетипизированные. Здесь может помочь вариант их к-л массово типизировать. Я в этом случае таким полям до использования функции EWG_Сохранить присвоил пустые ссылки в запросе используя Значение(справочник. и т.д…Понимаю некорректно, но по-другому не придумал.
(20) Параметры так и копируются. Через попытку вытягиваются обращения ко временным таблицам. Альтернативой может служит только полноценный синтаксический анализатор, но даже он не сможет типизировать данные временные таблицы.
По мере получения ошибок при обращениях к данным временным таблицам появляется возможность изнать их имена, после чего можно через * выгрузить их из менеджера со всеми типизациями определенными для них в термах 1С.
(21) Не понял проблему.
Допилил консольку так: сделал кнопку «Загрузить таблицу из excel». При загрузке из excel автоматом задаются типы колонок.