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

Опубликовал Николай Диденко (kibertechnology) в раздел Программирование - Инструментарий

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

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

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

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

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

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

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

Возврат ТЗ; 

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

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

Пример:

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

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

Например

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

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

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

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

См. также

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

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

// Функция показывает все поля указанной временной таблицы из менеджера временных таблиц.
// Используется для просмотра временных таблиц в отладчике.
// Пример вызова функции:
//	ЗапасыСервер.ПоказатьВременнуюТаблицу(МенеджерВременныхТаблиц, "ТаблицаТоваров")
//
Функция ПоказатьВременнуюТаблицу(МенеджерВременныхТаблиц, ИмяВременнойТаблицы) Экспорт
...Показать Скрыть
alwiz3; Istur; nsirotkin@mail.ru; u_n_k_n_o_w_n; +4 Ответить
4. Николай Диденко (kibertechnology) 74 15.02.13 14:53 Сейчас в теме
Зато есть дополнительная сортировка чего в типовом варианте нет. ;-)
5. al petrov (petrov_al) 10 15.02.13 17:09 Сейчас в теме
(4) kibertechnology, у меня есть переделанная инфостаровская обработка с сортировкой и встроенным отбором
6. Ярослав Радкевич (WKBAPKA) 199 17.02.13 11:08 Сейчас в теме
а я не знал... в типовых же функции не документированы ... спасибо за идею, пусть уже и за совсем не свежую
7. Ярослав Радкевич (WKBAPKA) 199 17.02.13 11:15 Сейчас в теме
В УТП для Украины я такой не нашел
8. Виталий Черненко (SeiOkami) 554 17.02.13 11:56 Сейчас в теме
В любом случае, я о таком не знал. У знал из статьи. Так что плюс =)
9. grigory пкш (dryms) 230 17.02.13 22:56 Сейчас в теме
Это старо, как минимум года 2
10. Александр (aet) 37 18.02.13 04:10 Сейчас в теме
(9) dryms, однако актуально, так как (2) использовать при отладке невозможно.
11. Сергей Лесовой (Synoecium) 90 18.02.13 08:22 Сейчас в теме
Сам пользовался подобной функцией, но на практике не всегда запрос с временными таблицами имеет МенеджерВременныхТаблиц, например, ВТ создается и используется в пределах одного вызова запроса. Поэтому сейчас пользуюсь таким доработанным под себя вариантом, может кому пригодится:

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

Возврат Р;
КонецФункции
ВладимирVolodya; Serg_KSV; Nuuq; ASDF2; VitaliyCeban; gigapevt; Craig; smit1c; AlexiyI; ASV085; Redhatych; Tavalik; mailrum2004; RodinMax; Tolpinski; the1; kibertechnology; CratosX; +18 Ответить
12. Юрий Осипов (yuraos) 812 18.02.13 10:39 Сейчас в теме
В составе подсистемы "Обмен данными COM"
имеется консолька запросов, которая помимо многого прочего, позволяет:
1) используя код обработчиков событий,
перед и после выполнения запроса програмно запускать на выполнение другие запросы.
2) использовать при выполнении цепочки таких запросов единого менеджера ВТ.
Что позволяет реализовать обсуждаемую задачу прямо в консоли.
Перед выполнением запроса запускаем на выполнение другой запрос, который создает ВТ,
а самом запросе пишим: ВЫБРАТЬ * ИЗ ИмяВТ
kibertechnology; +1 Ответить
13. Алексей Рябцев (okref) 18.02.13 13:56 Сейчас в теме
Чтоб совсем красиво было, исправь в тексте "написал для проСОМТРА".
14. Виктор Лебедев (eeeio) 80 19.02.13 09:38 Сейчас в теме
тут велосипед с несколькими скоростями http://infostart.ru/public/76529/
Rustig; kibertechnology; +2 Ответить
15. Сергей Старых (tormozit) 4047 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);

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

КонецЦикла;


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

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

Как итог для просмотра временных таблиц:
Если временная таблица создается сразу в запросе:
Запрос.ВыполнитьПакетСПромежуточнымиДанными()[i].Выгрузить() - ТаблицаЗначений
Если используется менеджер временных таблиц:
МенеджерВременныхТаблиц.Таблицы[i].ПолучитьДанные().Выгрузить() - ТаблицаЗначений
sh_max; georgebgk; 3LinOK; u_n_k_n_o_w_n; Dr.ZIG; alwiz3; fml_nhk; myoker; ditya_bez_glazu; +9 Ответить
21. Гайдук Александр (alexhummer) 29.08.16 14:21 Сейчас в теме
Спасибо за подсказку !
:)