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

Публикация № 173803

Программирование - Инструментарий

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

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

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

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

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

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

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

Возврат ТЗ; 

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

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

Пример:

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

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

Например

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

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

108

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

Наименование Файл Версия Размер
Помощник Отладки
.epf 4,25Kb
19.09.16
121
.epf 4,25Kb 121 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. wunderland 202 14.02.13 19:25 Сейчас в теме
В ЗиУП для Украины...
ОбщегоНазначения.ПоказатьВременнуюТаблицу(ИсходныйЗапрос, ИмяВременнойТаблицы = "", Показать = Ложь)
все придумано до нас...
2. aet 37 15.02.13 07:04 Сейчас в теме
(1) спасибо, нашел аналог в УПП.
Не с самыми удобными параметрами и именем модуля конечно...

Модуль РасширеннаяАналитикаУчета
// Процедура формирует запрос по временной таблице.
//
// Параметры:
// СтруктураШапкиДокумента – Структура - Реквизиты документа "Расчет себестоимости выпуска"
// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц
// ИмяВременнойТаблицы - Строка - Имя временной таблицы
//
Процедура ПоказатьВременнуюТаблицу(
СтруктураШапкиДокумента,
МенеджерВременныхТаблиц,
ИмяВременнойТаблицы
) Экспорт
3. Поручик 4202 15.02.13 09:49 Сейчас в теме
(0) Всё уже украдено до нас. (С)
УТ 11.

// Функция показывает все поля указанной временной таблицы из менеджера временных таблиц.
// Используется для просмотра временных таблиц в отладчике.
// Пример вызова функции:
//	ЗапасыСервер.ПоказатьВременнуюТаблицу(МенеджерВременныхТаблиц, "ТаблицаТоваров")
//
Функция ПоказатьВременнуюТаблицу(МенеджерВременныхТаблиц, ИмяВременнойТаблицы) Экспорт
Death_eye; stupidgamer; alwiz3; Istur; nsirotkin@mail.ru; u_n_k_n_o_w_n; +6 Ответить
26. ipoloskov 65 24.10.17 14:23 Сейчас в теме
Много инструментов, но в неподготовленной УПП на 8.2 ни один не работает.
Вечером вставлю ПоказатьВременнуюТаблицу(МенеджерВременныхТаблиц, ИмяВременнойТаблицы) из УТ11 в какой-нибудь общий модуль, но что делать прямо сейчас - непонятно.
И кто мешал разработчикам воткнуть эту функцию в стандартную поставку?
4. kibertechnology 109 15.02.13 14:53 Сейчас в теме
Зато есть дополнительная сортировка чего в типовом варианте нет. ;-)
5. petrov_al 10 15.02.13 17:09 Сейчас в теме
(4) kibertechnology, у меня есть переделанная инфостаровская обработка с сортировкой и встроенным отбором
6. WKBAPKA 195 17.02.13 11:08 Сейчас в теме
а я не знал... в типовых же функции не документированы ... спасибо за идею, пусть уже и за совсем не свежую
7. WKBAPKA 195 17.02.13 11:15 Сейчас в теме
В УТП для Украины я такой не нашел
8. SeiOkami 665 17.02.13 11:56 Сейчас в теме
В любом случае, я о таком не знал. У знал из статьи. Так что плюс =)
9. dryms 243 17.02.13 22:56 Сейчас в теме
Это старо, как минимум года 2
10. aet 37 18.02.13 04:10 Сейчас в теме
(9) dryms, однако актуально, так как (2) использовать при отладке невозможно.
11. Synoecium 550 18.02.13 08:22 Сейчас в теме
Сам пользовался подобной функцией, но на практике не всегда запрос с временными таблицами имеет МенеджерВременныхТаблиц, например, ВТ создается и используется в пределах одного вызова запроса. Поэтому сейчас пользуюсь таким доработанным под себя вариантом, может кому пригодится:

Функция ЛукВТ(Запрос, ИмяВнутреннейТаблицы) Экспорт
Перем ЗапросТМП, Р;
//Получаем таблицу из менеджера временных таблиц запроса
ЗапросТМП=Новый Запрос("ВЫБРАТЬ * ИЗ "+ИмяВнутреннейТаблицы);
Если Запрос.МенеджерВременныхТаблиц=Неопределено Тогда
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Выполнить();
ЗапросТМП.МенеджерВременныхТаблиц=МенеджерВТ;
Р=ЗапросТМП.Выполнить().Выгрузить();
Запрос.МенеджерВременныхТаблиц = Неопределено;
Иначе
ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц;
Р=ЗапросТМП.Выполнить().Выгрузить();
КонецЕсли;

