ERP 2.5 Запрос по сбору веса продукции

1. korsar2001 15 27.09.23 15:12 Сейчас в теме
Написал запрос по сбору веса продукции из затраченных материалов
Может у кого есть идеи для оптимизации?
У меня не больше 4 уровней вложенности, как сделать независимо от количества уровней?
Не пойму как сюда припаять рекурсию

ВЫБРАТЬ
	ЭтапПроизводства2_2ВыходныеИзделия.Ссылка КАК Ссылка,
	ЭтапПроизводства2_2ВыходныеИзделия.Номенклатура КАК Номенклатура,
	СУММА(ЭтапПроизводства2_2ВыходныеИзделия.Количество) КАК Количество
ПОМЕСТИТЬ ВТ_ВЫПУСК
ИЗ
	Документ.ЭтапПроизводства2_2.ВыходныеИзделия КАК ЭтапПроизводства2_2ВыходныеИзделия
ГДЕ
	ЭтапПроизводства2_2ВыходныеИзделия.Ссылка.НаправлениеДеятельности = &НД
СГРУППИРОВАТЬ ПО
	ЭтапПроизводства2_2ВыходныеИзделия.Ссылка
	,ЭтапПроизводства2_2ВыходныеИзделия.Номенклатура  
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Ссылка КАК Ссылка,
	СУММА(ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Количество * Ном.ВесЧислитель / ВЫБОР
		КОГДА Ном.ВесЗнаменатель = 0
			ТОГДА 1
		ИНАЧЕ Ном.ВесЗнаменатель
	КОНЕЦ * Ном.ЕдиницаИзмерения.Числитель / ВЫБОР
		КОГДА Ном.ЕдиницаИзмерения.Знаменатель = 0
			ТОГДА 1
		ИНАЧЕ Ном.ЕдиницаИзмерения.Знаменатель
	КОНЕЦ) КАК ВЕС
ПОМЕСТИТЬ ВТ_ЭтапыВЕСматериалы1
ИЗ
	Документ.ЭтапПроизводства2_2.ОбеспечениеМатериаламиИРаботами КАК ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Ном
		ПО (ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Номенклатура = Ном.Ссылка)
ГДЕ
	ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Ссылка.НаправлениеДеятельности = &НД
СГРУППИРОВАТЬ ПО
	ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Ссылка

ИМЕЮЩИЕ
	СУММА(ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Количество * Ном.ВесЧислитель / ВЫБОР
		КОГДА Ном.ВесЗнаменатель = 0
			ТОГДА 1
		ИНАЧЕ Ном.ВесЗнаменатель
	КОНЕЦ * Ном.ЕдиницаИзмерения.Числитель / ВЫБОР
		КОГДА Ном.ЕдиницаИзмерения.Знаменатель = 0
			ТОГДА 1
		ИНАЧЕ Ном.ЕдиницаИзмерения.Знаменатель
	КОНЕЦ) > 0
;


////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	//вт.Ссылка
	вт.Номенклатура
	,СУММА(вт.Количество)
	,Сумма(втВес.ВЕС)	
ПОМЕСТИТЬ ВТ_ЭтапыВЕС_Выпуск1
ИЗ
	ВТ_ВЫПУСК КАК вт
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЭтапыВЕСматериалы1 КАК втВЕС ПО втВЕС.Ссылка=вт.Ссылка
СГРУППИРОВАТЬ ПО	
	//вт.Ссылка
	вт.Номенклатура
ИМЕЮЩИЕ
	Сумма(втВес.ВЕС)>0
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Ссылка КАК Ссылка,
	СУММА(ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Количество * 
		Ном.ВЕС/Ном.Количество) КАК ВЕС
ПОМЕСТИТЬ ВТ_ЭтапыВЕСматериалы2
ИЗ
	Документ.ЭтапПроизводства2_2.ОбеспечениеМатериаламиИРаботами КАК ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЭтапыВЕС_Выпуск1 КАК Ном
		ПО (ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Номенклатура = Ном.Номенклатура)
ГДЕ
	ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Ссылка.НаправлениеДеятельности = &НД
СГРУППИРОВАТЬ ПО
	ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Ссылка
ИМЕЮЩИЕ
	СУММА(ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Количество * 
		Ном.Количество/Ном.ВЕС)>0

;
////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	вт.Номенклатура
	,Сумма(вт.Количество)
	,Сумма(втВес.ВЕС) КАК ВЕС	
ПОМЕСТИТЬ ВТ_ЭтапыВЕС_Выпуск2
ИЗ
	ВТ_ВЫПУСК КАК вт
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЭтапыВЕСматериалы1 КАК втВЕС ПО втВЕС.Ссылка=вт.Ссылка
СГРУППИРОВАТЬ ПО	
	вт.Номенклатура
ИМЕЮЩИЕ
	Сумма(втВес.ВЕС)>0
ОБЪЕДИНИТЬ
ВЫБРАТЬ
	вт.Номенклатура
	,Сумма(вт.Количество)
	,Сумма(втВес.ВЕС) КАК ВЕС	
ИЗ
	ВТ_ВЫПУСК КАК вт
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЭтапыВЕСматериалы2 КАК втВЕС ПО втВЕС.Ссылка=вт.Ссылка
СГРУППИРОВАТЬ ПО	
	вт.Номенклатура
ИМЕЮЩИЕ
	Сумма(втВес.ВЕС)>0

;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Ссылка КАК Ссылка,
	СУММА(ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Количество * 
		Ном.ВЕС/Ном.Количество) КАК ВЕС
ПОМЕСТИТЬ ВТ_ЭтапыВЕСматериалы3
ИЗ
	Документ.ЭтапПроизводства2_2.ОбеспечениеМатериаламиИРаботами КАК ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЭтапыВЕС_Выпуск2 КАК Ном
		ПО (ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Номенклатура = Ном.Номенклатура)
ГДЕ
	ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Ссылка.НаправлениеДеятельности = &НД
СГРУППИРОВАТЬ ПО
	ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Ссылка
ИМЕЮЩИЕ
	СУММА(ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Количество * 
		Ном.Количество/Ном.ВЕС)>0
;
////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	вт.Номенклатура
	,Сумма(вт.Количество)
	,Сумма(втВес.ВЕС) КАК ВЕС	
ПОМЕСТИТЬ ВТ_ЭтапыВЕС_Выпуск3
ИЗ
	ВТ_ВЫПУСК КАК вт
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЭтапыВЕСматериалы1 КАК втВЕС ПО втВЕС.Ссылка=вт.Ссылка
СГРУППИРОВАТЬ ПО	
	вт.Номенклатура
ИМЕЮЩИЕ
	Сумма(втВес.ВЕС)>0
ОБЪЕДИНИТЬ
ВЫБРАТЬ
	вт.Номенклатура
	,Сумма(вт.Количество)
	,Сумма(втВес.ВЕС) КАК ВЕС	
ИЗ
	ВТ_ВЫПУСК КАК вт
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЭтапыВЕСматериалы2 КАК втВЕС ПО втВЕС.Ссылка=вт.Ссылка
СГРУППИРОВАТЬ ПО	
	вт.Номенклатура
ИМЕЮЩИЕ
	Сумма(втВес.ВЕС)>0
ОБЪЕДИНИТЬ
ВЫБРАТЬ
	вт.Номенклатура
	,Сумма(вт.Количество)
	,Сумма(втВес.ВЕС) КАК ВЕС	
ИЗ
	ВТ_ВЫПУСК КАК вт
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЭтапыВЕСматериалы3 КАК втВЕС ПО втВЕС.Ссылка=вт.Ссылка
СГРУППИРОВАТЬ ПО	
	вт.Номенклатура
ИМЕЮЩИЕ
	Сумма(втВес.ВЕС)>0
;
////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Ссылка КАК Ссылка,
	СУММА(ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Количество * 
		Ном.ВЕС/Ном.Количество) КАК ВЕС
ПОМЕСТИТЬ ВТ_ЭтапыВЕСматериалы4
ИЗ
	Документ.ЭтапПроизводства2_2.ОбеспечениеМатериаламиИРаботами КАК ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЭтапыВЕС_Выпуск3 КАК Ном
		ПО (ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Номенклатура = Ном.Номенклатура)
ГДЕ
	ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Ссылка.НаправлениеДеятельности = &НД
СГРУППИРОВАТЬ ПО
	ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Ссылка
ИМЕЮЩИЕ
	СУММА(ЭтапПроизводства2_2ОбеспечениеМатериаламиИРаботами.Количество * 
		Ном.Количество/Ном.ВЕС)>0  
;
////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	вт.Номенклатура
	,Сумма(вт.Количество)
	,Сумма(втВес.ВЕС) КАК ВЕС	
ПОМЕСТИТЬ ВТ_ЭтапыВЕС_Выпуск4
ИЗ
	ВТ_ВЫПУСК КАК вт
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЭтапыВЕСматериалы1 КАК втВЕС ПО втВЕС.Ссылка=вт.Ссылка
СГРУППИРОВАТЬ ПО	
	вт.Номенклатура
ИМЕЮЩИЕ
	Сумма(втВес.ВЕС)>0
ОБЪЕДИНИТЬ
ВЫБРАТЬ
	вт.Номенклатура
	,Сумма(вт.Количество)
	,Сумма(втВес.ВЕС) КАК ВЕС	
ИЗ
	ВТ_ВЫПУСК КАК вт
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЭтапыВЕСматериалы2 КАК втВЕС ПО втВЕС.Ссылка=вт.Ссылка
СГРУППИРОВАТЬ ПО	
	вт.Номенклатура
ИМЕЮЩИЕ
	Сумма(втВес.ВЕС)>0
ОБЪЕДИНИТЬ
ВЫБРАТЬ
	вт.Номенклатура
	,Сумма(вт.Количество)
	,Сумма(втВес.ВЕС) КАК ВЕС	
ИЗ
	ВТ_ВЫПУСК КАК вт
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЭтапыВЕСматериалы3 КАК втВЕС ПО втВЕС.Ссылка=вт.Ссылка
СГРУППИРОВАТЬ ПО	
	вт.Номенклатура
ИМЕЮЩИЕ
	Сумма(втВес.ВЕС)>0
ОБЪЕДИНИТЬ
ВЫБРАТЬ
	вт.Номенклатура
	,Сумма(вт.Количество)
	,Сумма(втВес.ВЕС) КАК ВЕС	
ИЗ
	ВТ_ВЫПУСК КАК вт
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЭтапыВЕСматериалы4 КАК втВЕС ПО втВЕС.Ссылка=вт.Ссылка
СГРУППИРОВАТЬ ПО	
	вт.Номенклатура
ИМЕЮЩИЕ
	Сумма(втВес.ВЕС)>0
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 27.09.23 15:41 Сейчас в теме
(1)
Не пойму как сюда припаять рекурсию

Использовать транзитивное замыкание.
Поиск сайту даст прямую ссылку на пример.
Sashares; +1 Ответить
Оставьте свое сообщение

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