Каталог решений - Отладка логики запроса в консоли запросов ИР

Отладка логики запроса в консоли запросов ИР

Отладка логики запроса в консоли запросов ИР

В наличии

Облегчаем поиск причины неожиданного результата запроса в консоли запросов из подсистемы «Инструменты разработчика» (ИР)

Категория:

Описание

Актуально для подсистемы “Инструменты разработчика” 5.73

Термины статьи

  • Отладка логики программного кода — поиск причин получения неожиданного результата выполнения программного кода
  • Запрос — инструкция (оператор) над таблицами базы данных
  • Пакет запросов — последовательность запросов, использующих общий набор временных таблиц
  • Запрос пакета — последовательно выполняемый запрос в пакете запросов 
  • Подзапрос или вложенный запрос — запрос, являющийся частью другого запроса
  • Проблемный запрос — запрос, выдающий неожиданный результат

Вступление

При отладке логики программного кода на императивных языках, т.е. описывающих последовательность операций над переменными в памяти, мы имеем естественную возможность анализа состояния переменных после выполнения каждой операции. Встроенный язык 1С относится к таким языкам. 

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

Написав или изменив запрос, мы обычно проверяем его работу в консоли запросов, чтобы убедиться в соответствии выдаваемого им результата нашим ожиданиям. Рассмотрим, какими приемами можно отлаживать логику запроса 1С в консоли запросов из подсистемы Инструменты разработчика (ИР).

Поиск проблемного запроса

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

Сериализация логики запроса

Любой подзапрос в целях отладки можно перенести в отдельный запрос пакета, создающий временную таблицу, и заменить его текст в исходном месте на выборку из этой временной таблицы. Многие консоли запросов позволяют делать это нажатием одной кнопки и консоль запросов ИР в частности.

Также в отдельные запросы пакета можно переносить и соединяемые выборки из секции “ИЗ” при наличии у них собственных отборов. Но тут уже придется делать все вручную.

Этот прием изменяет текст запроса, что может быть неудобно для внесения исправлений потом в оригинальный запрос. 

Отладка подзапросов

Некоторые консоли запросов позволяют отлаживать подзапросы и части объединения прямо в месте их определения. Консоль запросов ИР в режиме дерева запроса так уже очень давно позволяет делать. Двойным кликом в строке дерева в ней можно выполнить любой подзапрос.

 

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

Отладка неделимого запроса

Если на входе в запрос все таблицы и вложенные запросы передают ожидаемые данные, то дальше встает задача поиска ошибки в значениях параметров или тексте этого запроса. Расхождение между ожидаемым и фактическим результатом запроса состоит из проблемных строк 3-х типов: 

  • строка с неожиданными значениями неключевых полей
  • отсутствующая строка с нужными ключевыми полями
  • лишняя строка

Таким образом дальше нам нужно разбираться с этими проблемными строками.

Для помощи в решении этой задачи в консоли запросов ИР имеется команда “Расшифровать строку результата запроса. Она создает временный запрос в отдельном окне консоли с добавлением в тексте запроса значений всех однозначных базовых выражений для выбранной строки результата.

Рассмотрим работу этой команды на примерах.

Строка с неожиданными значениями неключевых полей

Имеем запрос

ВЫБРАТЬ

    КурсыВалютТ.Валюта КАК Валюта,

    ВЫБОР

        КОГДА МАКСИМУМ(КурсыВалютТ.Курс) > &МаксимальныйКурс

            ТОГДА 1

        ИНАЧЕ 2

    КОНЕЦ КАК КатегорияКурса

ИЗ

    РегистрСведений.КурсыВалют КАК КурсыВалютТ

ГДЕ ИСТИНА

    И КурсыВалютТ.Период > &ДатаНачала

    И КурсыВалютТ.Период < &ДатаКонца

СГРУППИРОВАТЬ ПО

    КурсыВалютТ.Валюта

с параметрами

Имя параметра

Значение

ДатаНачала

01.01.2006 0:00:00

ДатаКонца

01.01.2007 0:00:00

МаксимальныйКурс

34

has been added to your cart:
Оформление заказа