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

27.08.19

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

Если Вам часто приходится просматривать в отладчике сложные пакетные запросы с большим количеством временных таблиц, то эта статья для Вас.

Скачать файлы

Наименование Файл Версия Размер
Удобный просмотр результата запроса с большим количеством временных таблиц:
.cfe 5,40Kb
9
.cfe 5,40Kb 9 Скачать

Сразу оговорюсь, эта статья не про отладку больших пакетных запросов. На эту тему есть много хороших статей, например эта или эта.

Эта статья именно про удобный просмотр содержимого большого пакетного запроса в режиме отладки. Когда нужно видеть, что получилось в одной ВТ, что в другой, в третьей, потом опять вернуться в первую, ну в общем, вы понимаете, о чем я. Работать с запросами, содержащими большое количество временных таблиц, приходится очень часто. Например в механизмах расчета зарплаты в ЗУП, в подборе видов запасов или расчете себестоимости в ЕРП или УТ и во многих других.

Статья очень короткая, и, наверно, не заслуживает того, чтобы быть размещенной на INFOSTART. Но мне просто очень понравилась совсем незначительная доработка, которая позволила экономить много времени. По этому, спешу поделиться.

И так, ближе к делу.

Не для кого не секрет, что начиная с платформы 1С 8.3.8 появился очень удобный механизм для просмотра результата выполнения пакетного запроса.

Во-первых, у объекта встроенного языка «Запрос» появился новый метод «ВыполнитьПакетСПромежуточнымиДанными», который позволяет получить результат с промежуточными результатами временных таблиц:

Выполнение пакета с промежуточным результатом

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

Во-вторых, у объекта встроенного языка «МенеджерВременныхТаблиц» появилось новое свойство «Таблицы», которое содержит коллекцию временных таблиц хранящуюся в менеджере:

Таблицы менеджера ВТ

Для каждой временной таблицы можно выполнить метод «ПолучитьДанные», который содержит результат запроса этой таблицы. Затем можно выгрузить данные в таблицу значений. Полный синтаксис ниже:

МенеджерВременныхТаблиц.Таблицы[Номер].ПолучитьДанные().Выгрузить() 

В результате, можно получить данные каждой таблицы менеджера ВТ в виде таблицы значений:

Просмотр таблицы менеджера ВТ

Пользоваться объектом «МенеджерВременныхТаблиц» более удобно, так как можно посмотреть все таблицы, сформированные для менеджера. Таблицы могут формироваться отдельно, в разных процедурах. Также можно увидеть имена временных таблиц в свойстве таблицы менеджера «ПолноеИмя». Это очень помогает при большом их количестве.

Все это, без условно, очень удобно. Раньше для этих же целей приходилось использовать специальные процедуры общих модулей «ПоказатьВременнуюТаблицу» для просмотра содержимого пакетного запроса или изворачиваться, как описано здесь. Теперь всего этого делать не нужно.

Все бы хорошо, но есть один нюанс. Если временных таблиц много, а часто их бывает действительно много, очень не удобно постоянно возвращаться в отладчике к списку таблиц менеджера ВТ, чтобы посмотреть номер интересующей таблицы:

МенеджерВременныхТаблиц.Таблицы

А потом подставлять этот номер в выражение:

МенеджерВременныхТаблиц.Таблицы[Номер].ПолучитьДанные().Выгрузить() 

 Хотелось бы быстро перемещаться между таблицами менеджера и просматривать их содержимое.

Такая возможность есть. Для этого нужно разместить экспортную функцию с очень простым кодом в любом серверном общем модуле. Если конфигурация на замке, можно добавить расширение.

Код функции следующий:

//ИДС_ОбщегоНазначенияСервер.ПолучитьТаблицыМенеджера(МенеджерВременныхТаблиц)
Функция ПолучитьТаблицыМенеджера(МенеджерВременныхТаблиц) Экспорт   

   СтруктураДанных = новый Структура;   
   Для каждого Таблица Из МенеджерВременныхТаблиц.Таблицы Цикл                        
      ТЗ_ВыборкаИзТаблицы = Таблица.ПолучитьДанные().Выгрузить();      
      СтруктураДанных.Вставить(Таблица.ПолноеИмя, ТЗ_ВыборкаИзТаблицы);                      
   КонецЦикла; 
                              
   Возврат СтруктураДанных;

КонецФункции  

 

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

Теперь в режиме отладки, в форме расчета выражения можно вставить следующую строку:

ИДС_ОбщегоНазначенияСервер.ПолучитьТаблицыМенеджера(МенеджерВременныхТаблиц)

Если менеджер ВТ называется по другому, соответственно, нужно изменить имя переменной.

В результате мы получаем структуру с данными, которую можно удобно и быстро просматривать:

Просмотр всех таблиц менеджера ВТ

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

Расширение с общим модулем и приведенной в статье экспортной функцией можно скачать ниже.

Расширение можно использовать для любой конфигурации 1С, работающей в режиме совместимости 8.3.12.

 

Другие мои статьи из серии «практика программирования»:

  1. Отслеживание выполнения фонового задания 
  2. Чеки ККМ для расчетов с ИП по безналу. Новые обязательные реквизиты в чеке
  3. Доработка проведения типовых документов в УТ 11.4, КА 2.4, ЕРП 2.4
  4. Исправление отрицательных остатков по организациям в УТ 11.4, КА 2.4, ЕРП 2.4. Интеркампани, механизм формирования резервов

 

См. также

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

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

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

13000 руб.

02.09.2020    119910    656    389    

701

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5618    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    1964    2    Yashazz    0    

29

Запрос 1С copilot

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

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6090    29    mkalimulin    23    

48

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1714    vandalsvq    7    

28

Объектная модель запроса "Схема запроса" 2

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

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5282    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    15954    skovpin_sa    14    

97
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. glek 119 28.08.19 07:05 Сейчас в теме
Эм... А зачем запоминать номера таблиц. Ведь есть же прикольный метод у временных таблиц "Найти". Куда передается имя таблицы.
Darklight; +1 Ответить
3. ids79 8275 28.08.19 09:30 Сейчас в теме
(1)Да, но тогда нужно знать имя таблицы. И опять же, смотреть все отдельно. Гораздо удобнее видеть весь список ВТ перед глазами, и открывать нужные.
13. glek 119 06.09.19 07:24 Сейчас в теме
(3) Каждому своё: я, например, смотрю, МВТ.Таблицы. Смотри искомое имя и смотрю таблицу. Опять же, не умаляя Ваших трудов по написанию механизма.
2. mvk4d 28.08.19 08:41 Сейчас в теме
Можно еще в ключ структуры вставить количество записей таблицы, чтобы не щелкать по пустым таблицам.
Evg-Lylyk; ildary; Darklight; +3 Ответить
6. ildary 21 28.08.19 10:50 Сейчас в теме
(2) Очень ценное замечание, особенно для ЗУП3
4. пользователь 28.08.19 09:31
Сообщение было скрыто модератором.
...
9. пользователь 28.08.19 11:58
Сообщение было скрыто модератором.
...
10. пользователь 28.08.19 12:04
Сообщение было скрыто модератором.
...
11. пользователь 28.08.19 13:28
Сообщение было скрыто модератором.
...
5. AlX0id 28.08.19 10:39 Сейчас в теме
https://www.screencast.com/t/ZvU8KPjyWi

Удобный способ просмотра и отладки временных таблиц )
tormozit; unichkin; mikukrnet; +3 Ответить
7. VmvLer 28.08.19 11:27 Сейчас в теме
в отладчике можно сохранять таблицы в файлы не только по команде в окне отладки,
а методе-функции который "садим" в табло.

поэтому я пошел дальше - вызываю подобный метод в отладке, а он, кроме всего прочего,
сохранят Вт в файлы, затем сохраняет текст запроса с добавленными вверху пакетами
этих временных таблиц.

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

