- •8.1. Назначение. Основные объекты , предназначенные для организации запросов
- •Выполнение запроса
- •8.2. Язык запросов
- •Поля из вложенных таблиц
- •Псевдонимы источников как/as
- •Запросы к табличным частям
- •Вложенные запросы в списке источников
- •Конструкция соединение...По/join...On
- •Левое внешнее соединение
- •Правое внешнее соединение
- •Полное внешнее соединение
- •Логические операторы и, или, не
- •Параметры в языке запросов
- •Проверка вхождения значения в список (в/in)
- •Проверка ссылочного значения (ссылка/ref)
- •Проверка пустых значений (есть null / is null)
- •Сравнение строк (подобно / like)
- •Упорядочивание по иерархии
- •Упорядочивание во вложенных таблицах
- •Автоупорядочивание /autoorder
- •Агрегатные функции в запросе
- •Общие итоги
- •Итоги по группировкам
- •Итоги по иерархии
- •Несколько итогов в запросе
- •Встроенные функции языка запросов
- •Операции выбора в языке запросов (выбор / case)
- •Приведение типов в языке запросов
- •Литералы и параметры в языке запросов
- •8.4. Обработка результата запроса
- •8.5. Выборка из результата запроса
- •Линейный обход
- •Иерархический обход
- •Обход по группировкам
- •Другие полезные методы
- •8.6. Выгрузка результата запроса
- •8.7. Запросы к регистрам сведений
- •Основная таблица регистра сведений
- •8.8. Запросы к регистрам накопления
- •Основная таблица регистра накопления
- •Сводные таблицы
Параметры в языке запросов
Обычно требуется, чтобы параметры условий пользователь мог указать самостоятельно в каком-либо диалоге. Для этого запрос конструируется с использованием параметров.
Обратите внимание, что в следующем запросе параметр МинЦена предваряется знаком «&».
ВЫБРАТЬ Наименование, ЗакупочнаяЦена
ИЗ Справочник.Номенклатура
ГДЕ ЗакупочнаяЦена >= &МинЦена
Общая схема выполнения запроса с параметрами выглядит следующим образом:
//создание объекта Запрос с текстом запроса
Запрос = Новый Запрос("Выбрать Наименование, Цена
|ИЗ Справочник.Номенклатура
|ГДЕ Цена >= &МинЦена");
//передача параметров в запрос
Запрос.УстановитьПараметр("МинЦена",1000);
//выполнение запроса с установленными параметрами
Результат = Запрос.Выполнить();
Ключевое слово МЕЖДУ/BETWEEN
В языке запросов есть вспомогательное ключевое слово МЕЖДУ для задания интервалов. Например, если параметр МинЦена равен 1000, а МаксЦена - 1500, тогда следующий запрос выберет товары с ценой из указанного интервала:
ВЫБРАТЬ Наименование,
ЗакупочнаяЦена КАК Цена
ИЗ Справочник.Номенклатура
ГДЕ ЗакупочнаяЦена МЕЖДУ &МинЦена И &МаксЦена
Наименование |
Цена |
Ноутбук Rover Computers Explorer |
1 326 |
Ноутбук Rover Computers Navigator KT7 |
1 118 |
Сист. блок IBM NetVista A22p |
1 111 |
Сист. блок IBM NetVista M41 |
1 222 |
Ключевое слово МЕЖДУ введено для повышения наглядности при задании интервалов и всегда может быть заменено неравенствами. Следующий запрос полностью эквивалентен предыдущему:
ВЫБРАТЬ Наименование, ЗакупочнаяЦена
ИЗ Справочник.Номенклатура
ГДЕ ЗакупочнаяЦена >= МинЦена И ЗакупочнаяЦена <= МаксЦена
Проверка вхождения значения в список (в/in)
В условии можно проверять значения на вхождение в некоторый список или на принадлежность группе справочника (или элементу, если иерархический справочник состоит из одних элементов). В случае иерархического справочника можно применять конструкцию В ИЕРАРХИИ для проверки вхождения в группу независимо от уровня иерархии.
Следующие запросы демонстрируют варианты использования ключевого слова В:
//выбираем товары из заданного списка
ВЫБРАТЬ Наименование, ЗакупочнаяЦена
ИЗ Справочник.Номенклатура
ГДЕ Ссылка В (&СписокВыбранныхТоваров)
//выбираем товары, принадлежащие определенной группе
//независимо от уровня, на котором они находятся
ВЫБРАТЬ Наименование, ЗакупочнаяЦена
ИЗ Справочник.Номенклатура
ГДЕ Ссылка В ИЕРАРХИИ (&ВыбраннаяГруппа)
В первом запросе параметр СписокВыбранныхТоваров является списком значений. В запросе будут выбраны только те товары, которые представлены в данном списке.
Во втором запросе параметр ВыбраннаяГруппа является группой иерархического справочника Номенклатура. В результат запроса
будут включены товары, принадлежащие к заданной группе, независимо от того, на каком уровне иерархии они находятся.
В качестве списка значений, можно указывать и другой запрос, тогда сначала будет выполнен вложенный запрос, а затем основной. Например, следующий составной запрос выбирает товары, по которым есть хотя бы одна расходная накладная:
ВЫБРАТЬ Спр . Наименование, Спр.ЗакупочнаяЦена
ИЗ Справочник. Номенклатура КАК Спр
ГДЕ Спр.Ссылка В (ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура
ИЗ Документ.РасходнаяНакладная.Состав)
Заметим, что в данном случае это было искусственное усложнение запроса. Того же результата можно добиться проще, используя разыменование полей:
ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура,
Номенклатура.ЗакупочнаяЦена ИЗ
Документ. РасходнаяНакладная.Состав
Это стало возможно, потому что разыменование полей заставляет систему 1C:Предприятие 8 производить неявное соединение таблиц. Рекомендуется всегда пользоваться разыменованием полей там, где это возможно, и не усложнять запросы лишними конструкциями.
