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

Рис. 11.30. Исходные записи справочника «Номенклатура» и виртуальных таблиц регистров «Цены» и «ОстаткиТоваров»
Вы видите, что в справочнике Номенклатура содержится десять записей, которые не являются группой, так как на таблицу справочника наложено соответствующее условие. Также вы видите, что записи всех трех таблиц, используемых в примере, не полностью соответствуют друг другу по полю Номенклатура / Материал. Есть целый ряд элементов номенклатуры, которые еще не поступали в компанию и поэтому не имеют остатка. Эти особенности будут отражены в результате запроса, когда вы будете связывать данные всех таблиц между собой.
Свяжите данные всех трех таблиц левыми соединениями и выведите из справочника Номенклатура поля Код и Наименование, из виртуальной таблицы регистра накопления Цены.СрезПоследних – поле Цена и из виртуальной таблицы регистра накопления ОстаткиТоваров.Остатки – поле КоличествоОстаток (листинг 11.32).
Листинг **11.**32. Левое соединение данных справочника «Номенклатура» и виртуальных таблиц цен и остатков
ВЫБРАТЬ
спрНоменклатура.Код КАК Код,
спрНоменклатура.Наименование КАК Наименование,
ЦеныСрезПоследних.Цена КАК Цена,
ОстаткиМатериаловОстатки.КоличествоОстаток КАК КоличествоОстаток
ИЗ
Справочник.Номенклатура КАК спрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних
ПО (спрНоменклатура.Ссылка = ЦеныСрезПоследних.Номенклатура)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки КАК ОстаткиМатериаловОстатки
ПО (спрНоменклатура.Ссылка = ОстаткиМатериаловОстатки.Материал)
ГДЕ
спрНоменклатура.ЭтоГруппа = ЛОЖЬ
УПОРЯДОЧИТЬ ПО
спрНоменклатура.Ссылка
АВТОУПОРЯДОЧИВАНИЕ
Результат запроса представлен на рис. 11.31.

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