Работа с запросами в 1С СКД. Примеры использования расширения языка запросов СКД
Все тонкости использования расширения языка запросов 1С для СКД вы можете изучить по ссылкам, которые приведены в предыдущей статье. Здесь мы рассмотрим конкретные кейсы применения данного расширения.
Необязательное условие
Обычно необязательными делают условия с параметром. Самый часто встречающийся пример это выборка документов по периоду. Отчет при этом должен выводить документы при любой комбинации заданных дат периода – все документы, после даты начала, до даты конца, за заданный период. В этом случае запрос набора данных будет выглядеть следующим образом:
ВЫБРАТЬ
РасходнаяНакладная.Номер,
РасходнаяНакладная.Дата,
РасходнаяНакладная.СуммаПоДокументу
ИЗ
Документ.РасходнаяНакладная КАК РасходнаяНакладная
{ГДЕ
(РасходнаяНакладная.Дата >= &НачалоПериода),
(РасходнаяНакладная.Дата <= &КонецПериода)}
Если мы не задаем ни один параметр, выполняется запрос.
Если мы задаем, например, дату начала, то выполняется другой запрос
Необязательная таблица
Если при использовании вашего отчета, подразумевается, что пользователь может его настраивать по своему усмотрению – добавлять или менять группировки, состав выбранных полей, отборы и тому подобное, то иногда имеет смысл делать некоторые таблицы необязательными для выполнения на СУБД.
И система компоновки данных (СКД) позволяет это сделать. Например, в прайс-листе можно включать колонку остатка или не включать. Если пользователь не включает колонку с остатком в отчет, то нет смысла делать запрос к регистру накопления, в котором хранится этот остаток, и тогда отчет будет выполняться быстрее. Этот текст запроса уже вы видели. Посмотрим теперь, как указывается необязательная таблица (в данном случае таблица регистра накопления Остатки)
Если в настройках отчета пользователь отключит вывод остатка, то запрос, выполняемый платформой, будет выглядеть следующим образом
Как видно обращения к таблице регистра накопления нет, зато в запрос добавлено часть, отвечающая за получение характеристик номенклатуры. Потому что в настройках пользователь выбрал вывод производителя (дополнительный реквизит номенклатуры)
Необязательный параметр используется примерно также как и необязательное условие. Обычно так используются параметры, используемые в виртуальных таблицах регистров (накопления, сведений и т.п.). Общий синтаксис в этом случае будет такой:
При этом в параметры автоматически добавляется 2 параметра – «НаДату» с ограничением доступности и параметр «НаДатуКомпоновка» доступный пользователю. Смысл такой конструкции в следующем – если значение параметра «НаДатуКомпоновка» используется, то в запрос передается оно, если не используется, то в запрос передается значение параметра «НаДату», в котором можно, например, в выражении указать какое-то значение по умолчанию.
Если в запросе не указать необязательный параметр «НаДатуКомпоновка», то СКД автоматически добавит (для регистра сведений) такой параметр с именем по умолчанию – «Период». Обычно из-за этого возникает путаница, когда на форму для пользователя выводят значение параметра «НаДату» и если пользователь его не указал, возникает ошибка, потому что ни один из параметров для таблицы не заполнен.
Если вам не нужен параметр по умолчанию («НаДату»), то можно его не указывать и тогда в параметрах остается только параметр «НаДатуКомпоновка», который пользователь может не указывать и в этом случае в запрос передается в качестве значения по умолчанию пустая дата.
Управление местом применения отбора и доступностью
Иногда при разработке отчета на системе компоновки данных (СКД) возникает необходимость в тонкой настройке места применения отбора.
Рассмотрим на таком (пусть искусственном) примере. Допустим нам в отчете нужно вывести все расходные накладные и все приходные накладные, связанные с номенклатурой из расходных накладных. Напишем такой запрос
Предположим, что пользователь должен иметь возможность отбора по покупателю (контрагенту расходной накладной). Для этого мы добавим отбор
Самое главное здесь отключить опцию «Автозаполнение». Только в этом случае система понимает, что отбор по контрагенту нам нужен только в последнем запросе пакета и отчет работает, так как нам нужно
Важно также заметить как заполнились ограничения доступности полей
И в режиме предприятия соответственно для отбора доступны только такие поля
В следующей статье разберем каким образом применять подмену запросов в языке выражений.