Для облегчения понимания и отладки больших запросов удобно разбить их на части - запросы пакетов, вложенные, объединения. Используется это в консолях запросов для построения дерева и выполнения отдельных запросов. Идея не новая, уже были аналогичные реализации в конце разместил ссылки на них.
Реализация в Infostart Toolkit учитывает:
- Запросы пакета
- Вложенные запросы
- Запросы объединений
Аналогичный механизм используется в проекте для сообщества Управляемой консоли отчетов (в Toolkit более отлажен)
Результат отображается в дереве запросов в виде подчиненных веток (обычно свернут). Картинка отражает тип используемого источника.
Для элементов структуры доступно:
- Выполнение, выполнение с ВТ
- Текст запроса (отображается без ВТ)
- Используемые параметры (редактирование только в главном запросе)
Недоступно редактирование текста, в т.ч. конструктором
Производительность
Работает все быстро и хорошо на больших запросах. Например: Тестовый запрос - 750~ строк, 21 запрос в пакете, 18 вложенных запросов и содержащий 90 объединений, анализируется и отображается менее чем за 0.5 сек (на весьма слабеньком компьютере).
При необходимости в настройках можно отключить разбор структуры
О реализации
Для разбора запроса можно было использовать два варианта:
- Объект СхемаЗапроса (появился в платформе 8.3.5)
- Собственный парсер
Выбрал СхемуЗапроса со всеми ее недостатками, т.к. по пути 2 уже ходил и набил много шишек.
из проблем: не анализируются запросы в выражениях. Например: "В (<запрос>)"
ВЫБРАТЬ
_ДемоНоменклатура.Ссылка КАК Ссылка
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
_ДемоНоменклатура.ВидНоменклатуры В
(ВЫБРАТЬ
_ДемоВидыНоменклатуры.Ссылка КАК Ссылка
ИЗ
Справочник._ДемоВидыНоменклатуры КАК _ДемоВидыНоменклатуры
ГДЕ
НЕ _ДемоВидыНоменклатуры.ПометкаУдаления)
Еще отдельная сложность - собрать все временные таблицы, используемые в части пакета.
См. также:
Визуальная структура запроса (Андрей Акулов)
Консоль запросов с графом - анализатор сложных запросов (Тарас Пачуашвили)
Дерево запросов Подсистема "Инструменты разработчика" v5.72 (Сергей Старых)