Язык запросов выбор когда

К полям запроса можно применять различные функции. В этом разделе я рассмотрю наиболее часто применяемые (лично мною) из них.

ДАТАВРЕМЯ — задает константное поле с типом Дата. Синтаксис:

РАЗНОСТЬДАТ — возвращает разность 2-х дат в указанном измерении (год, месяц, день, час, минута, секунда). Синтаксис:

ЗНАЧЕНИЕ — задает константное поле с предопределенной записью одной из таблиц БД, также можно передать пустую ссылку. Синтаксис:

ВЫБОР — аналог конструкции ЕСЛИ для языка запросов 1С. Синтаксис:

ВЫРАЗИТЬ — довольно неоднозначный оператор. Подробнее о нем читайте статью функция ВЫРАЗИТЬ в языке запросов 1С 8.

ССЫЛКА — логический оператор проверки ссылочного типа. Чаще всего используется для проверки поля составного типа на конкретный тип. Синтаксис:

МЕЖДУ — проверяет значение на вхождение в диапозон. Синтаксис:

В и В ИЕРАРХИИ — проверяют наличие значения в передаваемом списке. В ИЕРАРХИИ также развернет иерархические элементы вниз и поищет значение среди подчиненных элементов. Синтаксис:

ПОДОБНО — позволяет сравнивать строку с шаблоном, используется когда строка поиска жестко не определена. Построение шаблона:

  • % (процент): последовательность, содержащая любое количество произвольных символов
  • _ (подчеркивание): один произвольный символ
  • [. ] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок. В перечислении могут задаваться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона
  • [^. ] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания

ЕСТЬNULL — если поле не определено, то определяет его в указанное выражение. Синтаксис:

Замечу, что NULL следует обязательно обрабатывать, т.к. это очень "капризный" тип (в системе "1С:Предприятие 8" определен специальный тип NULL с одним элементом). Если вы попытаетесь сравнить со значением данного типа или присвоить его, то обязательно нарветесь на ошибку, поэтому не забывайте о данной конструкции. Когда может выскочить NULL:

  • после соединения таблиц, кроме внутреннего (о соединениях следующая статья);
  • после выбора реквизитов определенных только для групп справочников и наоборот;
  • после выбора графы журнала документов, в то время как у текущего документа нет реквизитов, включенных в состав этой графы.

Это далеко не полный список функций языка запросов 1С 8, если заинтересует работа каких-либо еще — пишите в комментариях.

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

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

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

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

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

Читайте также:  Степлер для мебели отзывы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Honor 7x характеристики цены обзор отзывы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Mc 019a вход в сервис

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Отступление

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

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

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

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

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

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

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

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

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

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

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

Оставьте ответ

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