1С не поддерживает коррелированных запросов, то есть обращения из вложенного запроса к полям родительского запроса, кроме варианта с условием "В", пример есть в файле V8adddoc807.htm, приведен ниже.
===ПРИМЕР ИЗ ФАЙЛА V8adddoc807.htm===
Заметим, что из запроса операции В возможно обращение к полям таблиц, которые встречались во внешнем запросе до появления операции.
2)Самый элегантный вариант - коррелированным подзапросом с ВЫБРАТЬ ПЕРВЫЕ 2
===ПРИМЕР ИЗ ФАЙЛА V8adddoc807.htm===
Заметим, что из запроса операции В возможно обращение к полям таблиц, которые встречались во внешнем запросе до появления операции.
Пример:
// Выбрать названия товаров, которые присутствовали в расходных накладных
ВЫБРАТЬ
Товары.Наименование
ИЗ
Справочник.Товары КАК Товары
ГДЕ
Товары.Ссылка В
(ВЫБРАТЬ
РасхНаклСостав.Товар
ИЗ
Документ.РасхНакл.Состав КАК РасхНаклСостав
ГДЕ
РасхНаклСостав.Товар = Товары.Ссылка
)
===КОНЕЦ ПРИМЕРА ИЗ ФАЙЛА V8adddoc807.htm===
// Выбрать названия товаров, которые присутствовали в расходных накладных
ВЫБРАТЬ
Товары.Наименование
ИЗ
Справочник.Товары КАК Товары
ГДЕ
Товары.Ссылка В
(ВЫБРАТЬ
РасхНаклСостав.Товар
ИЗ
Документ.РасхНакл.Состав КАК РасхНаклСостав
ГДЕ
РасхНаклСостав.Товар = Товары.Ссылка
)
===КОНЕЦ ПРИМЕРА ИЗ ФАЙЛА V8adddoc807.htm===
Еще примеры использования коррелированных запросов:
Задача:
Как получить последние два курса по валютам?
1)Вариант с коррелированным запросом в соединении
ВЫБРАТЬ
КурсыВалютСрезПоследних.Валюта,
КурсыВалютСрезПоследних.Период КАК ПоследняяДата,
КурсыВалют.Период КАК ПредпоследняяДата,
КурсыВалютСрезПоследних.Курс КАК ПоследнийКурс,
КурсыВалют.Курс КАК ПредпоследнийКурс
ИЗ
РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалютСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
ПО ((КурсыВалют.Валюта, КурсыВалют.Период) В
(ВЫБРАТЬ
КурсыВалют.Валюта,
МАКСИМУМ(КурсыВалют.Период) КАК Период
ИЗ
РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
КурсыВалют.Период < КурсыВалютСрезПоследних.Период
И КурсыВалют.Валюта = КурсыВалютСрезПоследних.Валюта
СГРУППИРОВАТЬ ПО
КурсыВалют.Валюта))
КурсыВалютСрезПоследних.Период КАК ПоследняяДата,
КурсыВалют.Период КАК ПредпоследняяДата,
КурсыВалютСрезПоследних.Курс КАК ПоследнийКурс,
КурсыВалют.Курс КАК ПредпоследнийКурс
ИЗ
РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалютСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
ПО ((КурсыВалют.Валюта, КурсыВалют.Период) В
(ВЫБРАТЬ
КурсыВалют.Валюта,
МАКСИМУМ(КурсыВалют.Период) КАК Период
ИЗ
РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
КурсыВалют.Период < КурсыВалютСрезПоследних.Период
И КурсыВалют.Валюта = КурсыВалютСрезПоследних.Валюта
СГРУППИРОВАТЬ ПО
КурсыВалют.Валюта))
2)Самый элегантный вариант - коррелированным подзапросом с ВЫБРАТЬ ПЕРВЫЕ 2
ВЫБРАТЬ
ТаблицаРегистра.Период,
ТаблицаРегистра.Валюта,
ТаблицаРегистра.Курс
ИЗ
РегистрСведений.КурсыВалют КАК ТаблицаРегистра
ГДЕ
(ТаблицаРегистра.Валюта, ТаблицаРегистра.Период) В
(ВЫБРАТЬ ПЕРВЫЕ 2
КурсыВалют.Валюта,
КурсыВалют.Период КАК Период
ИЗ
РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
КурсыВалют.Валюта = ТаблицаРегистра.Валюта
УПОРЯДОЧИТЬ ПО
Период УБЫВ)