Подзапрос в запросе в качестве поля выборки. Как сделать?

1. dklp 42 06.12.16 20:32 Сейчас в теме
1. Есть документ Реализация с табличной частью Товары:
Реализация.Ссылка, 
Реализация.Товары.(Номенклатура, Количество, ВидЦены, Цена, Сумма)

2. Есть документ Возврат с похожей табличной частью Товары, но без вида цены:
Возврат.Ссылка,
Возврат.Товары.(Номенклатура, Количество, Цена, Сумма, ДокументОснование)

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

Задача состоит в том, чтобы каждую строку Номенклатуры табличной части Возврат.Товары дополнить полем ВидЦены, которое необходимо взять из соответствующей строки Номенклатуры в табличной части Реализация.товары, где Реализация.Ссылка = ДокументОснование

Сейчас есть такой запрос:
Выбрать
	Возврат.Ссылка,
	Возврат.Товары (
		Номенклатура КАК НоменклатураВозврата, 
		Количество, 
		Цена, 
		Сумма,
		ДокументОснование )
ИЗ Документ.Возврат 
ГДЕ Возврат.Дата > &Дата
Показать

А нужно получить что-то вроде этого:
Выбрать
	Возврат.Ссылка, 
	Возврат.Товары (
		Номенклатура КАК НоменклатураВозврата, 
		Количество, 
		
		( Выбрать Реализация.Товары.ВидЦены 
		  ИЗ Документ.Реализация 
		  ГДЕ Документ.Реализация.Ссылка = ДокументОснование И Документ.Реализация.Товары.Номенклатура = НоменклатураВозврата ) , 
		
		Цена, 
		Сумма, 
		ДокументОснование )
ИЗ Документ.Возврат 
ГДЕ Возврат.Дата > &Дата
Показать

Помогите, пожалуйста, реализовать такой запрос.
Вознаграждение за ответ
Показать полностью
Найденные решения
2. Nevskiy 06.12.16 20:58 Сейчас в теме +1 $m
ВЫБРАТЬ
    ВозвратТовары.Ссылка,
    ВозвратТовары.Номенклатура,
    ВозвратТовары.Количество,
    ВозвратТовары.Цена,
    ВозвратТовары.Сумма,
    ВозвратТовары.ДокументОснование,
    РеализацияТовары.ВидЦены
ИЗ
	Документ.Возврат.Товары КАК ВозвратТовары
	
	ЛЕВОЕ СОЕДИНЕНИЕ
	
		Документ.Реализация.Товары КАК РеализацияТовары
		
	ПО
		РеализацияТовары.Ссылка = ВозвратТовары.ДокументОснование
		И РеализацияТовары.Номенклатура = ВозвратТовары.Номенклатура

ГДЕ 
	Возврат.Дата > &Дата
Показать

Поместите это в виртуальную таблицу, а потом играйтесь как хотите.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Fox-trot 158 06.12.16 21:15 Сейчас в теме
(1) возможно так
ВЫБРАТЬ
	ВозвратТоваровОтПокупателяТовары.Номенклатура,
	ВозвратТоваровОтПокупателяТовары.Количество,
	ВозвратТоваровОтПокупателяТовары.Цена,
	ВозвратТоваровОтПокупателяТовары.Сумма,
	РеализацияТоваровУслугТовары.ВидЦены
ИЗ
	Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
		ПО ВозвратТоваровОтПокупателяТовары.ДокументОснование = РеализацияТоваровУслугТовары.Ссылка
			И ВозвратТоваровОтПокупателяТовары.Номенклатура = РеализацияТоваровУслугТовары.Номенклатура
ГДЕ
	ВозвратТоваровОтПокупателяТовары.Ссылка = &Ссылка
Показать
2. Nevskiy 06.12.16 20:58 Сейчас в теме +1 $m
ВЫБРАТЬ
    ВозвратТовары.Ссылка,
    ВозвратТовары.Номенклатура,
    ВозвратТовары.Количество,
    ВозвратТовары.Цена,
    ВозвратТовары.Сумма,
    ВозвратТовары.ДокументОснование,
    РеализацияТовары.ВидЦены