В ЗУП и УТ могут быть десятки Вт в одном пакете и тыкать в каждую в отладке муторно - проще,
как я написал, получить данные на диск и выполнить запрос с точно такими данными в консоли.
12. IvanPoh 24 29.08.19 16:16 Сейчас в теме
(7) О, а вот это интереснее намного. Но немного не понятно, распишите поподробнее, пожалуйста.
14. fomix 33 13.09.19 12:31 Сейчас в теме
(7) Ляпнул что-то и сдулся?! Что-то не припомню, чтобы ВТ, сформированные в других местах, можно было увидеть добавленными....
15. VmvLer 13.09.19 13:29 Сейчас в теме
(14) там четко расписана идея, если вы не можете ее понять, то это не повод некропостить.

Для просветления напомню, что в окне отладки, на точке останова, можно вызывать функции.
Если написать свою серверную функцию, допустим в общем модуле расширения и в параметр
этой функции передать запрос с МВТ, то можно в этом методе получить ВТ, сохранить их на диск
системным методом, относительно легко расширить текст запроса сверху и в одной папке заиметь
все для получения полного состава данных и выполнения рабочего запроса в консоли.


Если вам и сейчас непонятно, то продолжайте "ляпать" по сотне точек из стека вызовов, пытаясь узреть данные в танце временных таблиц механизма представлений.
Если вы хороший танцор, то вам ничто не будет мешать.
16. fomix 33 14.09.19 19:06 Сейчас в теме
(15) ? там четко расписана идея, если вы не можете ее понять? ГДЕ? Я лично там никакой идеи не увидел, только намек на ваш личный опыт. Если бы я один не понял ваших измышлений, а так см.пост 12! Ну да ладно.... не дано значит мне понять просветленных.
И вновь, возвращаясь уже к п.15, ?? Если написать свою серверную функцию, допустим в общем модуле расширения и в параметр этой функции передать запрос с МВТ, то можно в этом методе получить ВТ, сохранить их на диск системным методом, относительно легко расширить текст запроса сверху и в одной папке заиметь все для получения полного состава данных и выполнения рабочего запроса в консоли.???
Повторю вопрос из п.14: Если ВТ готовится в коде выше (другой модуль, другая функция, другая процедура), а вы смотрите конечный запрос, где собираются ТОЛЬКО ДАННЫЕ из выше подготовленных ВТ, КАК получить там текст этих самых ВТ???? Я не встречал другого способа, кроме как найти этот запрос с текстом этих ВТ поиском. А уж получить значения ВТ можно и без шаманского бубна и тут проблем сейчас, я думаю, ни у кого нет!
17. VmvLer 16.09.19 09:19 Сейчас в теме
(16) зачем столько эмоций - вы устали или перепутали этот сайт с страничкой "Разведенки"?

читайте по слогам предыдущие сообщения, тогда станет ясно
затем сохраняет текст запроса с добавленными вверху пакетами этих временных таблиц


КАК получить там текст этих самых ВТ?

Речь шла не о текстах, а о данных вт - чтобы в один клик можно выполнить запрос в консоли
с обзором сотен ВТ без сообщений - вт не найдена.
Это "бубен" от силы 20-30 строк кода, один лист А4 эта функция.
19. fomix 33 16.09.19 11:51 Сейчас в теме
(17) Тогда ничего нового в ваших измышлениях нет! Еще один велосипед с квадратными колесами. А вам стоит научится излагать свои мысли для всех, а не только для себя....
20. VmvLer 16.09.19 11:53 Сейчас в теме
(19) Только из уважения к вам, я излагал одну и ту же, понятную для всех мысль, трижды - лично для вас.
18. soft_wind 16.09.19 10:23 Сейчас в теме
(15) Еще есть такой способ. без общих процедур общих модулей, получается более автономно
я использую процедуру своей внешней же обработки КонсолиЗапроса, для выгрузки отлаживаемого запроса
//для отладки, выгрузки запроса в файл для кони
ВнешниеОбработки.Создать("C:\Temp\!!!ПроизвольныйЗапрос.epf", Ложь).СохранитьЗапросВФайл(лкЗапрос, "C:\Temp\Запрос.sel")
где
C:\Temp\ - локальный каталог именно сервера где идет отладка, туда помещаю свою консоль
лкЗапрос - собственно сам отлаживаемый запрос
"C:\Temp\Запрос.sel"- соответственно каталог (там же на сервере) и имя файла куда выгружается запрос
все отлично работает,
user591389_aska_rabota; ids79; +2 Ответить
8. ixijixi 1761 28.08.19 11:39 Сейчас в теме
Я думал, что уже каждый 1сник себе наваял такое расширение
gzharkoj; Yashazz; +2 Ответить
27. Yashazz 4707 25.01.22 19:45 Сейчас в теме
(8) Это если ситуация позволяет, можно ваять расширение. В УТ 10.3 по понятным причинам не прокатит)
21. Alex99666 15.01.20 20:50 Сейчас в теме
Допилил малость...
        ТекстЗ = "";
	count = 1;
	Для каждого Эл Из Запрос.МенеджерВременныхТаблиц.Таблицы Цикл
		ТекстЗ = ТекстЗ + "ВЫБРАТЬ * ПОМЕСТИТЬ вт"+count+" ИЗ " + Эл.ПолноеИмя + " ; " + Символы.ПС;
		count  = count + 1 ;
	КонецЦикла;
	
	ЗапросТМП = Новый Запрос(ТекстЗ);
	ЗапросТМП.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;
	
        // тут можно вызвать консоль.....
	// ВнешниеОбработки.Создать("МояЛюбимаяКонсоль.epf", Ложь).Отладить(ЗапросТМП, Модально);
