Файл: Хрусталева Е. Ю. Язык запросов 1С-Предприятия 8 (2013).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.03.2019

Просмотров: 50429

Скачиваний: 8600

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Теперь посмотрим, как изменится результат запроса при различных комбинациях типов
соединений исходных таблиц запроса. Оставим без изменения тип первого (по порядку
следования в запросе) соединения справочника Товары с виртуальной таблицей
остатков. А тип второго соединения изменим на внутреннее соединение (листинг 1.77).

Листинг 1.77. Комбинация типов соединений данных справочника «Товары» и данных таблиц остатков и оборотов
товаров

При выполнении запроса сначала все происходит так же, как и в предыдущем случае.
Таблица справочника Товары связывается с виртуальной таблицей остатков левым
соединением. Результат этого соединения мы видим на рис. 1.75, слева. Для каждого
товара из справочника ищется соответствующая запись в таблице остатков, и найденный
остаток выводится для конкретного товара. Товары, у которых нет остатка (Сапоги,
МаслоПинетки), также попадают в результат соединения.

Рис. 1.75. Комбинация типов соединений данных справочника «Товары» и данных таблиц остатков и оборотов товаров

На следующем этапе результат этого первого соединения (см. рис. 1.75, левая таблица)
связывается внутренним соединением с виртуальной таблицей оборотов. Поскольку тип
соединения – внутренний, в результат запроса попадают только те товары из результата
соединения, для которых найдена соответствующая запись в таблице оборотов. Товары,
которые ни разу не продавались (СметанаПинетки) из результата первого
соединения, не попадают в результат запроса (см. рис. 1.75, правая таблица).

Теперь свяжем внутренним соединением справочник Товары с виртуальной таблицей
остатков. Тип второго соединения (по порядку следования в запросе) установим как
левое соединение (листинг 1.78).

Листинг 1.78. Комбинация типов соединений данных справочника «Товары» и данных таблиц остатков и оборотов
товаров


background image

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

Рис. 1.76. Комбинация типов соединений данных справочника «Товары» и данных таблиц остатков и оборотов товаров

На следующем этапе результат этого первого соединения (см. рис. 1.76, левая таблица)
связывается левым соединением с виртуальной таблицей оборотов. Для каждого товара
из результата первого соединения ищется соответствующая запись в таблице оборотов,
и найденное количество продаж выводится для конкретного товара. Товары, которые ни
разу не продавались (Сметана) из результата первого соединения, также попадают в
результат запроса (см. рис. 1.76, правая таблица).

Теперь свяжем все три исходные таблицы запроса внутренними соединениями (листинг
1.79).

Листинг 1.79. Комбинация типов соединений данных справочника «Товары» и данных таблиц остатков и оборотов
товаров


background image

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

Рис. 1.77. Комбинация типов соединений данных справочника «Товары» и данных таблиц остатков и оборотов товаров

На следующем этапе результат этого первого соединения (см. рис. 1.77, левая таблица)
связывается внутренним соединением с виртуальной таблицей оборотов. Поскольку тип
соединения – внутренний, в результат запроса попадают только те товары из результата
соединения, для которых найдена соответствующая запись в таблице оборотов. Товары,
которые ни разу не продавались (Сметана) из результата первого соединения, не
попадают в результат запроса (см. рис. 1.77, правая таблица).

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

Мы же обратим внимание на другую тонкость. Как видно из рассмотренных выше случаев
(листинги 1.76–1.79), три исходные таблицы запроса Справочник.Товары,
РегистрНакопления.ОстаткиТоваров.Остатки и
РегистрНакопления.Продажи.Обороты последовательно связывались разными видами
соединений. Порядок расположения синтаксических конструкций в предложении ИЗ был
следующий: <Имя первой таблицы> <Тип соединения> <Имя второй таблицы>
<Условие связи первой и второй таблицы> <Тип соединения> <Имя третьей
таблицы> <Условие связи первой и третьей таблицы>
.

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

Листинг 1.80. Комбинация типов соединений данных справочника «Товары» и данных таблиц остатков и оборотов
товаров


background image

Из текста запроса мы видим, что второе (по порядку следования в запросе) соединение
как бы вложено в первое. Но на самом деле оно выполняется первым как соединение с
наибольшим уровнем вложенности. Этот уровень также подчеркнут смещением в тексте
запроса относительно первого соединения. При этом первое (по порядку следования в
запросе) условие связи относится ко второму (вложенному) соединению, а второе
условие связи – к первому соединению. Чтобы не запутаться, разберем эту ситуацию на
нашем конкретном примере.

При выполнении запроса (см. листинг 1.80) сначала таблица остатков связывается с
таблицей оборотов левым соединением. Результат этого соединения мы видим на рис.
1.78, слева. Поскольку тип соединения – левый, в результат попадают все 4 товара, у
которых есть остаток. При этом у одного из товаров (Сметана) нет продаж, а товары,
которые проданы без остатка (СапогиМасло), в результат соединения не попадают.

Рис. 1.78. Комбинация типов соединений данных справочника «Товары» и данных таблиц остатков и оборотов товаров

На следующем этапе таблица справочника товаров связывается левым соединением с
результатом первого соединения (см. рис. 1.78, левая таблица). Для каждого товара из
справочника ищется соответствующая запись в результате первого соединения, и
найденные остатки и обороты выводятся для конкретного товара. Товары, у которых нет
остатка (СапогиМаслоПинетки) из справочника Товары, также попадают в результат
запроса (см. рис. 1.78, правая таблица).

Теперь изменим тип первого (по порядку следования в запросе) соединения на
внутреннее соединение, тип второго соединения оставим без изменений (листинг 1.81).

Листинг 1.81. Комбинация типов соединений данных справочника «Товары» и данных таблиц остатков и оборотов
товаров


background image

При выполнении запроса на первом этапе все происходит так же, как и в предыдущем
случае (см. объяснение над рис. 1.78). Результат этого соединения мы видим на рис.
1.79, слева.

Рис. 1.79. Комбинация типов соединений данных справочника «Товары» и данных таблиц остатков и оборотов товаров

На следующем этапе таблица справочника товаров связывается внутренним
соединением с результатом первого соединения (см. рис. 1.79, левая таблица).
Поскольку тип соединения – внутренний, то в результат запроса (см. рис. 1.79, правая
таблица) попадают только четыре из семи товаров из справочника, которые присутствуют
в результате первого соединения.

Теперь установим тип первого (по порядку следования в запросе) соединения как левое
соединение, а тип второго соединения – как внутреннее соединение (листинг 1.82).

Листинг 1.82. Комбинация типов соединений данных справочника «Товары» и данных таблиц остатков и оборотов
товаров

При выполнении запроса сначала таблица остатков связывается с таблицей оборотов
внутренним соединением. Результат этого соединения мы видим на рис. 1.80, слева.
Поскольку тип соединения – внутренний, в результат попадают только 3 товара, у
которых есть и остаток, и оборот. При этом товар Сметана, у которого есть остаток, но
нет продаж, а также товары, которые проданы без остатка (СапогиМасло), в результат