«ВЫБОР КОГДА … ТОГДА …» в запросе 1С 8.3

При работе с языком запросов 1С, иногда возникает ситуация, когда требуется проверить выражение, является ли оно ЛОЖЬ или Истина.  В случае положительного результата присвоить ему значение выражения для замены.

Конструкция оператора ВЫБОР

ВЫБОР

КОГДА <ПроверяемоеВыражение> ТОГДА <ВыражениеЗамены_1>

ИНАЧЕ < ВыражениеЗамены_2>

КОНЕЦ

Несколько примеров

Пример №1

Есть таблица «Таблица1», в которой перечислены все дни с понедельника по воскресенье.

Таблица1:

ДеньНедели
Понедельник
Вторник
Среда
Четверг
Пятница
Суббота
Воскресенье

Необходимо, для строк со значениями «Суббота» и «Воскресенье» в отдельном поле указать, что это выходной.  Во всех остальных случаях, рабочий день. Реализуем поставленную задачу в виде запроса к исходной таблице.

Текст запроса может выглядеть так:

ВЫБРАТЬ

ДеньНедели,

ВЫБОР

КОГДА ДеньНедели =»Суббота »

ИЛИ ДеньНедели = «Воскресенье »

ТОГДА «Выходной»

ИНАЧЕ «Рабочий день»

КОНЕЦ КАК ВидДня

ИЗ

Таблица1. ДеньНедели КАК ДеньНедели

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по ссылке.
Будем рады помочь Вам!

Результат запроса

ДеньНедели ВидДня
Понедельник Рабочий день
Вторник Рабочий день
Среда Рабочий день
Четверг Рабочий день
Пятница Рабочий день
Суббота Выходной
Воскресенье Выходной

В данном примере, используя оператор ВЫБОР, мы перебираем все строки из «Таблица1». Параллельно проверяя каждую на соответствие условию.

КОГДА ДеньНедели =»Суббота »

ИЛИ ДеньНедели = «Воскресенье «

Если сработает одно из них, то в колонку «ВидДня» произойдёт запись выражения замены, расположенного после ключевого слова ТОГДА. Во всех остальных случаях будет записано выражение расположенное после слова ИНАЧЕ.  Причём если убрать секцию ИНАЧЕ, программа примет такую конструкцию и не выдаст ошибку. Однако если проверяемое выражение вернёт ЛОЖЬ, тогда строки, в которые должно было подставится выражение замены, получать значение NULL. Рассмотрим подробнее подобную ситуацию.

Пример №2

Возьмём уже известную нам таблицу из первого примера.

Таблица1

ДеньНедели
Понедельник
Вторник
Среда
Четверг
Пятница
Суббота
Воскресенье

Необходимо вывести в отдельную таблицу количество выходных дней. Причём информацию о количестве рабочих дней, будем считать излишней. Для наглядности решим задачу в несколько этапов.  За основу возьмём запрос из примера №1. Уберём из него секцию ИНАЧЕ, а поле для вывода оставим только то, которое получаем конструкцией оператора ВЫБОР.

Текст запроса:

ВЫБРАТЬ

ВЫБОР

КОГДА ДеньНедели =»Суббота »

ИЛИ ДеньНедели = «Воскресенье »

ТОГДА «Выходной»

КОНЕЦ КАК ВидДня

ИЗ

Таблица1. ДеньНедели КАК ДеньНедели

Результат запроса:

ВидДня
<NULL>
<NULL>
<NULL>
<NULL>
<NULL>
Выходной
Выходной

Из результата запроса видно, что все строки, не вошедшие в условие после ключевого слова КОГДА получили <NULL>.  Как известно <NULL> это отсутствие значения. Таким образом, нам остаётся только сгруппировать полученную таблицу. Применив к группировке агрегатную функцию КОЛИЧЕСТВО ( <Выражение>).

Текст запроса может выглядеть так:

ВЫБРАТЬ

КОЛИЧЕСТВО(ВЫБОР

КОГДА ДеньНедели =»Суббота »

ИЛИ ДеньНедели = «Воскресенье »

ТОГДА «Выходной»

КОНЕЦ) КАК ВидДня

ИЗ

Таблица1. ДеньНедели КАК ДеньНедели

Результат запроса

КоличествоВыходныхДней
2

В заключении хочется сказать, что оператор ВЫБОР хоть и не часто находит свое применение при написании запросов в 1С, но в некоторых ситуациях является незаменимым инструментом для разработчика.

Поделиться

Оцените статью

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
Загрузка...

Подпишитесь на наш YouTube канал

YouTube

Подписаться

Комментировать