[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 

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