Просмотр временных таблиц в отладке



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

В конфигурацию надо добавить модуль. Я его назвал «Р_ОбщийМодуль»

В модуле надо описать следующую функцию

Функция ПроверитьВремТаб(МенеджерВремТаб,ИмяВремтаб ="",Порядок = "") Экспорт

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВремТаб;
Запрос.Текст =
"ВЫБРАТЬ
| *
|ИЗ
| ВремТаб КАК ВремТаб
|
|УПОРЯДОЧИТЬ ПО Порядок";

Запрос.Текст = СтрЗаменить(Запрос.Текст,"ВремТаб",ИмяВремтаб);
Если Порядок = "" тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"УПОРЯДОЧИТЬ ПО Порядок","");
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст,"Порядок",Порядок);
КонецЕсли;

ТЗ = Запрос.Выполнить().Выгрузить();

Возврат ТЗ;

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

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

Пример:

Р_ОбщийМодуль.ПроверитьВремТаб(Запрос.МенеджерВременныхТаблиц,»ТЗМагазинВидЦены»)

Если временную таьлицу надо отсортировать по какой либо колонке, то третьим параметром надо указать имя колонки упорядочивания.

Например

 Р_ОбщийМодуль.ПроверитьВремТаб(Запрос.МенеджерВременныхТаблиц,»ТЗМагазинВидЦены»,»Магазин») 

Также можно воспользоваться готовой обработкой и вызывать функцию из нее (обработка прилагается) 

24 Comments

  1. wunderland

    В ЗиУП для Украины…

    ОбщегоНазначения.ПоказатьВременнуюТаблицу(ИсходныйЗапрос, ИмяВременнойТаблицы = «», Показать = Ложь)

    все придумано до нас…

    Reply
  2. aet

    (1) спасибо, нашел аналог в УПП.

    Не с самыми удобными параметрами и именем модуля конечно…

    Модуль РасширеннаяАналитикаУчета

    // Процедура формирует запрос по временной таблице.

    //

    // Параметры:

    // СтруктураШапкиДокумента – Структура — Реквизиты документа «Расчет себестоимости выпуска»

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

    // ИмяВременнойТаблицы — Строка — Имя временной таблицы

    //

    Процедура ПоказатьВременнуюТаблицу(

    СтруктураШапкиДокумента,

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

    ИмяВременнойТаблицы

    ) Экспорт

    Reply
  3. Поручик

    (0) Всё уже украдено до нас. (С)

    УТ 11.

    // Функция показывает все поля указанной временной таблицы из менеджера временных таблиц.
    // Используется для просмотра временных таблиц в отладчике.
    // Пример вызова функции:
    // ЗапасыСервер.ПоказатьВременнуюТаблицу(МенеджерВременныхТаблиц, «ТаблицаТоваров»)
    //
    Функция ПоказатьВременнуюТаблицу(МенеджерВременныхТаблиц, ИмяВременнойТаблицы) Экспорт
    Reply
  4. kibertechnology

    Зато есть дополнительная сортировка чего в типовом варианте нет. 😉

    Reply
  5. petrov_al

    (4) kibertechnology, у меня есть переделанная инфостаровская обработка с сортировкой и встроенным отбором

    Reply
  6. WKBAPKA

    а я не знал… в типовых же функции не документированы … спасибо за идею, пусть уже и за совсем не свежую

    Reply
  7. WKBAPKA

    В УТП для Украины я такой не нашел

    Reply
  8. SeiOkami

    В любом случае, я о таком не знал. У знал из статьи. Так что плюс =)

    Reply
  9. dryms

    Это старо, как минимум года 2

    Reply
  10. aet

    (9) dryms, однако актуально, так как (2) использовать при отладке невозможно.

    Reply
  11. Synoecium

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

    Функция ЛукВТ(Запрос, ИмяВнутреннейТаблицы) Экспорт

    Перем ЗапросТМП, Р;

    //Получаем таблицу из менеджера временных таблиц запроса

    ЗапросТМП=Новый Запрос(«ВЫБРАТЬ * ИЗ «+ИмяВнутреннейТаблицы);

    Если Запрос.МенеджерВременныхТаблиц=Неопределено Тогда

    МенеджерВТ = Новый МенеджерВременныхТаблиц;

    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

    Запрос.Выполнить();

    ЗапросТМП.МенеджерВременныхТаблиц=МенеджерВТ;

    Р=ЗапросТМП.Выполнить().Выгрузить();

    Запрос.МенеджерВременныхТаблиц = Неопределено;

    Иначе

    ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц;

    Р=ЗапросТМП.Выполнить().Выгрузить();

    КонецЕсли;

    Возврат Р;

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

    Reply
  12. yuraos

    В составе подсистемы «Обмен данными COM»

    имеется консолька запросов, которая помимо многого прочего, позволяет:

    1) используя код обработчиков событий,

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

    2) использовать при выполнении цепочки таких запросов единого менеджера ВТ.

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

    Перед выполнением запроса запускаем на выполнение другой запрос, который создает ВТ,

    а самом запросе пишим: ВЫБРАТЬ * ИЗ ИмяВТ

    Reply
  13. okref

    Чтоб совсем красиво было, исправь в тексте «написал для проСОМТРА«.

    Reply
  14. eeeio

    тут велосипед с несколькими скоростями http://infostart.ru/public/76529/

    Reply
  15. tormozit

    В ИР 2.71 добавлена аналогичная функция ПолВТ.

    Reply
  16. Alfer

    меня устраивает во всем — а некоторые моменты возьму на вооружение для дальнейшего использования

    Reply
  17. pakill

    Прошу прощения за предыдущий пост. Как-то неправильно отформатировал текст.

    Вот еще одна процедура

    // Функция для просмотра временных таблиц запроса в отладчике

    //

    // Параметры

    // Запрос — Запрос

    // ИмяВремТаблицы — Имя временной таблицы.

    // Если параметр задан, то функция вернет таблицу значений,

    // иначе вернет структуру, содержащую все временные таблицы запроса

    //

    Функция ПоказВТ(Запрос, ИмяВремТаблицы = «») Экспорт

    Если Запрос.МенеджерВременныхТаблиц = Неопределено Тогда

    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

    Запрос.Выполнить();

    КонецЕсли;

    ЗапросВТ = Новый Запрос(«ВЫБРАТЬ * ИЗ » + ИмяВремТаблицы);

    ЗапросВТ.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;

    Если ЗначениеЗаполнено(ИмяВремТаблицы) Тогда

    Возврат ЗапросВТ.Выполнить().Выгрузить();

    КонецЕсли;

    Результат = Новый Структура;

    Текст = СтрЗаменить(Запрос.Текст, Символы.ПС, » «);

    ТекстНР = НРег(Текст);

    Фрагмент = » поместить «;

    Позиция = Найти(ТекстНР, Фрагмент);

    Пока Позиция > 0 Цикл

    ТекстНР = СокрЛ(Сред(ТекстНР, Позиция + СтрДлина(Фрагмент)));

    Текст = СокрЛ(Сред(Текст, Позиция + СтрДлина(Фрагмент)));

    Позиция = Найти(ТекстНР, » «);

    Если Позиция = 0 Тогда

    Прервать;

    КонецЕсли;

    ИмяВТ = Лев(Текст, Позиция-1);

    ЗапросВТ.Текст = «ВЫБРАТЬ * ИЗ » + ИмяВТ;

    Результат.Вставить(ИмяВТ, ЗапросВТ.Выполнить().Выгрузить());

    ТекстНР = Сред(ТекстНР, Позиция + 1);

    Текст = Сред(Текст, Позиция + 1);

    Позиция = Найти(ТекстНР, Фрагмент);

    КонецЦикла;

    Возврат Результат;

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

    Reply
  18. fixin

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

    Reply
  19. tenaxxx

    начиная с платформы 8.3.8:

    Реализован метод Запрос.ВыполнитьПакетСПромежуточнымиДанными().

    Реализовано свойство МенеджерВременныхТаблиц.Таблицы

    Как итог для просмотра временных таблиц:

    Если временная таблица создается сразу в запросе:

    Запрос.ВыполнитьПакетСПромежуточнымиДанными()[i].Выгрузить() — ТаблицаЗначений

    Если используется менеджер временных таблиц:

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

    Reply
  20. alexhummer

    Спасибо за подсказку !

    🙂

    Reply
  21. artem_kray

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

    Reply
  22. tormozit

    (22) Ну для полного счастья еще посмотри на это

    Reply
  23. Ксакеп

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

    Запрос.МенеджерВременныхТаблиц.Таблицы[«ИмяВременнойТаблицы»].ПолучитьДанные().Выгрузить().

    На выходе получите таблицу значений с данными временной таблицы.

    // протупил. выше был подобный ответ.

    Reply
  24. ipoloskov

    Много инструментов, но в неподготовленной УПП на 8.2 ни один не работает.

    Вечером вставлю ПоказатьВременнуюТаблицу(МенеджерВременныхТаблиц, ИмяВременнойТаблицы) из УТ11 в какой-нибудь общий модуль, но что делать прямо сейчас — непонятно.

    И кто мешал разработчикам воткнуть эту функцию в стандартную поставку?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *