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


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

Подобные решения уже существуют, но в случае большого объема данных просмотреть временные таблицы в отладчике не очень удобно из торомозов, поэтому как выход из ситуации — сохранение в Excel.

Порядок работы:
1. Вставляем код в серверный общий модуль (либо создаем свой)
2. Ставим отчку остановки в нужном месте и выполням функцию (два параметра — Запрос и СохранитьВExcel) см. рис 2
в случае сохранения — на рабочем столе функция создаст папку VT_temp и поместит туда файлы.

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

Код:

ПолучитьСписокВТ(ТекстЗапроса) …

Процедура ЗаписатьВТ(ИмяТаблицы, Результат, Каталог) …

Функция ПросмотрВременныхТаблиц(Запрос, СохранитьВExcel = Ложь) Экспорт
    МассивВТ = ПолучитьСписокВТ(Запрос.Текст);
    МассивТаблиц = Новый Структура;
    
    МенеджерУстановлен = Истина;
    Если Запрос.МенеджерВременныхТаблиц = Неопределено Тогда
        МенеджерУстановлен = Ложь;    
    КонецЕсли;
    
    ЗапросВТ = Новый Запрос;
    
    Если НЕ МенеджерУстановлен Тогда
        МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
        Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
        Запрос.ВыполнитьПакет();
        
        ЗапросВТ.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    Иначе
        ЗапросВТ.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;    
    КонецЕсли;
    
    Если СохранитьВExcel Тогда
        Попытка
            // на рабочий стол
            WSS = Новый COMОбъект(«WScript.Shell»);
            ПутьКРабочемуСтолу = WSS.SpecialFolders().Item(«Desktop»);
            Каталог = «VT_temp»;
            СоздатьКаталог(ПутьКРабочемуСтолу + Каталог);
        Исключение
            Сообщить(ОписаниеОшибки());    
        КонецПопытки;
    КонецЕсли;
    
    Для Каждого ИмяТаблицы из МассивВТ Цикл
        ЗапросВТ.Текст = «ВЫБРАТЬ * ИЗ » + ИмяТаблицы;
        Попытка
            Результат = ЗапросВТ.Выполнить().Выгрузить();        
            МассивТаблиц.Вставить(ИмяТаблицы, Результат);
            
            Если СохранитьВExcel Тогда
                ЗаписатьВТ(ИмяТаблицы, Результат, ПутьКРабочемуСтолу + Каталог + «»);    
            КонецЕсли;
        Исключение
            Сообщить(ОписаниеОшибки());
            Продолжить;    
        КонецПопытки;
    КонецЦикла;
    
    Если НЕ МенеджерУстановлен Тогда
        Запрос.МенеджерВременныхТаблиц.Закрыть();    
    КонецЕсли;
                                        
    Возврат МассивТаблиц;
КонецФункции

1 Comment

  1. nixel

    Скапитаню — сохранение в серверном общем модуле на рабочий стол сохранит файлы на сервер.

    Выводы очевидны.

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

    Но за идею — плюс.

    Еще как идея сохранять таблицы одного запроса не в разные файлы-таблицы, а в разные листы в пределах одного файла.

    Reply

Leave a Comment

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