Введение в конфигурирование 1Cv8 - Основные объекты

  73c64bed     

Фильтрация результатов запроса


Для фильтрации (указания условия отбора) используется структура, определяемая ключевым словом «Где».

Как пример рассмотрим следующие запросы:

Выбрать

*

Из Справочник. Номенклатура Где Справочник. Номенклатура. ЭтоГруппа

Выбрать Различные

ОснЕдиницаИзмерения Из Справочник. Номенклатура



Выбрать Первые 4

ОснЕдиницаИзмерения Из Споавочник. Номенклаттоа

Выбрать

ОснЕдиницаИзмерения Из Справочник. Номенклатура

Выбрать

*

Из

Справочник. Номенклатура Где Не Справочник. Номенклатура. ЭтоГруппа

В данных примерах знак равно (в условии) не обязателен, так как поле «ЭтоГруппа» содержит значения типа «Булево».

Выбрать

Наименование Из Справочник. Номенклатура Где Справочник. Номенклатура. Код=1

В условиях (это не обязательно может быть конструкция «Где») помимо обычных операций сравнения могут использоваться «В», «Между И», «Подобно», «Есть».

Указание нескольких источников, соединения, псевдонимы

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

Выбрать

Номен. Наименование,

ЕдИзм. Наименование,

ЕдИзм. Коэффициент

Из

Справочник. Номенклатура Как Номен,

Справочник. ЕдиницыИзмерения Как ЕдИзм

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

Связывать таблицы можно с помощью конструкции языка запросов «Где» (как показано в следующем примере).

Выбрать

Номен. Наименование, ЕдИзм. Наименование, ЕдИзм. Коэффициент Из Справочник. Номенклатура Как Номен, Справочник. ЕдиницыИзмерения Как ЕдИзм Где Номен. ОснЕдиницаИзмерения. Код=ЕдИзм. Код

Хочется отметить, что, во-первых, данный пример является абстрактным. В реальной жизни (в общем случае) чем меньше источников вы указываете в запросе, тем лучше. Во-вторых, условие в данном примере построено не эффективно. Если указать условие следующим образом:

Номен. ОснЕдиницайзмерения=ЕдИзм. Ссылка




то время выполнения данного запроса снизится почти в два раза.

Другим способом указания взаимосвязи таблиц является использование «Соединений». Соединения бывают нескольких видов:

*    Внутреннее соединение

*    Левое внешнее соединение

*    Правое внешнее соединение

*    Полное внешнее соединение

В любом случае, когда речь заходит о соединении, существует несколько связанных с этим понятий: Таблица № 1, Таблица № 2, соединение (его вид и условие соединения).

Рассмотрим эти варианты на следующем примере: Есть две таблицы:

Таблица № 1

Номен

Номер!

Ручка

1

Карандаш

2

Вилка

3

Таблица № 2

ЕдИзм

Номер2

Шт.

1

Гр

3

Кг

4

банка

1

Условием соединения будет: Таблица1. Номер1=Таблица2. Номер2

В качестве полей запроса определим две колонки: «Номер» из первой таблицы и «ЕдИзм» из второй таблицы.

В соответствии с условием можно выделить записи, для которых условие выполняется:

Записи, неудовлетворяющие условию соединения:

Теперь рассмотрим варианты соединения:

Внутреннее соединение: в результат выполнения запроса войдут только данные записей из обеих таблиц, для которых выполняется условие соединения т. е.

Ручка

Шт.

Ручка

банка

Вилка

Гр-

Левое внешнее соединение: в результат выполнения запроса войдут данные из записей, для которых выполняется условие соединения и «не вошедшие» из Таблицы № 1. Можно сказать, что в результат запроса войдут все данные из Таблицы № 1, и для тех записей результата запроса, для которых выполнялось условие соединения в полях, куда помещаются данные из таблицы № 2, будут стоять значения, для которых условие не выполняется, будет стоять Null.





Ручка

Шт.

Ручка

банка

Вилка

Гр.

Карандаш

Null

Правое внешнее соединение обратно левому.

Ручка

Шт.

Ручка

банка

Вилка

Гр.

Null

Кг.

<


Полное внешнее соединение. В результат запроса войдут как записи, для которых выполнялось условие соединения, так и записи, полученные из «не вошедших» данных из обеих таблиц.

Ручка

Шт.

Ручка

банка

Вилка

Гр,

Карандаш

Null

Null

Кг.

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

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

Выбрать

Контр. Наименование Как Контрагент, Контакт. Наименование ФИО, Контакт. Телефон Из

ВыборкаДетальная. Номенклатура, эфДиаграмма. УстановитьЗначение (0, эфДиаграмма. КоличествоСерий — 1, ВыборкаДетальная. Сумма,);

КонецЦикла;

 КонецЦикла;

эфДиаграмма. Обновление = Истина;

 КонецПроцедуры


Содержание раздела