[Alimir_BootModal_Login]

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

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

Условный оператор в запросе

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

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

02

А теперь добавим в результат запроса колонку, в которую будем выводить жирность еды по следующим правилам:

  • если калорийность меньше 100, то жирность низкая;
  • если калорийность от 100 до 200, то жирность нормальная;
  • если калорийность больше 200, то жирность высокая.

Как этого можно добиться, ведь в таблице Справочник.Еда нет колонки Жирность?

Оказывается, эту колонку мы можем добавить сами, используя условный оператор внутри запроса:

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

Давайте внимательнее присмотримся к тексту запроса:

03

В секции ВЫБРАТЬ идёт перечисление полей выборки: Наименование, Калорийность, а затем вместо третьего поля идёт конструкция условного оператора, результат которого и попадает в третью колонку.

Условия оператора обрабатываются последовательно. Если одно из них оказалось верным, то в качестве результата возвращается соответствующее значение. Если же ни одно из условий не выполнилось, то возвращается значение из секции ИНАЧЕ. Если же ни одно из условий не выполнилось, и в операторе отсутствует секция ИНАЧЕ, то возвращается значение NULL (о нём мы поговорим в одном из следующих уроков).

Поэтому новый запрос вернёт такую таблицу:

04

Отступление

Обратите внимание, что третья колонка в таблице, которую вернул запрос, называется Поле1. Это имя было сгенерировано системой автоматически, потому что третьей колонке не соответствует никакого реального поля в таблице Справочник.Еда, откуда можно было бы это имя получить.

Но в наших силах дать ей это имя. Для этого сразу после описания поля нужно написать ключевое слово КАК, а после этого через пробел указать само имя. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Такое имя будет называться псевдонимом поля.

ВЫБРАТЬ
    Наименование,
    Калорийность,
    ВЫБОР
        КОГДА Калорийность < 100 ТОГДА
            "Низкая"
        КОГДА Калорийность < 200 ТОГДА
            "Нормальная"
        ИНАЧЕ
            "Высокая"
    КОНЕЦ КАК Жирность
ИЗ
    Справочник.Еда

05

Псевдонимы можно присваивать любым полям, в том числе тем, у которых уже есть имя. Давайте сделаем псевдоним Еда для поля Наименование:

ВЫБРАТЬ
    Наименование КАК Еда
ИЗ
    Справочник.Еда

06

Но вернёмся к условному оператору в запросах.

Более сложные логические выражения в условиях оператора

В логических условиях оператора выбора можно использовать и более сложные выражения.

Пример использования логического оператора ПОДОБНО:

ВЫБРАТЬ
    Наименование,
    ВЫБОР
        КОГДА Наименование ПОДОБНО "Б%" ТОГДА
            "Начинается на Б"
        КОГДА Наименование ПОДОБНО "К%" ТОГДА
            "Начинается на К"
        ИНАЧЕ
            "Начинается на другую букву"
    КОНЕЦ
ИЗ
    Справочник.Еда

07

Пример использования функции ПОДСТРОКА:

 
ВЫБРАТЬ
    Наименование,
    ВЫБОР
        КОГДА ПОДСТРОКА(Наименование, 1, 3) = "Бан" ТОГДА
            "Это банан"
        КОГДА ПОДСТРОКА(Наименование, 1, 2) = "Чи" ТОГДА
            "Это чипсы"
        ИНАЧЕ
            "Что-то другое"
    КОНЕЦ
ИЗ
    Справочник.Еда

08

Более сложные результаты условного оператора

Конечно, результатом условного оператора может быть не только константная строка, но и любое другое выражение, допустимое в запросе.

Рассмотрим более общий пример:

ВЫБРАТЬ
    Наименование,
    ВЫБОР
    КОГДА Код = "000000001" ТОГДА
        "Банан"
    КОГДА Код = "000000002" ТОГДА
        Наименование
    КОГДА Код= "000000003" ТОГДА
        555
    КОГДА Код = "000000004" ТОГДА
        Калорийность
    КОГДА Код = "000000005" ТОГДА
        ДАТАВРЕМЯ(2014, 01, 01)
    КОГДА Код = "000000006" ТОГДА
        ИСТИНА
    КОГДА Код = "000000007" ТОГДА
        Ссылка
    КОНЕЦ
ИЗ
    Справочник.Еда

09

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

Начать тест

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

а) Напишите запрос, который получает все заказы клиентов и выводит в какой день недели они были сделаны:

10  

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

Для учеников

Уровень сложности уроков идёт снизу вверх. Поэтому старайтесь заниматься последовательно, ничего не пропуская и не откладывая на потом.

Обязательно выполняйте все тесты и домашние задания, старайтесь улучшить свои результаты. Сверяйтесь с эталонными решениями только после самостоятельного выполнения задач.

На вопросы учеников — отвечаю по почте,  но прежде загляните в ЧАВО (ссылка) .

С уважением, Владимир Милькин