1с 8 запрос выбор когда несколько условий
Перейти к содержимому

1с 8 запрос выбор когда несколько условий

  • автор:

Условия в запросе

Эти операторы возможно использовать во всех 4 ситуациях, но контекст (окружаемые переменные у них отличаются).

В первых двух случаях условия накладываются на поля выборки, например:

ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты КАК СпрКонтрагенты ГДЕ СпрКонтрагенты.ИНН<>»»

Обращение идет через имя таблицы (в простых запросах может опускаться, но в сложных может вызывать неоднозначность поля).

Данное условие вызывает ограничение выборки (обычно уменьшает ее)

В конструкторе запроса находятся на вкладке условия:

uslovie-gde-v-zaprose

uslovie-gde-v-zaprose-obychnoe

В произвольном варианте пишется текстом, в обычном выбирается поле, оператор сравнения и значение:

ВЫБОР КОГДА

Этот условный оператор используется для преобразования значения, ограничивает же выборку только когда расположен после служебного слова ГДЕ.
Допустимо несколько подчиненных условий. Может находится в полях выборки, полях условий ГДЕ, группировок, итогов (универсальный оператор для сложных условий)

Например, так выглядит вариант преобразования:

ВЫБРАТЬ
ВЫБОР
КОГДА 1 = 2
ТОГДА «Никогда не будет истиной»
КОГДА 1 = 1
ТОГДА «Всегда будет истиной»
ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
КОНЕЦ КАК ПолеПредставленияЗначения

Вариант использования в условии ГДЕ, результат выборки должен возвращать булево значение либо сравниваться с чем-то еще

Пример № 1

ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты КАК К ГДЕ ВЫБОР КОГДА К.ИНН = «» ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ

Пример № 2:

ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты КАК К ГДЕ ВЫБОР КОГДА К.ИНН = «» ТОГДА «» ИНАЧЕ «Заполнено» КОНЕЦ = «Заполнено»

Параметры виртуальных таблиц

В данном случае оперирование идет с полями таблиц, например ресурсами, измерениями, реквизитами. В этих условиях обращение идет без точки (контекст этого не требует).

ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют.СрезПоследних(, Валюта.Код = «RUR»)

В конструкторе запроса они находятся вот здесь:

parametry-virtualnoj-tablitsy

Стоит отметить, что обычно используется ограничение над измерениями, так как иначе условие отнесется к выборке для получения, а не на сам результат (на ресурсы ограничения следует наложить в операторе ГДЕ, чтобы получить ожидаемый результат).

Накладывание условия в запросе на измерения, если нет обращения через точку (как в примере выше), ускоряет выборку: на больших таблицах, это будет визуально заметно; на небольших можно использовать как удобно.

ИМЕЮЩИЕ

Для наложения отбора для результата «группировочных» функции

ВЫБРАТЬ
Контрагенты.ИНН,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагенты.Ссылка) КАК Ссылка
ИЗ
Справочник.Контрагенты КАК Контрагенты

СГРУППИРОВАТЬ ПО
Контрагенты.ИНН

ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагенты.Ссылка) > 1 И
Контрагенты.ИНН <> «»

В данную выборку попадут дубли ИНН, когда оно вообще заполнено.

В конструкторе запроса также находится на вкладке условия

В этой конструкции также возможно использование «группировочных» операторов И,ИЛИ, но сравнивать можно с константами запроса, с функцией или значением, входящим в группировку (другие реквизиты справочника в данном примере не будут доступны для сравнения -> тогда следует использовать ГДЕ).

Большой рекламный бюджет не ведет к высокому уровню сбыта. Наоборот, высокий уровень сбыта ведет к большому рекламному бюджету.

— К. Мейсон

1С выбор когда тогда несколько условий

Ключевые слова "ВЫБОР КОГДА . ТОГДА. " позволяют организовать вывод данных по логическому условию.

В запросе используются данные из РегистрСведений "ОтветственныеЛица" на дату ДатаСреза. с отбором по полю "СтруктурнаяЕдиница": СрезПоследних(&ДатаСреза, СтруктурнаяЕдиница = &СтруктурнаяЕдиница)

Предлагаем решение Ваших задач 1С.

Внедрение 1С:

  • Организуем вам индивидуальное экспресс обучение программам 1С.
  • Мы поможем Вам начать работать с программами 1С.
  • Мы поможем Вам настроить ваши отчеты в 1С.
  • Установим и настроим 1С под ваши задачи.
  • Поможем сделать ввод начальных остатков по складам и контрагентам
  • Перенесем данные из старых систем.
  • Подскажем как избежать ошибок.

