Ничего сверхестественного - стандартная консоль запросов, с добавленной возможностью использования описания/заполнения/использования таблиц значений как параметров, включающая в себя возможность получения данных временных таблиц под отладчиком в качестве парамеров.
___________
14.05.2019
Добавлена возможность импорта файла, сохраненного при серверном выполнении.
Добавлена закладка "Промежуточные результаты". Позволяет выполнить запрос через функцию Запрос.ВыполнитьПакетСПромежуточнымиДанными() и вывести данные сложного запроса в виде массива результатов.
Упрощена функция получения параметров таблиц в связи с расширением платформенных возможностей по анализу содержимого менеджера временных таблиц.
Функция АСТ_Сохранить(ТЗ, ИмяФайла = "", Опция = Неопределено) Экспорт
// создана для удобства переноса таблиц или запросов в консоль запросов - скидывает тз во внешний файл, который можно вычитать консолью запросов
Запись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 Мелкие косметические изменения в т.ч. вывод количество строк результата выполнения запроса.