Возврат Р;
КонецФункции
zavis11; purgin; ВладимирVolodya; Serg_KSV; Nuuq; ASDF2; VitaliyCeban; gigapevt; Craig; smit1c; AlexiyI; ASV085; Redhatych; Tavalik; mailrum2004; RodinMax; Tolpinski; the1; kibertechnology; CratosX; +20 Ответить
12. yuraos 958 18.02.13 10:39 Сейчас в теме
В составе подсистемы "Обмен данными COM"
имеется консолька запросов, которая помимо многого прочего, позволяет:
1) используя код обработчиков событий,
перед и после выполнения запроса програмно запускать на выполнение другие запросы.
2) использовать при выполнении цепочки таких запросов единого менеджера ВТ.
Что позволяет реализовать обсуждаемую задачу прямо в консоли.
Перед выполнением запроса запускаем на выполнение другой запрос, который создает ВТ,
а самом запросе пишим: ВЫБРАТЬ * ИЗ ИмяВТ
kibertechnology; +1 Ответить
13. okref 18.02.13 13:56 Сейчас в теме
Чтоб совсем красиво было, исправь в тексте "написал для проСОМТРА".
14. eeeio 105 19.02.13 09:38 Сейчас в теме
тут велосипед с несколькими скоростями http://infostart.ru/public/76529/
Rustig; kibertechnology; +2 Ответить
15. tormozit 5002 03.03.13 03:16 Сейчас в теме
В ИР 2.71 добавлена аналогичная функция ПолВТ.
16. Alfer 16.01.14 19:28 Сейчас в теме
меня устраивает во всем - а некоторые моменты возьму на вооружение для дальнейшего использования
17. pakill 43 20.02.15 19:26 Сейчас в теме
<p style="text-align: left; font-family: courier new,courier; color: blue">
<font color=green>// Функция для просмотра временных таблиц запроса в отладчике

//

// Параметры

//      Запрос         - Запрос

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

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

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

//

</font><font color=red>Функция </font>ПоказВТ<font color=red>(</font>Запрос<font color=red>, </font>ИмяВремТаблицы <font color=red>= </font><font color=black>""</font><font color=red>) Экспорт



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

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

        </font>Запрос<font color=red>.</font>Выполнить<font color=red>();

    КонецЕсли;



    </font>ЗапросВТ <font color=red>= Новый </font>Запрос<font color=red>(</font><font color=black>"ВЫБРАТЬ * ИЗ " </font><font color=red>+ </font>ИмяВремТаблицы<font color=red>);

    </font>ЗапросВТ<font color=red>.</font>МенеджерВременныхТаблиц <font color=red>= </font>Запрос<font color=red>.</font>МенеджерВременныхТаблиц<font color=red>;



    Если </font>ЗначениеЗаполнено<font color=red>(</font>ИмяВремТаблицы<font color=red>) Тогда

        Возврат </font>ЗапросВТ<font color=red>.</font>Выполнить<font color=red>().</font>Выгрузить<font color=red>();

    КонецЕсли;



    </font>Результат <font color=red>= Новый </font>Структура<font color=red>;

    </font>Текст    <font color=red>= </font>СтрЗаменить<font color=red>(</font>Запрос<font color=red>.</font>Текст<font color=red>, </font>Символы<font color=red>.</font>ПС<font color=red>, </font><font color=black>" "</font><font color=red>);

    </font>ТекстНР  <font color=red>= </font>НРег<font color=red>(</font>Текст<font color=red>);

    </font>Фрагмент <font color=red>= </font><font color=black>" поместить "</font><font color=red>;



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



    Пока </font>Позиция <font color=red>> </font><font color=black>0  </font><font color=red>Цикл



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

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

        </font>Позиция <font color=red>= </font>Найти<font color=red>(</font>ТекстНР<font color=red>, </font><font color=black>" "</font><font color=red>);



        Если </font>Позиция <font color=red>= </font><font color=black>0 </font><font color=red>Тогда

            Прервать;

        КонецЕсли;



        </font>ИмяВТ           <font color=red>= </font>Лев<font color=red>(</font>Текст<font color=red>, </font>Позиция<font color=red>-</font><font color=black>1</font><font color=red>);

        </font>ЗапросВТ<font color=red>.</font>Текст  <font color=red>= </font><font color=black>"ВЫБРАТЬ * ИЗ " </font><font color=red>+ </font>ИмяВТ<font color=red>;



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



        </font>ТекстНР <font color=red>= </font>Сред<font color=red>(</font>ТекстНР<font color=red>, </font>Позиция <font color=red>+ </font><font color=black>1</font><font color=red>);

        </font>Текст   <font color=red>= </font>Сред<font color=red>(</font>Текст<font color=red>,   </font>Позиция <font color=red>+ </font><font color=black>1</font><font color=red>);



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



    КонецЦикла;





    Возврат </font>Результат<font color=red>;



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

</font></p>
18. pakill 43 20.02.15 19:30 Сейчас в теме
Прошу прощения за предыдущий пост. Как-то неправильно отформатировал текст.

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



// Функция для просмотра временных таблиц запроса в отладчике
//
// Параметры
// Запрос - Запрос
// ИмяВремТаблицы - Имя временной таблицы.
// Если параметр задан, то функция вернет таблицу значений,
// иначе вернет структуру, содержащую все временные таблицы запроса
//
Функция ПоказВТ(Запрос, ИмяВремТаблицы = "") Экспорт

Если Запрос.МенеджерВременныхТаблиц = Неопределено Тогда
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Выполнить();
КонецЕсли;

ЗапросВТ = Новый Запрос("ВЫБРАТЬ * ИЗ " + ИмяВремТаблицы);
ЗапросВТ.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;

Если ЗначениеЗаполнено(ИмяВремТаблицы) Тогда
Возврат ЗапросВТ.Выполнить().Выгрузить();
КонецЕсли;

Результат = Новый Структура;
Текст = СтрЗаменить(Запрос.Текст, Символы.ПС, " ");
ТекстНР = НРег(Текст);
Фрагмент = " поместить ";

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

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

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

Если Позиция = 0 Тогда
Прервать;
КонецЕсли;

ИмяВТ = Лев(Текст, Позиция-1);
ЗапросВТ.Текст = "ВЫБРАТЬ * ИЗ " + ИмяВТ;

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

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

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

КонецЦикла;


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

КонецФункции
Alien_job; +1 Ответить
19. fixin 3796 24.02.16 13:13 Сейчас в теме
А назвать "ПоказатьВременнуюТаблицу", как в типовых слабо? Неудобное название.
20. tenaxxx 09.06.16 04:12 Сейчас в теме
начиная с платформы 8.3.8:
Реализован метод Запрос.ВыполнитьПакетСПромежуточнымиДанными().
Реализовано свойство МенеджерВременныхТаблиц.Таблицы

Как итог для просмотра временных таблиц:
Если временная таблица создается сразу в запросе:
Запрос.ВыполнитьПакетСПромежуточнымиДанными()[i].Выгрузить() - ТаблицаЗначений
Если используется менеджер временных таблиц:
МенеджерВременныхТаблиц.Таблицы[i].ПолучитьДанные().Выгрузить() - ТаблицаЗначений
igortar; Swetlana; ErshKUS; RockClimber; COMPER; Xel'naga; serge.kuh; onetone; smit1c; Serg_KSV; chinkovs; MariusUrsus; Brook; Tangram; AVKonya; rendalina; zoikins; anco27; romku; Atticus2; Wefast; progbuh; suggestive; vvr908; A_kryl; TeMochkiN; АндрейКр; molodoi1sneg; sh_max; georgebgk; 3LinOK; u_n_k_n_o_w_n; Dr.ZIG; alwiz3; fml_nhk; myoker; ditya_bez_glazu; +37 Ответить
21. alexhummer 29.08.16 14:21 Сейчас в теме
Спасибо за подсказку !
:)
22. artem_kray 17.04.17 19:55 Сейчас в теме
Спасибо, очень помогла функция, а то я уже почти отчаялся понять регламентированный отчет "Расчет страховых взносов", там куча временных таблиц.
23. tormozit 5002 17.04.17 19:58 Сейчас в теме
(22) Ну для полного счастья еще посмотри на это
24. Ксакеп 58 06.07.17 09:58 Сейчас в теме
В случае использования Менеджера ВТ достаточно в табло отладчика указать
Запрос.МенеджерВременныхТаблиц.Таблицы["ИмяВременнойТаблицы"].ПолучитьДанные().Выгрузить().

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


// протупил. выше был подобный ответ.
Swetlana; Berckk; A7758735; Serj1C; MariusUrsus; +5 Ответить
Оставьте свое сообщение