Многоуровневая конструкция КОГДА ТОГДА в запросе
Доброй ночи! То ли не понимаю, то ли пишу не так синтаксис. Есть 3 адреса у физ лица, (проживания,прописка, информирование) Мне нужно выбрать первый который заполнен из трех в этом же порядке. Отдельными ВТ получаю все 3 значения далее пытаюсь так
ВЫБОР
КОГДА ФИОиАдрес1.Адрес ЕСТЬ NULL
ТОГДА ФИОиАдрес2.Адрес
КОГДА ФИОиАдрес2.Адрес ЕСТЬ NULL
ТОГДА ФИОиАдрес3.Адрес
ИНАЧЕ ФИОиАдрес1.Адрес
КОНЕЦ
если заполены 1ый и 2ой то все ок, а если они пусты но заполнен 3ий — все равно null получаю. Что не так делаю?
ВЫБОР
КОГДА ТОГДА
КОГДА ТОГДА
ИНАЧЕ
КОНЕЦ
Конструкция проходит два условия, а не одно
ВЫБОР
КОГДА НЕ ФИОиАдрес1.Адрес ЕСТЬ NULL
ТОГДА ФИОиАдрес1.Адрес
КОГДА НЕ ФИОиАдрес2.Адрес ЕСТЬ NULL
ТОГДА ФИОиАдрес2.Адрес
ИНАЧЕ ФИОиАдрес3.Адрес
КОНЕЦ
«ВЫБОР КОГДА … ТОГДА …» в запросе 1С 8.3
При работе с языком запросов 1С, иногда возникает ситуация, когда требуется проверить выражение, является ли оно ЛОЖЬ или Истина. В случае положительного результата присвоить ему значение выражения для замены.
Конструкция оператора ВЫБОР
ВЫБОР
КОГДА <ПроверяемоеВыражение> ТОГДА <ВыражениеЗамены_1>
ИНАЧЕ < ВыражениеЗамены_2>
КОНЕЦ
Несколько примеров
Пример №1
Есть таблица «Таблица1», в которой перечислены все дни с понедельника по воскресенье.
| ДеньНедели |
| Понедельник |
| Вторник |
| Среда |
| Четверг |
| Пятница |
| Суббота |
| Воскресенье |
Необходимо, для строк со значениями «Суббота» и «Воскресенье» в отдельном поле указать, что это выходной. Во всех остальных случаях, рабочий день. Реализуем поставленную задачу в виде запроса к исходной таблице.
Текст запроса может выглядеть так:
ВЫБРАТЬ
ДеньНедели,
ВЫБОР
КОГДА ДеньНедели =»Суббота »
ИЛИ ДеньНедели = «Воскресенье »
ТОГДА «Выходной»
ИНАЧЕ «Рабочий день»
КОНЕЦ КАК ВидДня
ИЗ
Таблица1. ДеньНедели КАК ДеньНедели
| ДеньНедели | ВидДня |
| Понедельник | Рабочий день |
| Вторник | Рабочий день |
| Среда | Рабочий день |
| Четверг | Рабочий день |
| Пятница | Рабочий день |
| Суббота | Выходной |
| Воскресенье | Выходной |
В данном примере, используя оператор ВЫБОР, мы перебираем все строки из «Таблица1». Параллельно проверяя каждую на соответствие условию.
Если сработает одно из них, то в колонку «ВидДня» произойдёт запись выражения замены, расположенного после ключевого слова ТОГДА. Во всех остальных случаях будет записано выражение расположенное после слова ИНАЧЕ. Причём если убрать секцию ИНАЧЕ, программа примет такую конструкцию и не выдаст ошибку. Однако если проверяемое выражение вернёт ЛОЖЬ, тогда строки, в которые должно было подставится выражение замены, получать значение NULL. Рассмотрим подробнее подобную ситуацию.
Пример №2
Возьмём уже известную нам таблицу из первого примера.
| ДеньНедели |
| Понедельник |
| Вторник |
| Среда |
| Четверг |
| Пятница |
| Суббота |
| Воскресенье |
Получите понятные самоучители по 1С бесплатно:
Необходимо вывести в отдельную таблицу количество выходных дней. Причём информацию о количестве рабочих дней, будем считать излишней. Для наглядности решим задачу в несколько этапов. За основу возьмём запрос из примера №1. Уберём из него секцию ИНАЧЕ, а поле для вывода оставим только то, которое получаем конструкцией оператора ВЫБОР.
ВЫБРАТЬ
ВЫБОР
КОГДА ДеньНедели =»Суббота »
ИЛИ ДеньНедели = «Воскресенье »
ТОГДА «Выходной»
КОНЕЦ КАК ВидДня
ИЗ
Таблица1. ДеньНедели КАК ДеньНедели
| ВидДня |
| <NULL> |
| <NULL> |
| <NULL> |
| <NULL> |
| <NULL> |
| Выходной |
| Выходной |
Из результата запроса видно, что все строки, не вошедшие в условие после ключевого слова КОГДА получили <NULL>. Как известно <NULL> это отсутствие значения. Таким образом, нам остаётся только сгруппировать полученную таблицу. Применив к группировке агрегатную функцию КОЛИЧЕСТВО ( <Выражение>).
Текст запроса может выглядеть так:
ВЫБРАТЬ
КОЛИЧЕСТВО(ВЫБОР
КОГДА ДеньНедели =»Суббота »
ИЛИ ДеньНедели = «Воскресенье »
ТОГДА «Выходной»
КОНЕЦ) КАК ВидДня
ИЗ
Таблица1. ДеньНедели КАК ДеньНедели
| КоличествоВыходныхДней |
| 2 |
В заключении хочется сказать, что оператор ВЫБОР хоть и не часто находит свое применение при написании запросов в 1С, но в некоторых ситуациях является незаменимым инструментом для разработчика.
1с запрос выбор когда несколько условий
Войдите как ученик, чтобы получить доступ к материалам школы
Язык запросов 1С 8.3 для начинающих программистов: условный оператор
Автор уроков и преподаватель школы: Владимир Милькин
Условный оператор в запросе
Давайте напишем запрос, который получает названия и калорийность еды:
А теперь добавим в результат запроса колонку, в которую будем выводить жирность еды по следующим правилам:
- если калорийность меньше 100, то жирность низкая;
- если калорийность от 100 до 200, то жирность нормальная;
- если калорийность больше 200, то жирность высокая.
Как этого можно добиться, ведь в таблице Справочник.Еда нет колонки Жирность?
Оказывается, эту колонку мы можем добавить сами, используя условный оператор внутри запроса:
Давайте внимательнее присмотримся к тексту запроса:

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

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

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

