рубрики: Конструктор запросов | Дата: 5 ноября, 2016
Рассмотрим как происходит соединение таблиц в конструкторе запросов 1С.
Пример возьмем тот же самый, что и в статье про
соединение таблиц в запросах
Напомню, что там мы использовали две таблицы. С Товаром
КодТовара | Наименование |
---|---|
001 | Яблоки |
002 | Апельсины |
003 | Мандарины |
и страной-производителем
КодТовара | Страна |
---|---|
001 | Россия |
002 | Турция |
003 | Марокко |
Рассмотрим как можно соединить эти две таблицы по полю КодТовара с использованием
конструктора запросов (код по формированию временных таблиц для примера приводить
не буду. Его можно взять по вышеуказанной ссылке).
Открываем окно конструктора, встаем на закладку «Таблицы и поля», в раздел
«Таблицы» выбираем обе наши таблицы, а в раздел «Поля» –
те поля из обоих таблиц, которые мы хотим видеть в результате выполнения запроса.
Переходим на закладку «Связи». Добавляем новую строку. В поле Таблица1
из выпадающего списка выбираем таблицу с товарами, а в поле Таблица2 Таблицу
со странами.
Для Таблицы1 устанавливаем флажок Все. Для
Tаблицы2 этот флажок не ставим. Это означает, что из Таблицы1
будут выбраны все записи, а из Таблицы2 только те для которых выполняется
условие соединения, то есть при такой комбинации флажков мы получаем
ЛЕВОЕ СОЕДИНЕНИЕ. Далее необходимо заполнить Условие связи.
Здесь мы выбираем поля таблиц из выпадающих списков и знак сравнения также из выпадающего
списка.
В результате такого соединения получим следующий текст запроса:
ВЫБРАТЬ
ВТ_Товар.КодТовара,
ВТ_Товар.Наименование,
ВТ_Страна.Страна
ИЗ
ВТ_Товар КАК ВТ_Товар
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Страна КАК ВТ_Страна
ПО ВТ_Товар.КодТовара = ВТ_Страна.КодТовара
Теперь рассмотрим подробнее некоторые моменты.
Давайте попробуем поменять местами флажок Все.
Казалось бы в итоге должно получиться ПРАВОЕ СОЕДИНЕНИЕ, но если мы
посмотрим на текст запроса, сформированный конструктором, то увидим, что таблицы
поменялись местами, а соединение все равно осталось левым:
ВЫБРАТЬ
ВТ_Товар.КодТовара,
ВТ_Товар.Наименование,
ВТ_Страна.Страна
ИЗ
ВТ_Страна КАК ВТ_Страна
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Товар КАК ВТ_Товар
ПО ВТ_Товар.КодТовара = ВТ_Страна.КодТовара
Посмотрим, что будет, если снимем оба флажка
В итоге получаем внутреннее соединение.
ВЫБРАТЬ
ВТ_Товар.КодТовара,
ВТ_Товар.Наименование,
ВТ_Страна.Страна
ИЗ
ВТ_Товар КАК ВТ_Товар
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Страна КАК ВТ_Страна
ПО ВТ_Товар.КодТовара = ВТ_Страна.КодТовара
И наконец, если установлены оба флажка
получаем полное соединение
ВЫБРАТЬ
ВТ_Товар.КодТовара,
ВТ_Товар.Наименование,
ВТ_Страна.Страна
ИЗ
ВТ_Товар КАК ВТ_Товар
ПОЛНОЕ СОЕДИНЕНИЕ ВТ_Страна КАК ВТ_Страна
ПО ВТ_Товар.КодТовара = ВТ_Страна.КодТовара
Можно задавать несколько строк на закладке Связи. В этом случае несколько
строк соединяются по условию И. Причем строки не обязательно
каждый раз вбивать заново. Их можно копировать с использованием клавиши F9.
А в новой строке менять только условие соединения. Это существенно ускоряет разработку.
Также в условии связи необязательно использовать только предопределенные поля из
выпадающих списков. Можно использовать произвольное выражение, удовлентворяющее
языку запросов 1С. Для этого необходимо установить флажок Произвольное
и вписать условие непосредственно в поле, либо открыть вспомогательное окно, в
котором можно воспользоваться шаблонами с функциями языка запросов.
Конечно на практике встречаются гораздо более сложные запросы, где соединяются
несколько таблиц с разнообразными связями между собой. Но в конструкторе запросов
можно воспроизвести соединения любой сложности.
Добавить комментарий