Запросы 1С СКД. Возможности и ограничения
При использовании подсистемы СКД первое, с чем вы столкнетесь это необходимость написания запроса. Конечно, система компоновки данных умеет строить отчеты без использования запросов, например с помощью набора данных объект вы можете сделать отчет из таблицы значений. Но 90% отчетов, которые вы будете создавать с помощью СКД, потребуют написания запроса. Поэтому важно знать об особенностях работы с запросами в СКД, ограничениях, способах и инструментах поиска ошибок.
Если у вас хоть раз возникал вопрос: почему запрос в консоли запросов выдает правильные данные, а в вашем отчете на СКД нет, то в этой статье вы найдете ответ.
Возможности и ограничения языка запросов при использовании в СКД
В 1С СКД можно использовать практически все возможности языка запросов 1С:
- Пакетные запросы. Временные таблицы
- Объединения, вложенные запросы, группировка, сортировка, опции (ПЕРВЫЕ, РАЗЛИЧНЫЕ)
- Параметры в запросах. При этом параметры, определенные в запросе автоматически, заполняются в СКД на закладке «Параметры»
- Обращение к внешним источникам данных. С помощью СКД вы можете связывать разные внешние источники данных, используя несколько наборов данных, что невозможно сделать в одном запросе. Правда, при этом нужно учитывать особенности использования наборов данных в СКД
В 1С СКД недоступны:
- Секция ИТОГИ. Использование данной секции в запросе добавляет в стандартную «плоскую» выборку дополнительные итоговые записи. В СКД такие записи добавляются самой подсистемой по своим правилам, поэтому данная секция для СКД неактуальна
- Предложение «АВТОУПОРЯДОЧИВАНИЕ». Обычно эта опция языка запросов редко используется, а в отчетах она практически не имеет смысла
В 1С СКД дополнительно с помощью расширения языка запросов 1С для СКД имеется возможность:
- Подключать характеристики объектов (например, с использованием механизма плана видов характеристик). В этом случае характеристики объектов становятся как бы дополнительными полями объектов, для которых они подключены и могут использоваться в отчете в выбранных полях, условиях, группировках и т.д.
- С помощью специальных конструкций можно указывать СКД, какие поля в запросе будут доступны для выборки, для использования в условиях, какие таблицы или параметры являются необязательными в запросе.
О дополнительных возможностях мы поговорим в следующем разделе.
Расширение языка запросов 1С для СКД
В предыдущем разделе мы определили, что язык запросов, используемый в СКД, имеет больше возможностей, чем просто запросы, выполняемые через объект платформы «Запрос». К сожалению, упорядоченной документации по этому разделу в 1С нет. Крупицы информации разбросаны: по справке к платформе, ИТС, различным неофициальным интернет ресурсам. Я постараюсь коротко объяснить основную суть данного дополнения к языку запросов и дам ссылки на источники информации, где вы можете более подробно изучить эту тему.
Итак.
Лучше всего описан в официальной документации механизм использования (подключения) характеристик объектов конфигурации. Правда синтаксис в этой статье отличается от текущего, но смысл описанного от этого не страдает. Коротко этот механизм также описан в справке к платформе (с актуальным синтаксисом):
Как известно, во многих типовых конфигурациях в 1С используется механизм дополнительных реквизитов, когда к объектам конфигурации пользователь может самостоятельно, без изменения конфигурации, добавить дополнительные реквизиты. Чтобы предоставить пользователю возможность работы с этими реквизитам в отчетах, построенных на СКД, используется механизм подключения характеристик. С помощью специального оператора «ХАРАКТЕРИСТИКИ» программист может привязать характеристики к выбранным объектам отчета. При этом необходимо указать тип объекта, к которому производится подключение характеристик, список дополнительных свойств для данного объекта, таблицу, в которой хранятся значения этих свойств.
Например, так:
Запрос:
В отчете подключенные характеристики в режиме предприятия после этого выглядят как обычные реквизиты и могут использоваться в выбранных полях, условиях, группировках и т.д.:
Используя небольшую хитрость, которую мы показывали в нашем курсе по СКД можно использовать эти реквизиты и в режиме конфигуратора:
Как вы заметили, все элементы расширения языка запросов для СКД заключены в фигурные скобки «{}», чтобы отличать их от основных элементов запроса.
Кроме подключения характеристик расширение языка запросов используется для:
- Управления автоматическим заполнением списка полей набора данных запрос
- В том числе для управления заполнением доступности поля (группа полей «Ограничение поля» и «Ограничение реквизитов»)
- Управления необязательными таблицами, необязательными условиями, необязательными параметрами
- Управление местом применения отбора (в параметрах виртуальных таблиц, в секции «ГДЕ», в секции «ИМЕЮЩИЕ», в конкретном запросе пакета)
С описанием работы этой части расширения в официальной документации совсем плохо. Немного информации есть в справке к платформе. Про работу с параметрами хорошо описано на диске ИТС.
Все в одном месте хорошо описано в этой статье.
Важно также понимать, что элементы расширения языка запросов являются управляющими конструкциями. Они не выполняются платформой непосредственно – с их помощью СКД вносит в окончательный запрос некоторые модификации (добавляет или исключает какие-то таблицы, условия) в зависимости от контекста выполнения отчета. Об этом мы поговорим в следующих разделах статьи.
Серия статей по СКД
Следующая статья..
Автор курсов образовательного проекта Profession Store. Павел Шемякин