Запрос динамического списка в консоли запросов (инструкция).
Всем привет. Нашел возможность легко перенести любой запрос в консоль запросов. Вместе с параметрами. Это может сильно облегчить отладку, например, динамических списков. Хочу поделиться.
Для демонстрации создал пустую базу. Добавил 3 справочника. У одного из них – номенклатуры - добавил форму списка. На ней размещен динамический список, запрос которого буду отражать в консоли. Ну и самый главный ингредиент – 5 маленьких функции: 4 подготовительных и одна основная. Листинг приведу ниже.
Краткий алгоритм:
- Зафиксировать состояние динамического списка, запрос которого хотим отразить в консоли;
- Через какое-либо событие, неважно, войти в отладку;
- В отладке вызвать функцию, возвращающую сериализованный запрос в виде XML;
- Сохранить XML в буфер и вставить в Консоли. Готово.
Теперь пример:
- В динамическом списке для наглядности установлю несколько разных отборов
- Через событие формы списка «ПередЗакрытием» (на самом деле неважно, какое событие) инициирую попадание в отладчик.
- Смотрю, как называется элемент формы, относящийся к динамическому списку, вызываю основную функцию получения сериализованного запроса.
- Сохраняю в буфер результат выполнения функции. Открываю типовую консоль из инструментов разработчика. Выбираю в меню «Еще» - «Заполнить из XML» и вставляю из буфера.
Нажимаю ОК. ГОТОВО
В результате консоль заполнена и текстом запроса динамического списка и его текущими параметрами.
Ниже листинг функций
#Область ОтладкаДинамичсекихСписков
//ЗапросДинамическогоСписка - получение итогового запроса (с текстом, параметрами и т.д.)
//по переданному элементу формы с типом "ТаблицаФормы"
Функция ЗапросДинамическогоСписка(ДинамическийСписок) Экспорт
Запрос = Новый Запрос;
СхемаКомпоновкиДанных = ДинамическийСписок.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
НастройкиКомпоновщика = ДинамическийСписок.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
МакетКомпоновкиДанных = ПолучитьМакетКомпоновки(СхемаКомпоновкиДанных, НастройкиКомпоновщика);
Для Каждого НаборДанных Из МакетКомпоновкиДанных.НаборыДанных Цикл
Запрос.Текст = НаборДанных.Запрос;
Для Каждого Параметр Из МакетКомпоновкиДанных.ЗначенияПараметров Цикл
Если ТипЗнч(Параметр.Значение) = Тип("СписокЗначений") Тогда
Запрос.УстановитьПараметр(Параметр.Имя, Параметр.Значение.ВыгрузитьЗначения());
Иначе
Запрос.УстановитьПараметр(Параметр.Имя, Параметр.Значение);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат Запрос;
КонецФункции
// ПолучитьМакетКомпоновки - получение макет компоновки на основании настроек...
Функция ПолучитьМакетКомпоновки(СхемаКомпоновкиДанных, НастройкиКомпоновщика) Экспорт
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(
СхемаКомпоновкиДанных,
НастройкиКомпоновщика,,,
Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Возврат МакетКомпоновкиДанных;
КонецФункции
// Выгружает запрос в строку XML, которую можно вставить в Консоль запросов.
// Для переноса запроса и всех его параметров в Консоль запросов, необходимо вызвать функцию в окне.
// "Вычислить выражение" (Shift + F9), скопировать полученный XML в поле "Текст запроса"
// консоли запросов и выполнить команду "Заполнить из XML" из меню "Еще".
// Подробнее об использование функции смотрите в справке к консоли запросов.
//
// Параметры:
// Запрос - Запрос - запрос, который необходимо выгрузить в формат строки XML.
//
// Возвращаемое значение:
// Строка - строка в формате XML, которую можно извлечь при помощи метода "ОбщегоНазначения.ЗначениеИзСтрокиXML".
// После извлечения получится объект типа "Структура" с полями:
// * Текст - Строка - текст запроса.
// * Параметры - Структура - параметры запроса.
//
Функция ЗапросВСтрокуXML(Запрос) Экспорт // АПК:299 - используется при отладке запросов, см. описание функции.
Структура = Новый Структура("Текст, Параметры");
ЗаполнитьЗначенияСвойств(Структура, Запрос);
Возврат ЗначениеВСтрокуXML(Структура);
КонецФункции
// Преобразует (сериализует) любое значение в XML-строку.
// Преобразованы в могут быть только те объекты, для которых в синтакс-помощнике указано, что они сериализуются.
// См. также ЗначениеИзСтрокиXML.
//
// Параметры:
// Значение - Произвольный - значение, которое необходимо сериализовать в XML-строку.
//
// Возвращаемое значение:
// Строка - XML-строка.
//
Функция ЗначениеВСтрокуXML(Значение) Экспорт
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное);
Возврат ЗаписьXML.Закрыть();
КонецФункции
// ПолучитьXMLЗапросаДС - получить текст сериализованного запроса динамического списка
Функция ПолучитьXMLЗапросаДС(ЭлементДинамическийСписок) Экспорт
ЗапросДинамическогоСписка = ЗапросДинамическогоСписка(ЭлементДинамическийСписок);
ТекстXML = ЗапросВСтрокуXML(ЗапросДинамическогоСписка);
Возврат ТекстXML;
КонецФункции
#КонецОбласти