[Alimir_BootModal_Login]

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

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

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

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

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

02

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

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

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

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

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

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

03

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

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

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

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  

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

Для учеников

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

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

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

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