Но вернёмся к условному оператору в запросах.
Более сложные логические выражения в условиях оператора
В логических условиях оператора выбора можно использовать и более сложные выражения.
Пример использования логического оператора ПОДОБНО:

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

Более сложные результаты условного оператора
Конечно, результатом условного оператора может быть не только константная строка, но и любое другое выражение, допустимое в запросе.
Условия отбора данных в запросе 1С
Механизм запросов — это один из способов доступа к данным, которые поддерживает платформа 1С:Предприятие. Используя этот механизм, разработчик может читать и обрабатывать данные, хранящиеся в информационной базе.
Условия, задаваемые в конструкции ВЫБРАТЬ
- ВЫБРАТЬ ПЕРВЫЕ <количество> — задает предельное количество строк в результате запроса (если нужно с конца — поменять упорядочивание УБЫВ или ВОЗР ). Указывается на закладке «Дополнительно» конструктора запросов.
- ВЫБРАТЬ РАЗЛИЧНЫЕ — исключение дублей в результате запроса (если в списке выборки указано несколько полей, то в результат запроса отбираются записи, содержащие неповторяющиеся комбинации значений сразу по нескольким полям). Указывается на закладке «Дополнительно» конструктора запросов — флаг «Без повторяющихся».
- ВЫБРАТЬ РАЗРЕШЕННЫЕ — используется при применении ограничения прав пользователей на уровне записей (RLS). Использование данного ключевого слова позволяет избежать получения записей, прав на которых у пользователя нет. Если ограничение прав не используется — не применять, снижает быстродействие .
Количество всевозможных значений, отличных от NULL , для некоторого поля в таблице:
- КОЛИЧЕСТВО(<Имя поля>)
Для определения числа различных записей:

Неверно (выведет общее число записей):

Условия, задаваемые в конструкции ГДЕ
ГДЕ — условия отбора данных из таблицы, причем поле конструкции ГДЕ может не входить в список выборки, например:
Особенности использования конструкции ГДЕ:
- В предложении ГДЕ можно использовать как имена полей, так и их псевдонимы.
- Условие отбора может определяться и как простое логическое выражение, и как сложное, в котором простые логические выражения соединяются между собой логическими операторами И , ИЛИ , НЕ . Порядок можно менять с использованием круглых скобок.
- Допускается использование оператора МЕЖДУ , который проверяет результат вхождения значения в указанный диапазон.
- Допускается использование оператора ПОДОБНО для сравнения значения со строкой шаблона вида «%строка%» .
- Допускается использование параметров, которые обозначаются символом «&» (например, параметр &Клиент или &Цена ).
Особенности использования оператора ПОДОБНО :
- может размещаться:
- в блоке условий, обозначенном ключевым словом ГДЕ ;
- в конструкции Выбор Когда Тогда Иначе Конец ;
- непосредственно в полях выборки, как результат сравнения полей;
- специальные символы, облегчающие разработку:
- «%»– последовательность любых символов произвольной длины, используется для поиска отдельных слов или цифр в строке;
- «_»– любой единичный символ для обозначения наличия одного знака;
- «[…]»– последовательность символов для сравнения со знаком в строке, проверяется соответствие любому из перечисленных в скобках знаков (можно задать диапазон цифр или букв — [а-г] или [1-7]);
- «[^…]» – шаблон, противоположный предыдущему, проверяется отличие указанного в строке символа от перечисленных в скобках.
Конструкция ВЫБОР (КОГДА … ТОГДА) ИНАЧЕ … КОНЕЦ
Для формирования поля выборки может использоваться операция выбора ВЫБОР (КОГДА … ТОГДА) ИНАЧЕ … КОНЕЦ , в которой:
- после ключевого слова КОГДА записывается условие выбора;
- после ключевого слова ТОГДА следует значение поля выборки в случае, если условие КОГДА истинно;
- после слова ИНАЧЕ указывается значение, которое используется в качестве результата операции выбора в том случае, если ни одно из ранее указанных альтернативных условий выбора КОГДА не было выполнено.
В общем случае в операции выбора может указываться неограниченное количество альтернативных одиночных выборов КОГДА … ТОГДА.
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.