Как посмотреть содержимое временных таблиц в отладке

09 августа 2014

Проблема

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

Однако, есть простой способ просмотра временных таблиц любого запроса непосредственно в процессе отладки!

Решение

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

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

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

Рассмотрим небольшой пример использования этой функции.

Пример использования

Пример сделаем на процедуре проведения документа "Поступление товаров и услуг". Перейдем в процедуру "ИнициализироватьДанныеДокумента" модуля менеджера документа, которая подготавливает данные для выполнения движений по регистрам. Процедура содержит большой запрос, формируемый частями. Вот небольшая часть процедуры:

Часть процедуры инициализации данных для проведения документа "Поступление товаров и услуг"

В самом начале текста запроса создается временная таблица "ВтТаблицаТовары" на основе запроса к табличной части документа "Товары":

Создание временной таблицы "ВтТаблицаТовары" при инициализации данных проведения

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

Просмотр содержимого временной таблицы

Первым параметром мы передали менеджер временных таблиц запроса, вторым - имя временной таблицы. Подобным образом можно просматривать содержимое любой существующей временной таблицы.

Если в функцию передать некорректное имя, то результат будет следующим:

 Ошибка получения несуществующей временной таблицы Ошибка получения несуществующей временной таблицы

Итог

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


comments powered by Disqus