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

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

  • автор:

Предложение ВЫБРАТЬ (SELECT) в языке запросов 1С:Предприятия 8

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

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

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

  • Место предложения ВЫБРАТЬ в структуре запроса 1С:Предприятия 8
  • Примеры запросов с предложением ВЫБРАТЬ:
    • Выборка всех полей (кроме виртуальных) из таблиц
    • Выборка только определенных полей из таблиц
    • Виртуальные поля
    • Разыменование ссылочных полей
    • Псевдонимы полей (ключевое слово КАК / AS)
    • Обращение к табличной части как вложенной таблице
    • Обращение к табличной части как таблице-источнику
    • Ключевое слово РАЗЛИЧНЫЕ / DISTINCT
    • Ключевое слово ПЕРВЫЕ / TOP
    • Выражения в списке полей выборки

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

    Структуру запроса 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)) КАК ТретьСуммы
    ИЗ Документ.АвансовыйОтчет.Товары

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

    «ВЫБОР КОГДА … ТОГДА …» в запросе 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с. Пустые ссылки можно использовать в различных конструкциях языка запросов:

    • условиях раздела ГДЕ;
    • в качестве значения поля запроса;
    • конструкциях ВЫБОР КОГДА…;
    • конструкциях ЕСТЬNULL;
    • условиях связей таблиц.

    Пустая ссылка в условиях запросов 1с

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

    Здесь ОбъектМетаданных выражение вида:

    • Документ.ИмяДокумента;
    • Справочник.ИмяДокумента и т.д.

    Пример 1. При помощи запроса получить верхний уровень иерархии справочника Номенклатура.

    Пример 2. При помощи запроса получить все элементы справочника Номенклатура, кроме тех, у кого нет родителя.

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

    Пустая ссылка в качестве значения поля

    Пустая ссылка в запросе 1с может использоваться в качестве значения поля. Как в чистом виде, так и в конструкциях ВЫБОР КОГДА… или ЕСТЬNULL.

    Пример 3. Создать пустую временную таблицу ТаблицаНоменклатуры.

    Пример 4. При помощи запроса получить список номенклатуры со значениями дополнительного сведения Цвет.

    Пример 5. В запросе из предыдущего примера использовать конструкцию ВЫБОР КОГДА… вместо ЕСТЬNULL.

    Пустая ссылка в связях запроса 1с

    Проверку на пустую ссылку можно использовать и в условиях связи таблиц.

    Пример 6. Получить список номенклатуры, а также значения дополнительного сведения Индекс. Индекс выводить только для номенклатуры с заполненным реквизитом СтранаПроисхождения.

    Также прочитайте статью о структуре оператора Выбрать, языка запросов: Язык запросов 1с — оператор Выбрать

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

Ваш адрес email не будет опубликован.