gifts2017

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Наименование Файл Версия Размер Кол. Скачив.
Конфигурация с функциями механизма в общем модуле
.cf 6,01Kb
23.12.15
2
.cf 1.0 6,01Kb 2 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Валерий К (klinval) 25.12.15 13:07
Я попробовал поискать аналоги предлагаемого механизма на сайте, но ничего не нашел

http://infostart.ru/public/76529/
http://infostart.ru/public/100801/
http://infostart.ru/public/173803/
и т.д. И это только на ИС, а вне его ещё больше упоминаний.
Альтернативный способ просмотра без временных таблиц:
http://infostart.ru/public/347354/
2. Александр Анисин (alex271) 25.12.15 14:49
(1) klinval, Соглашусь.
Но авторы перечисленных публикаций тоже скромно написали, что не смогли найти аналога.
Вероятно, это вопрос к работе поиска публикаций на сайте.
3. Сергей Ожерельев (Поручик) 26.12.15 17:51
(0) Да таких работ и функций полно со времён 8.1., вернее с тех времён, когда появились временные таблицы.
4. Сергей Ожерельев (Поручик) 26.12.15 17:52
Аналог вашей функции есть в БСП, только искать лениво
5. John Bolshakov (soulsteps) 28.12.15 14:30
Если не ошибаюсь, в консоли запроса (по крайней мере) от Чистова можно "подобные функции" найти. Сам еще для себя оформил в модуле отладки функцию
Функция ИзвлечьДанныеВременнойТаблицы(МВТ, ИмяВТ) Экспорт

Ответ = Неопределено;
Если ПустаяСтрока(ИмяВТ) Тогда
ОбщегоНазначения.СообщитьОбОшибке("Не указано наименование временной таблицы");
Возврат Ответ;
КонецЕсли;

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

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

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

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

Соглашусь с автором, что механизм прост. Но это не открытие. Для новичков, возможно, самое то.
6. Vladimir Glumov (Vovan58) 03.01.16 18:09
Первый вопрос : Почему две функции а не одна?

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