584 документа
← К списку

Как получить данные из разных таблиц, связанных несколькими соединениями

страница

Как получить данные из разных таблиц, связанных несколькими соединениями

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

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

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

Исходные данные представлены на рис. 11.30.

Рис. 11.30. Исходные записи справочника «Номенклатура» и виртуальных таблиц регистров «Цены» и «ОстаткиТоваров»

Вы видите, что в справочнике Номенклатура содержится десять записей, которые не являются группой, так как на таблицу справочника наложено соответствующее условие. Также вы видите, что записи всех трех таблиц, используемых в примере, не полностью соответствуют друг другу по полю Номенклатура / Материал. Есть целый ряд элементов номенклатуры, которые еще не поступали в компанию и поэтому не имеют остатка. Эти особенности будут отражены в результате запроса, когда вы будете связывать данные всех таблиц между собой.

Свяжите данные всех трех таблиц левыми соединениями и выведите из справочника Номенклатура поля Код и Наименование, из виртуальной таблицы регистра накопления Цены.СрезПоследних – поле Цена и из виртуальной таблицы регистра накопления ОстаткиТоваров.Остатки – поле КоличествоОстаток (листинг 11.32).

Листинг **11.**32. Левое соединение данных справочника «Номенклатура» и виртуальных таблиц цен и остатков

ВЫБРАТЬ

спрНоменклатура.Код КАК Код,

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

ЦеныСрезПоследних.Цена КАК Цена,

ОстаткиМатериаловОстатки.КоличествоОстаток КАК КоличествоОстаток

ИЗ

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

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних

ПО (спрНоменклатура.Ссылка = ЦеныСрезПоследних.Номенклатура)

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки КАК ОстаткиМатериаловОстатки

ПО (спрНоменклатура.Ссылка = ОстаткиМатериаловОстатки.Материал)

ГДЕ

спрНоменклатура.ЭтоГруппа = ЛОЖЬ

 

УПОРЯДОЧИТЬ ПО

спрНоменклатура.Ссылка

АВТОУПОРЯДОЧИВАНИЕ

Результат запроса представлен на рис. 11.31.

Рис. 11.31. Левое соединение данных справочника «Номенклатура» и виртуальных таблиц цен и остатков

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