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

1. korsar2001 14 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 67 27.09.23 15:41 Сейчас в теме
(1)
Не пойму как сюда припаять рекурсию

Использовать транзитивное замыкание.
Поиск сайту даст прямую ссылку на пример.
Sashares; +1 Ответить
Оставьте свое сообщение
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 100 000 руб.
Временный (на проект)

Разработчик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист
Санкт-Петербург
зарплата от 180 000 руб. до 240 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб. до 250 000 руб.
Полный день