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

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;
	
КонецФункции

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

 

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

См. также

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

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    189407    1051    403    

983

Инструментарий разработчика Запросы Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

QueryConsole1C — расширение, включающее консоль запросов с поддержкой исполняемых представлений — аналогов виртуальных таблиц, основанных на методах программного интерфейса ЗУП. Оно позволяет выполнять запросы с учётом встроенной бизнес-логики, отлаживать алгоритмы получения данных и автоматически генерировать код на встроенном языке 1С.

1 стартмани

16.05.2025    1994    44    zup_dev    14    

47

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

2 стартмани

06.02.2025    2464    18    XilDen    26    

36

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

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

18.10.2024    13877    sergey279    18    

66

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

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

11.10.2024    8732    XilDen    36    

91

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    3514    PROSTO-1C    0    

24

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

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

16.08.2024    11286    user1840182    5    

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

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

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