ИЗ
	Документ.Возврат.Товары КАК ВозвратТовары
	
	ЛЕВОЕ СОЕДИНЕНИЕ
	
		Документ.Реализация.Товары КАК РеализацияТовары
		
	ПО
		РеализацияТовары.Ссылка = ВозвратТовары.ДокументОснование
		И РеализацияТовары.Номенклатура = ВозвратТовары.Номенклатура

ГДЕ 
	Возврат.Дата > &Дата
Показать

Поместите это в виртуальную таблицу, а потом играйтесь как хотите.
4. dklp 42 06.12.16 21:37 Сейчас в теме
(2)
Возврат.Дата > &Дата
ругался на эту строку. нужно к дате из табличной части через ссылку обращаться (ВозвратТовары.Ссылка.Дата)

ниже приведу рабочий код с реальными документами из Управления Торговлей:
ВЫБРАТЬ
	ВозвратТоваровОтКлиента.Ссылка,
	ВозвратТоваровОтКлиента.НомерСтроки,
	ВозвратТоваровОтКлиента.Номенклатура,
	ВозвратТоваровОтКлиента.Количество,
	ВозвратТоваровОтКлиента.Цена,
	ВозвратТоваровОтКлиента.Сумма,
	ВозвратТоваровОтКлиента.ДокументРеализации,
	РеализацияТоваровУслуг.ВидЦены
ИЗ
	Документ.ВозвратТоваровОтКлиента.Товары КАК ВозвратТоваровОтКлиента
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
ПО (РеализацияТоваровУслуг.Ссылка = ВозвратТоваровОтКлиента.ДокументРеализации.Ссылка)
	И (РеализацияТоваровУслуг.Номенклатура = ВозвратТоваровОтКлиента.Номенклатура)
ГДЕ 	ВозвратТоваровОтКлиента.Ссылка.Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода
Показать
вопрос решен. всем спасибо.
5. Fox-trot 158 07.12.16 07:07 Сейчас в теме
(4) видцены у всей номенклатуры проставляется? если "да", то поправьте соединение
6. dklp 42 07.12.16 12:00 Сейчас в теме
(5) в документе Реализации вид цены может быть и не указан (иногда цена заполняется не по виду цен, а произвольно).
7. dklp 42 07.12.16 14:53 Сейчас в теме
я заметил, что мой запрос все-таки не очень оптимален с точки зрения скорости выполнения.
ниже один из способов, позволяющий значительно ускорить выполнение запроса (фишка в том, чтобы соединить табличную часть документа с самим документом и отбор по периоду вести исходя из даты документа):
ВЫБРАТЬ
    ВозвратТоваровОтКлиентаТовары.Ссылка,
    ВозвратТоваровОтКлиентаТовары.НомерСтроки,
    ВозвратТоваровОтКлиентаТовары.Номенклатура,
    ВозвратТоваровОтКлиентаТовары.Количество,
    ВозвратТоваровОтКлиентаТовары.Цена,
    ВозвратТоваровОтКлиентаТовары.Сумма,
    ВозвратТоваровОтКлиентаТовары.ДокументРеализации,
    РеализацияТоваровУслугТовары.ВидЦены
ИЗ
	Документ.ВозвратТоваровОтКлиента КАК ВозвратТоваровОтКлиента

ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВозвратТоваровОтКлиента.Товары КАК ВозвратТоваровОтКлиентаТовары
ПО ВозвратТоваровОтКлиента.Ссылка =  ВозвратТоваровОтКлиентаТовары.Ссылка

ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ПО (РеализацияТоваровУслугТовары.Ссылка = ВозвратТоваровОтКлиентаТовары.ДокументРеализации.Ссылка)
    И (РеализацияТоваровУслугТовары.Номенклатура = ВозвратТоваровОтКлиентаТовары.Номенклатура)


ГДЕ
	ВозвратТоваровОтКлиента.Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода 
Показать

в общем, результат тот же, но запрос выполняется значительно быстрее
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот