Запросы 1С:Предприятие 8. Условия отбора

Оглавление:

  1. Основы работы.
  2. Параметры и операторы сравнения.
  3. Условия отбора.
  4. Группировки.
  5. Итоги.
  6. Вложенные запросы.

Условия в запросах применяются, когда необходимо выбрать не все записи из таблицы информационной базы 1С, а только соответствующие одному или нескольким критериям отбора.

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

Ключевое слово «ГДЕ»

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

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

Условия в запросах 1СЕсли необходимо отобрать выплаты на сумму не менее 10 000, то запрос будет выглядеть следующим образом

Запрос.Текст="ВЫБРАТЬ
|   Выплаты.Сотрудник,
|   Выплаты.Зарплата
|ИЗ
|   Выплаты
|ГДЕ
|   Выплаты.Зарплата >=10000"

Результатом выполнения запроса будет следующая таблица.

Условия в запросах 1С

Ключевое слово «ИМЕЮЩИЕ»

Ключевое слово ИМЕЮЩИЕ в запросах 1С применяется, когда необходимо произвести отбор среди уже выбранных записей. Напрмиер, это ключевое слово применяется, когда нужно произвести фильтрацию сгруппированных записей в результате запроса.

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

Текст запроса будет выглядеть следующим образом.

Запрос.Текст="ВЫБРАТЬ
|   Выплаты.Сотрудник,
|   СУММА(Выплаты.Зарплата) КАК Зарплата
|ИЗ
|   Выплаты
|СГРУППИРОВАТЬ ПО
|   Выплаты.Сотрудник
|ИМЕЮЩИЕ
|   СУММА(Выплаты.Зарплата) > 20000"

Результат выполнения этого запроса будет таким.

Условия в запросах 1СНа этом примере наглядно видна разница между ключевыми словами ГДЕ и ИМЕЮЩИЕ. Если бы мы использовали слово ГДЕ вместо ИМЕЮЩИЕ, то сначала был бы произведен отбор записей с зарплатой больше 20000, а потом по ним подсчитана сумма по каждому сотруднику. В результате мы получили бы пустой результат запроса, т.к. ни один сотрудник не получал больше 20000 за одну выплату.

Условия отбора в вирутальных таблицах регистров

Виртуальные таблицы есть у всех регистров в системе 1С:Предприятие: регистров накопления, регистров сведений, регистров бухгалтерии. Задать условия к виртуальным таблицам можно двумя способами:

  1. через параметры виртуальной таблица;
  2. через секции запроса ГДЕ или ИМЕЮЩИЕ.

Различия между секциями ГДЕ и ИМЕЮЩИЕ мы уже рассматривали. Чтобы было понятно, чем условия в этих секциях запроса отличаются от условий в параметрах виртуальной таблицы, нужно понять, что же такое виртуальные таблицы регистров в 1С. Важной их особенностью является то, что они не существуют в информационной базе. Это инструмент, предоставляемый нам платформой 1С:предприятие для оптимизации работы конфигурации.

Таким образом, если условие прописано в параметрах виртуальной таблицы, то оно применяется на этапе ее формирования из записей реальной таблица регистра. А если в секциях ГДЕ или ИМЕЮЩИЕ, то — к записям уже сформированной виртуальной таблицы.

Рассмотрим пример. Дана таблица периодического регистра сведений КурсыВалют.

Условия в запросах 1СТребуется выбрать на наименьшую дату валюты, курс которых меньше 30 р.

Запрос с условием в параметрах виртуальной таблицы будет выглядет так:

Запрос.Текст="ВЫБРАТЬ
|   КурсыВалютСрезПервых.Период,
|   КурсыВалютСрезПервых.Валюта,
|   КурсыВалютСрезПервых.Курс,
|ИЗ
|   РегистрСведений.КурсыВалют.СрезПервых (, Курс < 30) КАК КурсыВалютСрезПервых"

В этом случае мы получим одну запись: Доллар 28,3 от 01.02.2007. Это будет верное решение задачи.

Если же мы поместим условие в секцию ГДЕ, то результат запроса будет пустым, поскольку сначала будет сделан срез первых по каждой валюте (в результате получим две записи от 01.01.2007 Доллар 30,25 и Евро 40,5), а потом из них будут выбраны записи, удовлетворяющие условию. Но обе полученные записи условию Курс < 30 не удовлетворяют.

 

 

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

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