gifts2017

Консоль для отладки запросов в режиме трассировки

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

При отладке запросов надоело каждый раз заполнять в консоли текст и параметры запроса, которые уже прописаны в конфигурации.
Лень родила идею ...
Отдельное спасибо fixin!!! Идея как вытащить параметры из объекта "Запрос", принадлежит именно ему!!!
Зачем это нужно :
При отладке я вызываю модально форму консоли, вызвав в отладчике Выражение:
ВнешниеОбработки.Создать("E:\1c\Консоль_запросов.epf ").ОткрытьДляОтладки(Запрос)
Туда передаю Объект - Запрос или ПостроительОтчета и заполняю всё необходимое для дальнейшей отладки, что бы не набивать параметры вручную(очень удобно)
В итоге в любом месте отладчика я могу вызвать консоль запросов уже настроенную для работы с запросом. Очень актуально в ЗУП , где движения по регистрам создаются на время выполнения кода.

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

Наименование Файл Версия Размер Кол. Скачив.
-
.1196061561 50,38Kb
19.08.14
146
.1196061561 50,38Kb 146 Скачать

См. также

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

Комментарии

1. Герман (German) 26.11.07 10:47
Да давно руки не доходили сделать
2. Сергей Сиренко (ssn1978) 27.11.07 13:49
Спасибо, прикрутил вызов к Пунтосвитчеру, получилось здорава
3. Андрей (Ukrandruha) 27.11.07 15:57
ssn1978, что такое пунтосвитчер?
5. Андрей (Ukrandruha) 27.11.07 16:28
http://www.punto.ru/ это понятно, но каким местом моя консоль прикрутилась к нему? :)
6. Герман (German) 27.11.07 16:34
Да не каким. писать в отладчике слишклм муторно
ВнешниеОбработки.Создать("E:\1c\Консоль_запросов.epf ").ОткрытьДляОтладки(Запрос)

он поставил автозамену ..
7. Сергей Старых (tormozit) 03.12.07 08:54
Аналогичная функциональность имеется и в моей консоли http://infostart.ru//projects/1274/ . Но она не мобильна.
8. Андрей (Ukrandruha) 03.12.07 09:26
tormozit, я встречал уже у многих свой код, но идея принадлежит мне, по этому и решил выложить у себя в кладезе :)
9. Андрей (Ukrandruha) 03.12.07 09:34
Надеюсь никто не обидется :)
10. Герман (German) 03.12.07 09:39
и в моей будет (если Андрей не возражает).. .. клево мне понравилось .. я добавил еще функционал без открытия => что бы в файл запросов сохранялся запрос и ВСЕ.
11. Андрей (Ukrandruha) 03.12.07 09:45
German, не я не против:) для того и выкладываю, я сам не против у кого чего стянуть:)
12. Сергей Старых (tormozit) 09.12.07 03:33
(8) Уж не знаю, кому она принадлежит, но я на родителя идеи не претендую =) Если ты родитель, то молодец. Идея отличная.
13. Артур (0tto) 18.12.07 16:37
Под 8.1 не хватает временных таблиц... точнее строчки
ОбъектЗапрос.МенеджерВременныхТаблиц = ЗапросОтладки.МенеджерВременныхТаблиц;
в процедуре ВыполнитьЗапрос()

Идея консольки понравилась

