Оглавление:
- Основы работы.
- Параметры и операторы сравнения.
- Условия отбора.
- Группировки.
- Итоги.
- Вложенные запросы.
Условия в запросах применяются, когда необходимо выбрать не все записи из таблицы информационной базы 1С, а только соответствующие одному или нескольким критериям отбора.
Условия в запросах 1С могут задаваться различными способами в зависимости от особенностей самого запроса и источника данных.
Ключевое слово «ГДЕ»
Ключевое слово ГДЕ используется в запросах 1С, когда условие применяется к записям, отбираемым из информационной базы. При этом фильтрация записей происходит на этапе их выбора из таблицы информационной базы.
Например, есть таблица Выплаты, содержащая перечень сотрудников и произведенные им выплаты.
Если необходимо отобрать выплаты на сумму не менее 10 000, то запрос будет выглядеть следующим образом
| Выплаты.Сотрудник,
| Выплаты.Зарплата
|ИЗ
| Выплаты
|ГДЕ
| Выплаты.Зарплата >=10000"
Результатом выполнения запроса будет следующая таблица.
Ключевое слово «ИМЕЮЩИЕ»
Ключевое слово ИМЕЮЩИЕ в запросах 1С применяется, когда необходимо произвести отбор среди уже выбранных записей. Напрмиер, это ключевое слово применяется, когда нужно произвести фильтрацию сгруппированных записей в результате запроса.
Вернемся к примеру, рассмотренному выше. Допустим, необходимо выбрать из таблицы Выплаты сотрудников, которые в сумме получили больше 20 000. Для этого, сначала нужно ввести группировку по полю Сотрудник, подсчитать сумму по полю Зарплата для каждого сотрудника, а потом из полученных записей отобрать те, которые удовлетворяют условию.
Текст запроса будет выглядеть следующим образом.
| Выплаты.Сотрудник,
| СУММА(Выплаты.Зарплата) КАК Зарплата
|ИЗ
| Выплаты
|СГРУППИРОВАТЬ ПО
| Выплаты.Сотрудник
|ИМЕЮЩИЕ
| СУММА(Выплаты.Зарплата) > 20000"
Результат выполнения этого запроса будет таким.
На этом примере наглядно видна разница между ключевыми словами ГДЕ и ИМЕЮЩИЕ. Если бы мы использовали слово ГДЕ вместо ИМЕЮЩИЕ, то сначала был бы произведен отбор записей с зарплатой больше 20000, а потом по ним подсчитана сумма по каждому сотруднику. В результате мы получили бы пустой результат запроса, т.к. ни один сотрудник не получал больше 20000 за одну выплату.
Условия отбора в вирутальных таблицах регистров
Виртуальные таблицы есть у всех регистров в системе 1С:Предприятие: регистров накопления, регистров сведений, регистров бухгалтерии. Задать условия к виртуальным таблицам можно двумя способами:
- через параметры виртуальной таблица;
- через секции запроса ГДЕ или ИМЕЮЩИЕ.
Различия между секциями ГДЕ и ИМЕЮЩИЕ мы уже рассматривали. Чтобы было понятно, чем условия в этих секциях запроса отличаются от условий в параметрах виртуальной таблицы, нужно понять, что же такое виртуальные таблицы регистров в 1С. Важной их особенностью является то, что они не существуют в информационной базе. Это инструмент, предоставляемый нам платформой 1С:предприятие для оптимизации работы конфигурации.
Таким образом, если условие прописано в параметрах виртуальной таблицы, то оно применяется на этапе ее формирования из записей реальной таблица регистра. А если в секциях ГДЕ или ИМЕЮЩИЕ, то — к записям уже сформированной виртуальной таблицы.
Рассмотрим пример. Дана таблица периодического регистра сведений КурсыВалют.
Требуется выбрать на наименьшую дату валюты, курс которых меньше 30 р.
Запрос с условием в параметрах виртуальной таблицы будет выглядет так:
| КурсыВалютСрезПервых.Период,
| КурсыВалютСрезПервых.Валюта,
| КурсыВалютСрезПервых.Курс,
|ИЗ
| РегистрСведений.КурсыВалют.СрезПервых (, Курс < 30) КАК КурсыВалютСрезПервых"
В этом случае мы получим одну запись: Доллар 28,3 от 01.02.2007. Это будет верное решение задачи.
Если же мы поместим условие в секцию ГДЕ, то результат запроса будет пустым, поскольку сначала будет сделан срез первых по каждой валюте (в результате получим две записи от 01.01.2007 Доллар 30,25 и Евро 40,5), а потом из них будут выбраны записи, удовлетворяющие условию. Но обе полученные записи условию Курс < 30 не удовлетворяют.