[Alimir_BootModal_Login]

Язык запросов 1С 8.3 для начинающих программистов: условия

Автор уроков и преподаватель школы: Владимир Милькин

Условия в запросах

Давайте напишем запрос, который запрашивает из таблицы Справочник.Еда наименование еды, её цвет, вкус и калорийность:

ВЫБРАТЬ
    Наименование,
    Цвет,
    Вкус,
    Калорийность
ИЗ
    Справочник.Еда

02

У вас другой порядок строк в результате?

Секция ГДЕ

А теперь давайте сделаем, чтобы вернулась еда только жёлтого цвета. Делается это при помощи секции ГДЕ в которой необходимо задать условие отбора:

03

В нашем случае таким условием будет равенство реквизита Цвет (а вернее его свойства Наименование) строковому значению "Жёлтый" ( через ё ):

ВЫБРАТЬ
    Наименование,
    Цвет,
    Вкус,
    Калорийность
ИЗ
    Справочник.Еда
ГДЕ
    Цвет.Наименование = "Жёлтый"

В результате запрос вернёт нам только строки с едой, у которой реквизит Цвет установлен в Жёлтый:

01

У вас другой порядок строк в результате?

Таким образом, секция ГДЕ позволяет задать условия отбора данных из таблиц. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Если задана секция ГДЕ, то в запросе обрабатываются только те строки таблиц, для которых условие секции оказывается истинным.

Обратите внимание, что поля, которые участвуют в условии (в нашем случае поле Цвет) не обязаны входить в список выбираемых полей:

ВЫБРАТЬ
    Наименование,
    Вкус,
    Калорийность
ИЗ
    Справочник.Еда
ГДЕ
    Цвет.Наименование = "Жёлтый"

В данном случае реквизит Цвет участвует в условии (секция ГДЕ), но не участвует в списке выбираемых полей (секция ВЫБРАТЬ):

04

У вас другой порядок строк в результате?

Условие отбора может определяться и как простое логическое выражение, и как более сложное, в котором простые логические выражения соединяются между собой логическими операторами И, ИЛИ, НЕ.

Для примера, давайте выберем еду, у которой цвет белый или калорийность больше 100:

ВЫБРАТЬ
    Наименование,
    Цвет,
    Калорийность
ИЗ
    Справочник.Еда
ГДЕ
    Цвет.Наименование = "Белый" ИЛИ
    Калорийность > 100

05

У вас другой порядок строк в результате?

Секция ИМЕЮЩИЕ

Если в запросе используется группировка (см. предыдущий урок) и мы хотим наложить условие на результаты группировки, секция ГДЕ не подойдёт. Вместо неё нужно использовать секцию ИМЕЮЩИЕ.

Давайте подсчитаем суммарную калорийность еды по цветам. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Для этого используем группировку по цвету и агрегатную функцию СУММА по калорийности:

ВЫБРАТЬ
    Цвет,
    СУММА(Калорийность)
ИЗ
    Справочник.Еда
СГРУППИРОВАТЬ ПО
    Цвет

07

У вас другой порядок строк в результате?

А теперь наложим условие на результат группировки так, чтобы остались только цвета с суммарной калорийностью больше 100:

06

ВЫБРАТЬ
    Цвет,
    СУММА(Калорийность)
ИЗ
    Справочник.Еда
СГРУППИРОВАТЬ ПО
    Цвет
ИМЕЮЩИЕ
    СУММА(Калорийность)	> 100

08

У вас другой порядок строк в результате?

Таким образом, секция ИМЕЮЩИЕ позволяет накладывать условия на значения агрегатных функций при группировке.

Обратите внимание, что агрегатные функции, которые участвуют в условии (в нашем случае поле СУММА(Калорийность)) не обязаны входить в список выборки:

ВЫБРАТЬ
    Цвет
ИЗ
    Справочник.Еда
СГРУППИРОВАТЬ ПО
    Цвет
ИМЕЮЩИЕ
    СУММА(Калорийность) > 100

В данном случае агрегатная функция СУММА(Калорийность)  участвует в условии (секция ИМЕЮЩИЕ), но не участвует в списке выборки (секция ВЫБРАТЬ):

10

У вас другой порядок строк в результате?

Условие отбора секции ИМЕЮЩИЕ может также определяться и как простое логическое выражение, и как более сложное, в котором простые логические выражения соединяются между собой логическими операторами И, ИЛИ, НЕ.

Для примера, давайте выберем цвета, имеющие суммарную калорийность больше 200 И меньше 300:

ВЫБРАТЬ
    Цвет,
    СУММА(Калорийность)
ИЗ
    Справочник.Еда
СГРУППИРОВАТЬ ПО
    Цвет
ИМЕЮЩИЕ
    СУММА(Калорийность) > 200 И
    СУММА(Калорийность) < 300

09

У вас другой порядок строк в результате?

Пройдите тест

Начать тест

Домашнее задание

а) Напишите запрос, который получает из таблицы Справочник.Вкусы все вкусы, кроме солёного:

11

У вас другой порядок строк в результате?

Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся

б) Напишите запрос, который получает из таблицы Справочник.Еда всю еду, которая сладкая или кислая по вкусу:

12

У вас другой порядок строк в результате?

Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся