Фильтрация результатов запроса
Для фильтрации (указания условия отбора) используется структура, определяемая ключевым словом «Где».
Как пример рассмотрим следующие запросы:
| Выбрать
* Из Справочник. Номенклатура Где Справочник. Номенклатура. ЭтоГруппа | |||
|
Выбрать Различные ОснЕдиницаИзмерения Из Справочник. Номенклатура | |||
| Выбрать Первые 4
ОснЕдиницаИзмерения Из Споавочник. Номенклаттоа | |||
| Выбрать
ОснЕдиницаИзмерения Из Справочник. Номенклатура | |||
| Выбрать
* Из Справочник. Номенклатура Где Не Справочник. Номенклатура. ЭтоГруппа | |||
| В данных примерах знак равно (в условии) не обязателен, так как поле «ЭтоГруппа» содержит значения типа «Булево».
Выбрать Наименование Из Справочник. Номенклатура Где Справочник. Номенклатура. Код=1 В условиях (это не обязательно может быть конструкция «Где») помимо обычных операций сравнения могут использоваться «В», «Между И», «Подобно», «Есть». | |||
Указание нескольких источников, соединения, псевдонимы
Во всех предыдущих примерах источник был один. Но иногда могут возникать ситуации, когда данные находятся в разных таблицах, а должны попасть в результат выполнения одного запроса. Язык запросов предоставляет возможность указывать более чем один источник.
Выбрать
Номен. Наименование,
ЕдИзм. Наименование,
ЕдИзм. Коэффициент
Из
Справочник. Номенклатура Как Номен,
Справочник. ЕдиницыИзмерения Как ЕдИзм
| Результат подобного запроса состоит из всех возможных комбинаций записей обеих таблиц. Такой результат мало кого устроит, но так будет всегда, если не указывать способ связи таблиц.
Связывать таблицы можно с помощью конструкции языка запросов «Где» (как показано в следующем примере). | |||
| Выбрать
Номен. Наименование, ЕдИзм. Наименование, ЕдИзм. Коэффициент Из Справочник. Номенклатура Как Номен, Справочник. ЕдиницыИзмерения Как ЕдИзм Где Номен. ОснЕдиницаИзмерения. Код=ЕдИзм. Код |
Хочется отметить, что, во-первых, данный пример является абстрактным. В реальной жизни (в общем случае) чем меньше источников вы указываете в запросе, тем лучше. Во-вторых, условие в данном примере построено не эффективно. Если указать условие следующим образом:
| Номен. ОснЕдиницайзмерения=ЕдИзм. Ссылка |
то время выполнения данного запроса снизится почти в два раза.
Другим способом указания взаимосвязи таблиц является использование «Соединений». Соединения бывают нескольких видов:
* Внутреннее соединение
* Левое внешнее соединение
* Правое внешнее соединение
* Полное внешнее соединение
В любом случае, когда речь заходит о соединении, существует несколько связанных с этим понятий: Таблица № 1, Таблица № 2, соединение (его вид и условие соединения).
Рассмотрим эти варианты на следующем примере: Есть две таблицы:
|
Таблица № 1 |
|||
|
Номен |
Номер! |
||
|
Ручка |
1 |
||
|
Карандаш |
2 |
||
|
Вилка |
3 |
||
|
Таблица № 2 |
|||
|
ЕдИзм |
Номер2 |
||
|
Шт. |
1 |
||
|
Гр |
3 |
||
|
Кг |
4 |
||
|
банка |
1 |
||
В качестве полей запроса определим две колонки: «Номер» из первой таблицы и «ЕдИзм» из второй таблицы.
В соответствии с условием можно выделить записи, для которых условие выполняется:
|
Записи, неудовлетворяющие условию соединения: |
Внутреннее соединение: в результат выполнения запроса войдут только данные записей из обеих таблиц, для которых выполняется условие соединения т. е.
|
Ручка |
Шт. |
|
Ручка |
банка |
|
Вилка |
Гр- |


|
Ручка |
Шт. |
|
Ручка |
банка |
|
Вилка |
Гр. |
|
Карандаш |
Null |
|
Ручка |
Шт. |
|
Ручка |
банка |
|
Вилка |
Гр. |
|
Null |
Кг. |
Полное внешнее соединение. В результат запроса войдут как записи, для которых выполнялось условие соединения, так и записи, полученные из «не вошедших» данных из обеих таблиц.
|
Ручка |
Шт. |
|
Ручка |
банка |
|
Вилка |
Гр, |
|
Карандаш |
Null |
|
Null |
Кг. |
В качестве примера использования соединений рассмотрим нижеследующий текст запроса:
Выбрать
Контр. Наименование Как Контрагент, Контакт. Наименование ФИО, Контакт. Телефон Из
ВыборкаДетальная. Номенклатура, эфДиаграмма. УстановитьЗначение (0, эфДиаграмма. КоличествоСерий — 1, ВыборкаДетальная. Сумма,);
КонецЦикла;
КонецЦикла;
эфДиаграмма. Обновление = Истина;
КонецПроцедуры