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

Например, мы хотим выбрать все документы "Заказ клиента" за какой-то период и соединить каждый из них со своим значением дополнительного сведения "Вип заказ", которое имеет тип "Булево" и хранится в регистре сведений "Дополнительные сведения".

Нужно помнить, что в указанном регистре сведений находятся не все документы "Заказ клиента", а только те, у которых значение дополнительного сведения "Вип заказ" установлено в "Да".

Итак, пишем запрос:

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|	ЗаказыКлиентов.Ссылка КАК ЗаказКлиента,
|	ДополнительныеСведения.Значение КАК ЭтоВипЗаказ
|ИЗ
|	Документ.ЗаказКлиента КАК ЗаказыКлиентов
|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|		ПО (ЗаказыКлиентов.Ссылка = ДополнительныеСведения.Объект)
|ГДЕ
|	ДополнительныеСведения.Свойство = &СвойствоДопСведения";

Запрос.УстановитьПараметр("СвойствоДопСведения", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Вип заказ (Список заказов клиентов)");
Запрос.Выполнить();

В выборке этого запроса мы увидим результат не "Левого соединения", которое мы указали в тексте запроса, а "Внутреннего соединения". В выборке окажутся только те документы "Заказ клиента", которые присутствуют в правой таблице – "ДополнительныеСведения".

Чтобы избежать такую ситуацию, нужно использовать временную таблицу или вложенный запрос.

Решение с использованием временной таблицы:

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|	ДополнительныеСведения.Объект КАК ЗаказКлиента,
|	ДополнительныеСведения.Значение КАК ЭтоВипЗаказ
|ПОМЕСТИТЬ ДополнительныеСведения
|ИЗ
|	РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
|	ДополнительныеСведения.Свойство = &СвойствоДопСведения
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|	ЗаказыКлиентов.Ссылка КАК ЗаказКлиента,
|	ДополнительныеСведения.ЭтоВипЗаказ КАК ЭтоВипЗаказ
|ИЗ
|	Документ.ЗаказКлиента КАК ЗаказыКлиентов
|		ЛЕВОЕ СОЕДИНЕНИЕ ДополнительныеСведения КАК ДополнительныеСведения
|		ПО ЗаказыКлиентов.Ссылка = ДополнительныеСведения.ЗаказКлиента";

Запрос.УстановитьПараметр("СвойствоДопСведения", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Вип заказ (Список заказов клиентов)");
Запрос.Выполнить();

Решение с использованием вложенного запроса:

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|	ЗаказыКлиентов.Ссылка КАК ЗаказКлиента,
|	ДополнительныеСведения.ЭтоВипЗаказ КАК ЭтоВипЗаказ
|ИЗ
|	Документ.ЗаказКлиента КАК ЗаказыКлиентов
|		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
|			ДополнительныеСведения.Объект КАК ЗаказКлиента,
|			ДополнительныеСведения.Значение КАК ЭтоВипЗаказ
|		ИЗ
|			РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|		ГДЕ
|			ДополнительныеСведения.Свойство = &СвойствоДопСведения) КАК ДополнительныеСведения
|		ПО (ЗаказыКлиентов.Ссылка = ДополнительныеСведения.ЗаказКлиента)";

Запрос.УстановитьПараметр("СвойствоДопСведения", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Вип заказ (Список заказов клиентов)");
Запрос.Выполнить();

Оба эти варианты запросов дадут в итоге настоящее "Левое соединение": в выборку попадут все документы "Заказ клиента" из левой таблицы и значения дополнительного сведения из правой таблицы для тех документов, у которых это сведение задано.