Доработка и сопровождение 1С:

  • Доработаем существующие или создадим новые печатных формы и документы.
  • Разработаем внешние отчеты по Вашим требованиям.
  • Напишем внешние обработоки по загрузке документов из учетных (торговых) систем в бухгалтерию.
  • Разработаем приложения для выгрузки данных на сайты.

Ориентировочная стоимость работ программиста 1С : 500 р. за 1 час работы.

Звоните: 8 916 710 83 51 Ольга

© j008.ru 2014 Обратная связь: j008@j008.ru

Войдите как ученик, чтобы получить доступ к материалам школы

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

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

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

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

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

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

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

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

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

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

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

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

Отступление

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

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

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

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

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

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

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

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

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

Результатом условного оператора может быть не только строка, но и число, дата, булево или ссылочный тип. Это может быть или константа перечисленных выше типов или поле таблицы. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Приведу общий пример, демонстрирующий все указанные варианты:

В данной статье рассмотрено предложение ВЫБРАТЬ, его место и роль в языке запросов 1С:Предприятия 8.

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

Ниже рассмотрены следующие темы:

Место предложения ВЫБРАТЬ в структуре запроса

Структуру запроса 1С:Предприятия 8 можно представить в виде следующей схемы:

Из приведенной схемы можно сделать следующие выводы:

  • В любом запросе должно быть хотя бы одно предложение ВЫБРАТЬ.
  • В списке полей выборки должно быть описание хотя бы одного поля выборки, которое в общем случае является выражением.

Примеры запросов с предложением ВЫБРАТЬ

1. Выборка всех полей (кроме виртуальных) из таблиц

Вместо перечисления списка полей можно указать звездочку ("*") и тогда в результат запроса попадут все поля таблицы-источника, кроме виртуальных. Например:

//обращение к таблице справочника
ВЫБРАТЬ * ИЗ Справочник.Номенклатура

//обращение к таблице документа
ВЫБРАТЬ * ИЗ Документ.РасходныйКассовыйОрдер

//обращение к основной таблице регистра накопления
ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании

//обращение к виртуальной таблице регистра накопления
ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты

Замечание: В языке запросов есть возможность обойтись без предложения ИЗ, если описание поля содержит полный путь к нему с указанием таблицы-источника, например,

//выборка всех невиртуальных полей из таблицы справочника
ВЫБРАТЬ Справочник.Номенклатура.*

//выборка определенных полей из таблицы справочника
ВЫБРАТЬ
Справочник.Номенклатура.Код,
Справочник.Номенклатура.Наименование,
Справочник.Номенклатура.Представление //виртуальное поле

2. Выборка только определенных полей из таблиц

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

//обращение к таблице справочника
ВЫБРАТЬ Код, Наименование, Артикул, СтранаПроисхождения
ИЗ Справочник.Номенклатура

//обращение к таблице документа
ВЫБРАТЬ Номер, Дата, ПодразделениеКомпании, СуммаДокумента
ИЗ Документ.РасходныйКассовыйОрдер

3. Виртуальные поля

Некоторые поля в таблицах-источниках виртуальные, например, поле «Представление» для таблицы справочника и документа, или поле «МоментВремени» для документа. Это значит, что они не хранятся в базе данных, а генерируются «на лету». Виртуальные поля не включаются в результат запроса, когда вместо списка полей указана звездочка («*»), их нужно указывать явно, например «ВЫБРАТЬ *, Представление ИЗ Справочник.Товары». Такое решение было принято для ускорения выполнения классического запроса «ВЫБРАТЬ * ИЗ. ». В этом случае не требуется генерировать представления для элементов справочников и документов, следовательно запросы будут выполняться быстрее.

//обращение к таблице справочника (выбрать два обычных поля и одно виртуальное)
ВЫБРАТЬ Код, Наименование, Представление
ИЗ Справочник.Номенклатура

//обращение к таблице документа (выбрать все невиртуальные поля и два виртуальных)
ВЫБРАТЬ *, Представление, МоментВремени
ИЗ Документ.РасходныйКассовыйОрдер

4. Разыменование ссылочных полей

В 1С:Предприятии 8 допускается обращение к свойствам объектов через одну или несколько точек, например, «Номенклатура.Поставщик.Страна». Это позволяет значительно упростить написание запросов. Рекомендуется всегда пользоваться разыменованием полей там, где это возможно, чтобы не усложнять запросы лишними конструкциями.

//обращение к свойству объекта через одну точку
ВЫБРАТЬ
Ссылка,
ЮрФизЛицоКонтрагента . ИНН,
ПодразделениеКомпании . Код
ИЗ Документ.РасходныйКассовыйОрдер

//обращение к свойствам объектов через несколько точек
ВЫБРАТЬ
Ссылка,
Ответственный . ОсновнойБанковскийСчет . Банк . КоррСчет
ИЗ Документ.АвансовыйОтчет

5. Псевдонимы полей (ключевое слово КАК / AS)

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

ВЫБРАТЬ
Ссылка КАК Документ,
Ответственный КАК МатериальноОтветственный
ИЗ Документ.АвансовыйОтчет
УПОРЯДОЧИТЬ ПО МатериальноОтветственный

Ключевое слово КАК является необязательным, то есть вышеприведенный запрос можно записать так:

ВЫБРАТЬ
Ссылка Документ,
Ответственный МатериальноОтветственный
ИЗ Документ.АвансовыйОтчет

6. Обращение к табличной части как вложенной таблице

В этом случае поле результата запроса будет иметь тип РезультатЗапроса, то есть содержать вложенный результат запроса, сформированный на основе табличной части.

//получение табличной части как вложенной таблицы результата запроса
ВЫБРАТЬ Номер, Дата, Товары
ИЗ Документ.АвансовыйОтчет

//получение нескольких колонок табличной части как вложенной таблицы
ВЫБРАТЬ Номер, Дата, Товары.(Номенклатура, Количество)
ИЗ Документ.АвансовыйОтчет

Обратите внимание, что если выполнить следующий запрос, то в результате запроса будет две вложенные таблицы: в первой — одна колонка Номенклатура, а во второй — колонка Количество:

ВЫБРАТЬ Номер, Дата, Товары.Номенклатура, Товары.Количество
ИЗ Документ.АвансовыйОтчет

7. Обращение к табличной части как таблице-источнику

При таком способе обращения имя вложенной таблицы фигурирует в имени таблицы-источника (предложение ИЗ или полные имена полей) и в результате запроса нет вложенных таблиц.

//выборка всех полей из табличной части
ВЫБРАТЬ * ИЗ Документ.АвансовыйОтчет.Товары

// выборка определенных полей из табличной части
ВЫБРАТЬ Номенклатура, Количество, Цена, Сумма
ИЗ Документ.АвансовыйОтчет.Товары

//задание псевдонимов для полей табличной части
ВЫБРАТЬ Документ.АвансовыйОтчет.Товары.(Номенклатура, Сумма КАК СуммаПоСтроке)

//обращение к реквизитам документа и реквизитам табличной части (поле Ссылка)
ВЫБРАТЬ
Ссылка.Номер, Ссылка.Дата, Ссылка.Ответственный, //реквизиты документа
Номенклатура, Количество, Цена, Сумма //реквизиты табличной части
ИЗ Документ.АвансовыйОтчет.Товары

8. Ключевое слово РАЗЛИЧНЫЕ / DISTINCT

Ключевое слово РАЗЛИЧНЫЕ позволяет оставить в результате запроса только отличающиеся строки.

ВЫБРАТЬ РАЗЛИЧНЫЕ Ответственный
ИЗ Документ.АвансовыйОтчет

9. Ключевое слово ПЕРВЫЕ / TOP

Данное ключевое слово позволяет ограничить выборку несколькими первыми записями. Часто это ключевое слово применяется в комбинации с сортировкой (предложение УПОРЯДОЧИТЬ ПО).

ВЫБРАТЬ ПЕРВЫЕ 10 Номер, Дата, СуммаДокумента
ИЗ Документ.АвансовыйОтчет
УПОРЯДОЧИТЬ ПО СуммаДокумента УБЫВ

10. Выражения в списке полей выборки

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

  • Литералы типов: число, строка (в кавычках), булево (значения Истина и Ложь), Null, Неопределено. [ Замечание : Чтобы указать литерал типа "дата", можно воспользоваться ключевым словом языка запросов ДАТАВРЕМЯ или передать дату через параметр запроса].
  • Параметры запроса (со знаком &)
  • Имя поля
  • Имя табличной части
  • Разыменование ссылочного поля (через одну или несколько точек)
  • Арифметические операции (+, -, /, *) [ Замечание : операция получения остатка % в языке запросов не поддерживается]
  • Операция конкатенации строк (+) [ Замечание : операцию конкатенации нельзя использовать для виртуальных полей]
  • Встроенные функции языка запросов (ДЕНЬ, МЕСЯЦ, ГОД и т.д.)
  • Агрегатные функции (СУММА, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, КОЛИЧЕСТВО)
  • Операция выбора ВЫБОР / CASE — позволяет получить одно из возможных значений в соответствии с указанными условиями.
  • Операция приведения типов ВЫРАЗИТЬ / CAST

