Запрос динамического списка в консоли запросов

03.12.24

Разработка - Запросы

В статье приведена удобная возможность отладки исполняемого запроса динамического списка.

Запрос динамического списка в консоли запросов (инструкция).

Всем привет. Нашел возможность легко перенести любой запрос в консоль запросов. Вместе с параметрами. Это может сильно облегчить отладку, например, динамических списков. Хочу поделиться.

Для демонстрации создал пустую базу. Добавил 3 справочника. У одного из них – номенклатуры - добавил форму списка. На ней размещен динамический список, запрос которого буду отражать в консоли. Ну и самый главный ингредиент – 5 маленьких функции: 4 подготовительных и одна основная. Листинг приведу ниже.

 

 

Краткий алгоритм:

  1. Зафиксировать состояние динамического списка, запрос которого хотим отразить в консоли;
  2. Через какое-либо событие, неважно, войти в отладку;
  3. В отладке вызвать функцию, возвращающую сериализованный запрос в виде XML;
  4. Сохранить XML в буфер и вставить в Консоли. Готово.

Теперь пример:

  1. В динамическом списке для наглядности установлю несколько разных отборов

 

 

  1. Через событие формы списка «ПередЗакрытием» (на самом деле неважно, какое событие) инициирую попадание в отладчик.

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

 

 

 

  1. Сохраняю в буфер результат выполнения функции. Открываю типовую консоль из инструментов разработчика. Выбираю в меню «Еще» - «Заполнить из 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;
	
КонецФункции

#КонецОбласти

 

отладка консоль запросов динамический список

См. также

SALE! %

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 10000 руб.

02.09.2020    165638    920    402    

893

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    10921    sergey279    18    

65

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    5995    XilDen    36    

81

Запросы Программист Запросы Бесплатно (free)

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

16.08.2024    8664    user1840182    5    

28

Математика и алгоритмы Запросы Программист Платформа 1С v8.3 Запросы Бесплатно (free)

Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.

08.07.2024    2623    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    9778    implecs_team    6    

48

Запросы Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3540    andrey_sag    10    

36
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mszsuz 336 03.12.24 19:01 Сейчас в теме
Вы из будущего или из альтернативной Вселенной?
В нашей БСП такого нет.
Поручик; +1 Ответить
2. artemusII 76 04.12.24 07:52 Сейчас в теме
Да, опечаталася... имел ввиду в БСП есть основные функции для построения механизма:
ОбщегоНазначения.ЗапросВСтрокуXML(Запрос);
ОбщегоНазначения.ЗначениеВСтрокуXML(Значение);

Спасибо за уточнение, поправил текст.
P.S. Хотя был уверен, что в БСП есть и ПолучитьМакетКомпоновки(...)
Поручик; +1 Ответить
3. kuzyara 2100 04.12.24 08:48 Сейчас в теме
ИР попробуйте, там это доступно из коробки
ирОбщий.от(Список)
zip316; rpgshnik; Dach; ZOMI; fancy; tormozit; SerVer1C; SirAlex; +8 Ответить
4. tormozit 7238 05.12.24 09:19 Сейчас в теме
(3) Еще через глобальное меню ИР можно открыть настройку любого динамического списка и оттуда при наличии в форме обработчиков подключаемых команд БСП будет доступна интерактивная отладка компоновки списки
Прикрепленные файлы:
rpgshnik; Dach; ZOMI; +3 Ответить
6. rpgshnik 3809 05.12.24 14:34 Сейчас в теме
(4) Сергей, у меня чисто спортивный интерес, у тебя скрипт какой-то парсит комментарии, часто вижу что ты на ИР сразу отвечаешь, круто, спасибо за ИР!
5. ZOMI 141 05.12.24 12:05 Сейчас в теме
Ух, так автор скоро и заполнялку временных таблиц из файла переизобретет. Зря вы ему про ИР рассказали.
7. rpgshnik 3809 05.12.24 14:35 Сейчас в теме
8. webester 26 06.12.24 06:10 Сейчас в теме
(4)ИР хорош, юзаю его везде где используются обычные формы. В тонкий клиент он еще не научился? Нужно до сих пор запускать УФ в толстом клиенте?
9. tormozit 7238 06.12.24 07:09 Сейчас в теме
10. twiny 15 09.12.24 10:21 Сейчас в теме
если ИР не нравится, то посмотрите УИ, ну или в конце концов IStoolkit.
Там достаточно хорошо отладка и запросов и СКД сделана. Даже можно конечный текст запроса СКД посмотреть. Тот же ДС также можно в отладчик впихнуть и доработать.
Поставить можно как расширение.

Примерно так, но, няп, на сервере нужно сделать
УИ_._От(Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных(), Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных())
Оставьте свое сообщение