Показать
22. biarm 12.02.20 10:07 Сейчас в теме
Удобно, добавил во все своих базы. Недостаток один: список временных таблиц в структуре сортируется по наименованию, и если таблиц много, то бывает сложно разобраться, что вначале, что потом. Для таких случаев приходится начинать наименования временных таблиц с номера.
23. ids79 8275 12.02.20 21:22 Сейчас в теме
(22)Согласен с Вами. Сам хотел доделать сортировку по порядку следования таблиц
24. FractonKireyev 22.06.20 14:15 Сейчас в теме
Фигня. Очень часто (почти всегда) играет роль порядок следования таблиц, а структура всегда выводится в алфавитном порядке ключей.
Если уж делать, то так:
Функция ПолучитьТаблицыМенеджера(МенеджерВременныхТаблиц) Экспорт   

   МассивДанных = новый Массив;   
   Для каждого Таблица Из МенеджерВременныхТаблиц.Таблицы Цикл                        
      ТЗ_ВыборкаИзТаблицы = Таблица.ПолучитьДанные().Выгрузить();      
      МассивДанных.Добавить( Новый Структура( Вставить(Таблица.ПолноеИмя, ТЗ_ВыборкаИзТаблицы) );
   КонецЦикла; 
                              
   Возврат МассивДанных;

КонецФункции
Показать

Так, по крайней мере, порядок следования информации в отладчике будет соответствовать порядку следования таблиц в запросе.
25. ids79 8275 27.06.20 11:23 Сейчас в теме
(24)Согласен, так будет лучше.
26. ids79 8275 03.12.20 11:48 Сейчас в теме
Вариант с порядком следования таблиц и количеством записей:


СтруктураДанных = новый Структура;
НомерТаблицы = 0;
Для каждого Таблица Из МенеджерВременныхТаблиц.Таблицы Цикл
		
	ТЗ_ВыборкаИзТаблицы = Таблица.ПолучитьДанные().Выгрузить();
    	 СтруктураДанных.Вставить("_"+Формат(НомерТаблицы,"ЧН=0; ЧГ=")+"_"+Таблица.ПолноеИмя+"_"+Формат(ТЗ_ВыборкаИзТаблицы.Количество(),"ЧН=0; ЧГ="), ТЗ_ВыборкаИзТаблицы); 
	НомерТаблицы = НомерТаблицы + 1;
		 
КонецЦикла;	
	
Возврат СтруктураДанных;
Показать
28. pentanom 25 28.04.23 13:31 Сейчас в теме
А как полученную таблицу значений сохранить для дальнейшего анализа?
29. pentanom 25 28.04.23 14:48 Сейчас в теме
(28)
А как полученную таблицу значений сохранить для дальнейшего анализа?
Вопрос снят.
Оставьте свое сообщение