Ниже приведено несколько примеров с выражениями в списке полей выборки:

//арифметические операции
ВЫБРАТЬ
Номенклатура,
Количество * Цена КАК РасчСумма1,
Сумма / Количество КАК РасчСумма2
ИЗ Документ.АвансовыйОтчет.Товары

//литералы типа "булево", "число", "строка", "дата"
ВЫБРАТЬ Истина, Ложь, 10.5, "Текст", ДАТАВРЕМЯ(2003,12,25)

//конкатенация строк
ВЫБРАТЬ "Сотрудник " + Ответственный.Наименование
ИЗ Документ.АвансовыйОтчет

//агрегатные функции
ВЫБРАТЬ
ПодразделениеКомпании,
СУММА(СуммаДокумента),
МАКСИМУМ(СуммаДокумента),
МИНИМУМ(СуммаДокумента),
СРЕДНЕЕ(СуммаДокумента),
КОЛИЧЕСТВО(*)
ИЗ Документ.АвансовыйОтчет
СГРУППИРОВАТЬ ПО ПодразделениеКомпании

//операция выбора
ВЫБРАТЬ Наименование,
ВЫБОР
КОГДА СтранаПроисхождения.Наименование = "КИТАЙ" ТОГДА "Азия"
КОГДА СтранаПроисхождения.Наименование = "ТАЙВАНЬ" ТОГДА "Азия"
КОГДА СтранаПроисхождения.Наименование = "США" ТОГДА "Америка"
КОГДА СтранаПроисхождения.Наименование = "КАНАДА" ТОГДА "Америка"
ИНАЧЕ "Другое"
КОНЕЦ КАК Страна
ИЗ Справочник.Номенклатура

//операция приведения типов
ВЫБРАТЬ
Ссылка,
Номенклатура,
ВЫРАЗИТЬ(Сумма / 3 КАК Число(5,2)) КАК ТретьСуммы
ИЗ Документ.АвансовыйОтчет.Товары

Таким образом, предложение ВЫБРАТЬ является важнейшим элементом языка запросов, поскольку позволяет указать требуемые поля результата запроса. Гибкие возможности предложения ВЫБРАТЬ позволяют использовать язык запросов для решения самых разнообразных задач.

Многоуровневая конструкция КОГДА ТОГДА в запросе

Доброй ночи! То ли не понимаю, то ли пишу не так синтаксис. Есть 3 адреса у физ лица, (проживания,прописка, информирование) Мне нужно выбрать первый который заполнен из трех в этом же порядке. Отдельными ВТ получаю все 3 значения далее пытаюсь так

ВЫБОР
КОГДА ФИОиАдрес1.Адрес ЕСТЬ NULL
ТОГДА ФИОиАдрес2.Адрес
КОГДА ФИОиАдрес2.Адрес ЕСТЬ NULL
ТОГДА ФИОиАдрес3.Адрес
ИНАЧЕ ФИОиАдрес1.Адрес
КОНЕЦ

если заполены 1ый и 2ой то все ок, а если они пусты но заполнен 3ий — все равно null получаю. Что не так делаю?

ВЫБОР
КОГДА ТОГДА
КОГДА ТОГДА
ИНАЧЕ
КОНЕЦ

Конструкция проходит два условия, а не одно

ВЫБОР
КОГДА НЕ ФИОиАдрес1.Адрес ЕСТЬ NULL
ТОГДА ФИОиАдрес1.Адрес
КОГДА НЕ ФИОиАдрес2.Адрес ЕСТЬ NULL
ТОГДА ФИОиАдрес2.Адрес
ИНАЧЕ ФИОиАдрес3.Адрес
КОНЕЦ

1с 8 запрос выбор когда несколько условий

Войдите как ученик, чтобы получить доступ к материалам школы

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

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

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

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

02

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

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

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

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

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

03

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

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

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

04

Отступление

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

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

05

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

06

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

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

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

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

07

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

08

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *