gifts2017

Запросник с отладкой СКД

Опубликовал Serj (Serj1C) в раздел Программирование - Практика программирования

СКД - мощный механизм. Все знают, что запросы в источниках данных перед выполнением оптимизируются с учетом пользовательских настроек. Иногда это может приводить к неверным результатам. Для кого-то эта система - черный ящик. Но ведь модифицированный запрос можно получить для отладки и разобраться в чем ошибка.

Предлагаю вашему вниманию модификацию консоли запросов. В нее добавлена возможность отладки отчетов на СКД.

Для отладки необходимо:

1) указать схему КД (можно выбрать из файла xml, макета внешнего отчета/обработки или набросать в конструкторе)

2) настроить схему (стандартные настройки, из файла xml или в конструкторе)

3) нажать кнопку "Отладить".

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

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

 

Также отлаживать отчет на СКД можно прям из формы отчета ( пример):

ВнешниеОбработки.Создать("\\server\1cv8$\Запросник+СКД.epf").ОтладитьСКД(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки);

 

PS: Спасибо tezin за его консоль запросов

 

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

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

Наименование Файл Версия Размер Кол. Скачив.
Запросник+СКД.epf
.epf 163,42Kb
01.03.12
387
.epf 163,42Kb 387 Скачать

См. также

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

Комментарии

1. Serj (Serj1C) 11.11.11 15:56
Очень помогает в ситуациях, которые по-началу не поддаются объяснению )
2. Armando Armando (Armando) 11.11.11 16:19
3. Vladimir (Boroda) 11.11.11 20:19
К СКД ещё только приступил, поэтому не могу вполне оценить нужность этого механизма, но нутром чую, что он очень и очень пригодится. Попробую его понять и ипользовать. Спасибо!
4. Serj (Serj1C) 11.11.11 23:43
В дерево отчетов попадают используемые наборы данных типа Запрос
Объединения содержат вложенные наборы данных
Наборы данных типа Объект представляются как простой запрос описания таблицы (перечислены поля)
Также платформа добавляет системные наборы данных (для построения иерархии и т.п.)

Далее идет отдельная ветка "Схема", в которой находится исходная схема КД
5. Serj (Serj1C) 11.11.11 23:46
В самой консоли появилась дополнительная фишка - отладка запросов с передачей параметров типа "Таблица значений". Есть, конечно, ряд ограничений (на типизацию колонок), но в целом может пригодиться.
6. Serj (Serj1C) 11.11.11 23:50
(3) Boroda, идея обработки пришла в голову при просмотре курса http://www.spec8.ru/kurs-po-skd-besplatno
Если только начал разбор СКД, то рекомендую начать с этого материала.
7. Alexandr Mal (zaoproxy) 12.11.11 16:55
Хорошая идея и хорошая реализация. Молодец.
8. Vladimir (Boroda) 12.11.11 20:56
(6) Спасибо и за обработку, и за ссылку на курс по СКД.
9. Владимир Чаклин (vec435) 16.11.11 09:17
10. Александр Иванов (dkprim) 17.11.11 06:22
отлично, будем пробовать :)
11. Людмила (mlv84) 18.11.11 05:45
Спасибо. Давно искала что-то подобное :)
12. Людмила (mlv84) 18.11.11 05:53
Пытаюсь добавить параметры из запроса, выдает ошибку {Форма.Форма.Форма(1560)}: Ошибка при вызове метода контекста (НайтиПараметры): {(56, 1)}: Синтаксическая ошибка
13. Людмила (mlv84) 18.11.11 06:14
на форме "Параметры" есть кнопка "Список" она в общем-то и не нужна, ведь когда выбираем значение параметра, то можем там указать, что это список значений и заполнить его. А вот если бы там была кнопка "Таблица значений" и она бы добавляла в параметр значение "Таблица значений" было бы классно.
14. Serj (Serj1C) 18.11.11 07:24
(12) mlv84, Синтаксическая ошибка в вашем запросе. Напишите корректный запрос - получите параметры (НайтиПараметры встроенный метод объекта Запрос)
15. Serj (Serj1C) 18.11.11 07:28
(13) mlv84, Таблицу значений я добавил для отладочных целей. Самостоятельный ее ввод мне, например, не очень нужен (даже ее редактирование). Это создаст кучу проблем (интерфейс, юзабилити, типизация колонок и т.д.) Но если вам это необходимо и думаете что это будет интересно сообществу - дерзайте! Выкладывайте. или напишите tezin, он может добавить этот функционал в следующих версиях.
16. Людмила (mlv84) 18.11.11 07:51
Serj1C пишет:

(12) mlv84, Синтаксическая ошибка в вашем запросе. Напишите корректный запрос - получите параметры (НайтиПараметры встроенный метод объекта Запрос)

Это да, прошу прощения. Запрос просто был большой. Кусочек потерялся при копировании. А таблицу значений придумала как обойти. Спасибо.
17. Serj (Serj1C) 18.11.11 11:01
(16) mlv84, Поделись, плиз, как придумала
18. Людмила (mlv84) 18.11.11 12:33
ничего сверх сложного. В моём случае в таблице значений была только одна строка. Я просто посмотрела в отладчике какие там значения. А потом в запросе их явно указала.
У меня было так:
"ВЫБРАТЬ
| ТаблицаПериодов.ДатаНачала КАК ДатаНачала,
| ТаблицаПериодов.ДатаОкончания КАК ДатаОкончания,
| ТаблицаПериодов.ГруппаНачислений
|ПОМЕСТИТЬ ИсходныеДанные
|ИЗ
| &ТаблицаПериодов КАК ТаблицаПериодов
....................

а сделала так:
"ВЫБРАТЬ
| ДАТАВРЕМЯ(2011, 04, 01, 0,0,0) КАК ДатаНачала,
| ДАТАВРЕМЯ(2011, 04, 30, 23,59,59) КАК ДатаОкончания,
| "%ДопНачисление%" как ГруппаНасилений //У меня здесь строковое значение передавалось

КАК ТаблицаПериодов
19. Serj (Serj1C) 18.11.11 12:36
(18) mlv84, Да, я тоже так делаю:
Выбрать &Контрагент1 Контрагент, 15000 Сумма Поместить ТЗ
Объединить все Выбрать &Контрагент2, 20000
Объединить все Выбрать &Контрагент3, NULL

и т.д.
20. Сергей Старых (tormozit) 15.12.11 20:41
Описанные функции (отладки запросов из компоновки) реализованы также в подсистеме "Инструменты разработчика" (функция Отладить, консоль компоновки данных) http://infostart.ru/public/15126/ . Там же там вы найдете много исследовательских инструментов в консоли компоновки данных, которые позволяет вам лучше понять, как устроен макет компоновки и расшифровка.
21. Serj (Serj1C) 15.12.11 20:53
(20) tormozit, да, ваша подсистема выше всех похвал
22. Serj (Serj1C) 01.03.12 09:54
UPD 29.02.2012
Обновление оригинальной консоли до последней версии + возможность редактирования параметра с типом ТаблицаЗначений (интерфейс не дружественный, юзабилити на нуле, но если сильно понадобится, то редактируется).
23. leraks1 leraks1 (leraks) 22.03.12 11:45
Очень помогает как раз разбираюсь с СКД
24. Ranis NetMen (RanisNetMen) 25.06.12 12:23
Функционал отличный. Интерфейс хотелось бы по компактнее.
25. Александр Шкут (alex_shkut) 20.07.12 13:55
{Форма.ФормаОтладкаСКД.Форма(47)}: Ошибка при вызове метода контекста (Инициализировать)
ПроцессорКД.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных);
по причине: Ошибка компоновки данных
по причине: Ошибка инициализации
по причине: Ошибка в выражении
по причине: Синтаксическая ошибка "Справочники.ТехнологическиеОперации.НайтиПоКоду"

Стандартная СКД принимает выражение Параметра в таком виде. Если элемент справочника не предопределенный, его можно найти позже - ПоКоду, ну или ПоНаименованию, что хуже в случае редактирования Наименования ;)
При вызове Отладка СКД и нажатии Сформировать обработка не понимает такого выражения для Параметра.
laisa2; Serj1C; +2 Ответить 2
26. Serj (Serj1C) 20.07.12 14:12
(25) alex_shkut, Любопытно, никогда не замечал. Баг платформы. Могу отписать на 1c@1c.ru, но не думаю, что скоро исправят.
27. Сергей Сергеев (Рамзес) 26.07.12 16:12
Возможность отлаживать отчет на СКД из формы отчета - это очень удобно. Спасибо. Имя файла в пути поправьте.
28. Сергей Сергеев (Рамзес) 27.07.12 13:20
При использовании набора данных "Объект":
{Форма.Форма.Форма(791)}: Ошибка при вызове метода контекста (Выполнить): {(9, 2)}: Таблица не найдена "РезультатОсновногоЗапроса"
<<?>>РезультатОсновногоЗапроса КАК Таблица

РезультатОсновногоЗапроса - это имя объекта (внешнего набора данных).
29. Serj (Serj1C) 30.07.12 12:20
(28) Рамзес, по внешнему набору данных нет смысла отлаживать запрос.
рекомендую для построения отчета по ТЗ использовать http://infostart.ru/public/120528/
30. Александр Шкут (alex_shkut) 06.08.12 17:48
Вот сам и отвечаю на свой пост (25)
В Запроснике надо найти нечто похожее (не вскрывал его :))
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровки,Истина);

А вот описание значения Истина в конце функции:
<ВозможностьИспользованияВнешнихФункций> (необязательный)
Тип: Булево. Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
Значение по умолчанию: Ложь
В моей текущей ситуации это была именно внешняя функция, но думаю, что это касается и прочих "СКД недвижковых" функций типа Справочники.НайтиПоКоду().
Мне помогло, думаю что в Запроснике этого будет достаточно, чтобы ошибка исчезла.

Нашел, где это: ФормаОтладкаСКД строка 47
имеем: ПроцессорКД.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных);
надо: ПроцессорКД.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных,,истина);
Pawlick; Serj1C; +2 Ответить 1
31. Serj (Serj1C) 07.08.12 09:45
(30) alex_shkut, мда, не тривиально... Ок, мотаем на ус!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа