Часто при разработке или анализе типовых отчетов на базе системы компоновки данных (СКД) возникает необходимость протестировать запрос отдельно в консоли. Однако при копировании кода мы сталкиваемся с тем, что запрос, успешно работающий внутри отчета, в консоли выдает ошибку: Неверные параметры. Давайте разберемся, почему это происходит и как заставить такой запрос работать.
Основная причина заключается в разнице между тем, как обрабатывает параметры СКД и как их воспринимает обычная КонсольЗапросов. В СКД параметры часто имеют составные типы или специфические настройки (например, СтандартныйПериод), которые автоматически преобразуются системой в нужный вид непосредственно перед выполнением запроса.
Когда мы переносим текст запроса в консоль, мы теряем эту «магию» автоматического заполнения. Если запрос содержит ссылки на параметры, которые не были переданы, или если типы данных, переданные в консоль, не соответствуют тем, что ожидает запрос, система выдает сообщение об ошибке. Нередко интерпретатор 1С указывает на функцию (например, НАЧАЛОПЕРИОДА), хотя на самом деле проблема кроется в «битом» параметре, который передается в эту функцию.
Чтобы успешно выполнить сложный запрос в консоли, выполним следующие шаги:
Неопределено или имеют базовый тип (например, Строка или Число). Вам необходимо вручную установить тип для каждого параметра в соответствии с тем, что вы увидели в СКД.ОкончаниеИнтервалаПредставленияПериоды. Даже если вам кажется, что параметр не используется, запрос может обращаться к нему в условии соединения. Если консоль видит такой параметр пустым, она не может построить дерево запроса.Если в вашем запросе есть параметры даты, убедитесь, что они имеют тип Дата. Часто разработчики забывают, что дополнительные параметры, добавленные для нужд отображения (например, для корректной работы РАЗНОСТЬДАТ), также требуют явного указания типа.
Посмотрим на пример структуры условий, которые часто вызывают ошибки:
// ВЫБОР КОГДА &ОкончаниеПериода = КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(1, 1, 1), МЕСЯЦ)
// ТОГДА &ОкончаниеИнтервалаПредставленияПериоды
// ИНАЧЕ &ОкончаниеПериода КОНЕЦ
В этом блоке кода консоль не знает, что такое &ОкончаниеИнтервалаПредставленияПериоды. Если вы просто оставите его пустым, выполнение завершится с ошибкой. Необходимо зайти в настройки параметров консоли, найти этот параметр и принудительно выбрать тип Дата (или Дата и время).
Если ошибка сохраняется, воспользуйтесь следующими рекомендациями:
Запрос.Выполнить(), поставьте точку останова перед выполнением и посмотрите в отладчике, что именно лежит в Запрос.Параметры.ЛЕВОЕ СОЕДИНЕНИЕ ВТЦифры), чтобы локализовать, какой именно блок параметров вызывает сбой.Следуя этим советам, вы сможете успешно переносить даже самые сложные запросы из типовых конфигураций в консоль для глубокого анализа и отладки.