14. Сергей Старых (tormozit) 19.12.07 07:35
Еще не хватает сообщений о том, какие параметры не получилось извлечь.
15. Андрей (Ukrandruha) 19.12.07 09:33
tormozit, да вроде и так видно в таблице параметров:)
16. Герман (German) 19.12.07 09:38
(14) а какие например может не получится...? я еще не на одном не прокололся
17. Андрей (Ukrandruha) 19.12.07 10:06
German, например: Вид движения, Список разрезов регистра расчета
18. Андрей (Ukrandruha) 19.12.07 10:09
Из объекта - запрос вынуть параметры целая история, если посмотрите код увидите как там пришлось извращаться, что бы вынуть хотя бы то что есть
19. Герман (German) 19.12.07 10:20
>Вид движения
Установите доступный тип для колонки значение таблицы параметров
20. Герман (German) 19.12.07 10:21
чуть переписал
Код
Если  ТипЗнч(ЗапросОтладки) =Тип("ПостроительОтчета") Тогда
            ЗапросОтладки = ЗапросОтладки.ПолучитьЗапрос();
         КонецЕсли;      
         //сохраняем текст запроса .. потом будем использовать 
         НоваяСтрока = ДеревоЗапросов.Строки.Добавить();
         НоваяСтрока.Запрос = ?(Лев(ЗаголовокЗапросаОтладки,1)="$",ЗаголовокЗапросаОтладки,"$"+ЗаголовокЗапросаОтладки);
         НоваяСтрока.ТекстЗапроса=Строка(ЗапросОтладки.Текст);
         НоваяСтрока.ТекстЗапросаSQL = "";
         НоваяСтрока.Язык= "";
         //определим параметры
         ПараметрыЗапроса = ЗапросОтладки.НайтиПараметры();
         НоваяСтрока.ПараметрыЗапроса=мФормаПараметров.Параметры.Скопировать();
         Для каждого ПараметрЗапроса Из ПараметрыЗапроса Цикл
            ИмяПараметра =  ПараметрЗапроса.Имя;
            СтрокаПараметров = НоваяСтрока.ПараметрыЗапроса.Добавить();
            СтрокаПараметров.ИмяПараметра = ИмяПараметра;
            //получаем значение параметра
            Попытка
               //изменим текст запроса и получим установлнные там параметры
               ЗапросОтладки.Текст = "Выбрать &"+ИмяПараметра;
               Выборка = ЗапросОтладки.Выполнить().Выбрать();
               Если Выборка.Следующий() Тогда
                  СтрокаПараметров.ЗначениеПараметра = Выборка[ИмяПараметра];
               КонецЕсли;   
            Исключение
               //Возможно это список параметров  ссылок
               Для каждого ТипПараметра Из ПараметрЗапроса.ТипЗначения.Типы() Цикл
                  Попытка
                     ИмяОбъекта = Метаданные.НайтиПоТипу(ТипПараметра).ПолноеИмя();
                     ЗапросОтладки.Текст = "Выбрать Ссылка Из "+ИмяОбъекта+" ГДЕ Ссылка В(&"+ ИмяПараметра+")";
                     РезультатЗапроса = ЗапросОтладки.Выполнить().Выгрузить();
                     Список=Новый СписокЗначений();
                     Список.ЗагрузитьЗначения(РезультатЗапроса.ВыгрузитьКолонку("Ссылка"));
                     СтрокаПараметров.ЗначениеПараметра = Список;
                  Исключение
                  КонецПопытки; 
               КонецЦикла;                                
            КонецПопытки;
         КонецЦикла;
         //восстановим текст запросачтобы можно было в дальнейшим продолжить отладку без проблемм
         ЗапросОтладки.Текст=НоваяСтрока.ТекстЗапроса;
Показать полностью
21. Андрей (Ukrandruha) 19.12.07 10:50
German, ничего нового не нашел:)
22. Андрей (Ukrandruha) 19.12.07 10:56
В общем как ни крути вынуть из параметра список из строковых значений нельзя :(
23. Андрей (Ukrandruha) 19.12.07 12:02
Сейчас на конференции "1С:Предприятие 8" просят разработчиков добавить доступ к коллекции параметров, если сделают, тема параметров будет закрыта:)
24. Сергей Старых (tormozit) 19.12.07 22:27
(23) Собственно это я и создал ту тему
25. Сергей Старых (tormozit) 19.12.07 22:38
(15) Строго говоря не всегда видно. Вот например видишь ты параметр "МойПараметр" и значение у него Неопределено, но это еще не значит, что этот параметр не был извлечен.
Короче в моей консоли я все довел до ума, если интересно посмотри.
26. Сергей Старых (tormozit) 20.12.07 08:15
(20) У меня надо сначала открыть построитель в консоли построителей, а потом уже из нее исполняемый запрос можно открыть в консоли запросов.
27. marina (marih) 29.10.08 10:20
Снимите уже рейтинг=3 для скачивания, пожа-а-а-луйста!
28. Владислав Цылёв (vet7777) 14.01.09 14:30
варианты решения проблемы, если параметр типа ВидДвиженияНакопления
- использовать первый попавшийся регистр накопления
- руками прописать имя существующего непустого регистра накопления остатков
- попробовать поискать и извлечь из текста запроса имя регистра накопления
вот пример по первому варианту:
Если ПараметрЗапроса.ТипЗначения = Новый ОписаниеТипов("ВидДвиженияНакопления") Тогда
Попытка
РегНак = Метаданные.РегистрыНакопления[0].Имя;
ЗапросОтладки.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 ВидДвижения ИЗ РегистрНакопления."+РегНак+"ГДЕ ВидДвижения=&"+ИмяПараметра;
РЗ = ЗапросОтладки.Выполнить().Выгрузить();
СтрокаПараметров.ЗначениеПараметра = РЗ[0]["ВидДвижения"];
Продолжить;
Исключение
КонецПопытки;
КонецЕсли;
30. Andrei (baza1978) 27.09.11 13:25
31. Алексей Николаев (bitrostov) 08.02.12 16:54
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа