Язык запросов 1С 8.3 для начинающих программистов: условный оператор
Автор уроков и преподаватель школы: Владимир Милькин
Условный оператор в запросе
Давайте напишем запрос, который получает названия и калорийность еды:
ВЫБРАТЬ Наименование, Калорийность ИЗ Справочник.Еда |
А теперь добавим в результат запроса колонку, в которую будем выводить жирность еды по следующим правилам:
- если калорийность меньше 100, то жирность низкая;
- если калорийность от 100 до 200, то жирность нормальная;
- если калорийность больше 200, то жирность высокая.
Как этого можно добиться, ведь в таблице Справочник.Еда нет колонки Жирность?
Оказывается, эту колонку мы можем добавить сами, используя условный оператор внутри запроса:
ВЫБРАТЬ Наименование, Калорийность, ВЫБОР КОГДА Калорийность < 100 ТОГДА "Низкая" КОГДА Калорийность < 200 ТОГДА "Нормальная" ИНАЧЕ "Высокая" КОНЕЦ ИЗ Справочник.Еда |
Давайте внимательнее присмотримся к тексту запроса:
В секции ВЫБРАТЬ идёт перечисление полей выборки: Наименование, Калорийность, а затем вместо третьего поля идёт конструкция условного оператора, результат которого и попадает в третью колонку.
Условия оператора обрабатываются последовательно. Если одно из них оказалось верным, то в качестве результата возвращается соответствующее значение. Если же ни одно из условий не выполнилось, то возвращается значение из секции ИНАЧЕ. Если же ни одно из условий не выполнилось, и в операторе отсутствует секция ИНАЧЕ, то возвращается значение NULL (о нём мы поговорим в одном из следующих уроков).
Поэтому новый запрос вернёт такую таблицу:
Отступление
Обратите внимание, что третья колонка в таблице, которую вернул запрос, называется Поле1. Это имя было сгенерировано системой автоматически, потому что третьей колонке не соответствует никакого реального поля в таблице Справочник.Еда, откуда можно было бы это имя получить.
Но в наших силах дать ей это имя. Для этого сразу после описания поля нужно написать ключевое слово КАК, а после этого через пробел указать само имя. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Такое имя будет называться псевдонимом поля.
ВЫБРАТЬ Наименование, Калорийность, ВЫБОР КОГДА Калорийность < 100 ТОГДА "Низкая" КОГДА Калорийность < 200 ТОГДА "Нормальная" ИНАЧЕ "Высокая" КОНЕЦ КАК Жирность ИЗ Справочник.Еда |
Псевдонимы можно присваивать любым полям, в том числе тем, у которых уже есть имя. Давайте сделаем псевдоним Еда для поля Наименование:
ВЫБРАТЬ
Наименование КАК Еда
ИЗ
Справочник.Еда |
Но вернёмся к условному оператору в запросах.
Более сложные логические выражения в условиях оператора
В логических условиях оператора выбора можно использовать и более сложные выражения.
Пример использования логического оператора ПОДОБНО:
ВЫБРАТЬ Наименование, ВЫБОР КОГДА Наименование ПОДОБНО "Б%" ТОГДА "Начинается на Б" КОГДА Наименование ПОДОБНО "К%" ТОГДА "Начинается на К" ИНАЧЕ "Начинается на другую букву" КОНЕЦ ИЗ Справочник.Еда |
Пример использования функции ПОДСТРОКА:
ВЫБРАТЬ Наименование, ВЫБОР КОГДА ПОДСТРОКА(Наименование, 1, 3) = "Бан" ТОГДА "Это банан" КОГДА ПОДСТРОКА(Наименование, 1, 2) = "Чи" ТОГДА "Это чипсы" ИНАЧЕ "Что-то другое" КОНЕЦ ИЗ Справочник.Еда |
Более сложные результаты условного оператора
Конечно, результатом условного оператора может быть не только константная строка, но и любое другое выражение, допустимое в запросе.
Рассмотрим более общий пример:
ВЫБРАТЬ Наименование, ВЫБОР КОГДА Код = "000000001" ТОГДА "Банан" КОГДА Код = "000000002" ТОГДА Наименование КОГДА Код= "000000003" ТОГДА 555 КОГДА Код = "000000004" ТОГДА Калорийность КОГДА Код = "000000005" ТОГДА ДАТАВРЕМЯ(2014, 01, 01) КОГДА Код = "000000006" ТОГДА ИСТИНА КОГДА Код = "000000007" ТОГДА Ссылка КОНЕЦ ИЗ Справочник.Еда |