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

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

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

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

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

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

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

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

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

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

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

Надеюсь, будет кому-нибудь полезен.

В файле находится cf-файл с общим модулем, содержащим указанные функции

6 Comments

  1. klinval
    Я попробовал поискать аналоги предлагаемого механизма на сайте, но ничего не нашел

    http://infostart.ru/public/76529/

    http://infostart.ru/public/100801/

    http://infostart.ru/public/173803/

    и т.д. И это только на ИС, а вне его ещё больше упоминаний.

    Альтернативный способ просмотра без временных таблиц:

    http://infostart.ru/public/347354/

    Reply
  2. alex271

    (1) klinval, Соглашусь.

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

    Вероятно, это вопрос к работе поиска публикаций на сайте.

    Reply
  3. Поручик

    (0) Да таких работ и функций полно со времён 8.1., вернее с тех времён, когда появились временные таблицы.

    Reply
  4. Поручик

    Аналог вашей функции есть в БСП, только искать лениво

    Reply
  5. soulsteps

    Если не ошибаюсь, в консоли запроса (по крайней мере) от Чистова можно «подобные функции» найти. Сам еще для себя оформил в модуле отладки функцию

    Функция ИзвлечьДанныеВременнойТаблицы(МВТ, ИмяВТ) Экспорт

    Ответ = Неопределено;

    Если ПустаяСтрока(ИмяВТ) Тогда

    ОбщегоНазначения.СообщитьОбОшибке(«Не указано наименование временной таблицы»);

    Возврат Ответ;

    КонецЕсли;

    Запрос = Новый Запрос;

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

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

    Попытка

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

    Исключение

    ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),,»Получение данных временной таблицы <» + ИмяВТ +»>»);

    КонецПопытки;

    Возврат Ответ;

    КонецФункции //ИзвлечьДанныеВременнойТаблицы()

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

    Reply
  6. Vovan58

    Первый вопрос : Почему две функции а не одна?

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

    И вот что получается :

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

Leave a Comment

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