Получение Всех товаров в состав которых вхдят выбранные материалы

1. nikivr 09.01.25 01:38 Сейчас в теме
Коллеги, добрый день!

Подскажите пожалуйста, чет не могу сообразить (возможно завтра придет озарение конечно, надо переспать с этим))).
Задачка такая, в БП 3 нужно создать отчет на СКД, суть которого вывести все готовые изделия в которые входит список материалов, которые я указываю в параметрах отчета.

Запрос написал просто:

ВЫБРАТЬ
СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка КАК Изделие,
СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Материал,
СпецификацииНоменклатурыИсходныеКомплектующие.Количество КАК Количество
ИЗ
Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
ГДЕ
СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура В(&СписокСсылокМатериалов)


Но результат не идет, т.к. есть условие, что если мы к примеру указали материалы [мат1 и мат2], то выводим только те изделия, в которые входят ОБА материала, т.е. если в Изделие1 входит Мат1, а в Изделие2 входит мат2, а в Изделие3 входит мат1, мат2 и мат3 к примеру,
Если мы установили в Параметры: [мат1, мат2], то в результате нужно вывести только Изделие3 в таблицу и его составляющие.
Подозреваю что нужно с разностью таблиц работать, но чет пока не соображу как оптимально сделать запрос.
Или возможно результат придется собирать программно, чего не хотелось бы конечно.

При текущем запросе, выводятся все Изделия (Изделие1, Изделие2, Изделие3) т.к. где-то есть мат1, где-то мат2, а где-то и то и другое.

Подсобите пожалуйста, люди добрые))

Завтра утром, если никто не ответит, обязательно напишу свое решение.

Спасибо!
Прикрепленные файлы:
Найденные решения
12. nikivr 09.01.25 16:09 Сейчас в теме
В итоге вот так получилось и работает без вложенных запросов, только с временными таблицами, для большей читаемости:

ВЫБРАТЬ
	СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка КАК ГотовоеИзделие,
	СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Материал,
	СпецификацииНоменклатурыИсходныеКомплектующие.Количество КАК КоличествоШтукМатериалов
ПОМЕСТИТЬ ВТ_Спецификации
ИЗ
	Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
ГДЕ
	СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура В(&СписокСсылокМатериалов)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Спецификации.ГотовоеИзделие КАК ГотовоеИзделие
ПОМЕСТИТЬ ВТ_Изделия
ИЗ
	ВТ_Спецификации КАК ВТ_Спецификации

СГРУППИРОВАТЬ ПО
	ВТ_Спецификации.ГотовоеИзделие

ИМЕЮЩИЕ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_Спецификации.Материал) >= &КоличествоВыбранныхМатериалов
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Изделия.ГотовоеИзделие КАК ГотовоеИзделие,
	СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Материал,
	СпецификацииНоменклатурыИсходныеКомплектующие.Количество КАК КоличествоШтукМатериалов
ИЗ
	ВТ_Изделия КАК ВТ_Изделия
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
		ПО ВТ_Изделия.ГотовоеИзделие = СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка
Показать


Всех благодарю за обсуждения, С Новым Годом и Рождеством! :)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 80 09.01.25 08:06 Сейчас в теме
(1) Будет что-то вроде:

ВЫБРАТЬ
     Ссылка КАК Изделие
ПОМЕСТИТЬ ВТИзделия
ИЗ
    Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие
ГДЕ
    Номенклатура В(&СписокСсылокМатериалов)
СГРУППИРОВАТЬ ПО
    Ссылка 
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ НомерСтроки) >= 2
;
Выбрать
     Т1.Изделие,
     Т2.Номенклатура,
     Т2.Количество
ИЗ
     ВТИзделия КАК Т1
          ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК Т2
          ПО Т1.Изделие = Т2.Ссылка 
Показать
user1863362; +1 Ответить
3. nikivr 09.01.25 12:20 Сейчас в теме
(2) Спасибо! Но это не рабочее решение к сожалению, результат абсолютно такой-же получился, что и в моем случае, т.е. попадает лишнее изделие)

А если задуматься, что мы тут вообще делаем (1. Выбираем все изделия у которых в составе >= 2 я так понимаю ) иначе за что еще по логике отвечает эта конструкция
ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ НомерСтроки) >= 2

А если материалов в составе 5 и мы их укажем в параметрах?)

Не совсем понимаю логику решения
Прикрепленные файлы:
4. user1863362 09.01.25 12:29 Сейчас в теме
(3)
А если материалов в составе 5
То тебе надо указать 5 вместо 2
5. user1863362 09.01.25 12:32 Сейчас в теме
Если уж вообще непробиваемо в случае однаковых ссылок, то я бы написал
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура) В (
        ВЫБРАТЬ КОЛИЧЕСТВО(Ссылка) ИЗ Справочник.Номенклатура ГДЕ Ссылка В (&СписокСсылокМатериалов)
    )
6. nikivr 09.01.25 13:02 Сейчас в теме
(5) Благодарю конечно! У нас нет четкого условия, сколько и где материалов, по этому не подходит данное решение, увы
8. user2107191 09.01.25 13:46 Сейчас в теме
(6)
сколько и где материалов
Не смеши мои тапки. Массив комплектующих ты же заполняешь для условия запроса, а вот посчитать количество элементов в массиве уже не можешь?
10. nikivr 09.01.25 16:04 Сейчас в теме
(8) Тут согласен, хотелось как-то упростить и в запросе это сразу посчитать, но к сожалению не удалость из списка значений вытащить количество выбранных записей в СКД. А городить и выносить это в таблицу отдельную не хотелось
13. user1863362 09.01.25 18:19 Сейчас в теме
(10)
хотелось как-то упростить и в запросе это сразу посчитат
Пост (5) ты, конечно же, даже не пытался осознать...
7. nikivr 09.01.25 13:17 Сейчас в теме
Но все равно всем спасибо, натолкнули на мысль, сейчас проверю и напишу как надо было)
9. Fox-trot 163 09.01.25 14:40 Сейчас в теме
а не проще выгрузить массив во временную таблицу, а дальше иннержойнить?
11. nikivr 09.01.25 16:05 Сейчас в теме
(9) Мне кажется проще передать параметр в СКД, чем еще джойнить с еще одной таблицей ради этого)
12. nikivr 09.01.25 16:09 Сейчас в теме
В итоге вот так получилось и работает без вложенных запросов, только с временными таблицами, для большей читаемости:

ВЫБРАТЬ
	СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка КАК ГотовоеИзделие,
	СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Материал,
	СпецификацииНоменклатурыИсходныеКомплектующие.Количество КАК КоличествоШтукМатериалов
ПОМЕСТИТЬ ВТ_Спецификации
ИЗ
	Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
ГДЕ
	СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура В(&СписокСсылокМатериалов)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Спецификации.ГотовоеИзделие КАК ГотовоеИзделие
ПОМЕСТИТЬ ВТ_Изделия
ИЗ
	ВТ_Спецификации КАК ВТ_Спецификации

СГРУППИРОВАТЬ ПО
	ВТ_Спецификации.ГотовоеИзделие

ИМЕЮЩИЕ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_Спецификации.Материал) >= &КоличествоВыбранныхМатериалов
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Изделия.ГотовоеИзделие КАК ГотовоеИзделие,
	СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Материал,
	СпецификацииНоменклатурыИсходныеКомплектующие.Количество КАК КоличествоШтукМатериалов
ИЗ
	ВТ_Изделия КАК ВТ_Изделия
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
		ПО ВТ_Изделия.ГотовоеИзделие = СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка
Показать


Всех благодарю за обсуждения, С Новым Годом и Рождеством! :)
14. Fox-trot 163 09.01.25 19:51 Сейчас в теме
ВЫБРАТЬ
	СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка КАК Изделие,
	СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Материал,
	СпецификацииНоменклатурыИсходныеКомплектующие.Количество КАК Количество
ИЗ
	Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие1
		ПО (СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка = СпецификацииНоменклатурыИсходныеКомплектующие1.Ссылка)
ГДЕ
	СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура В(&СписокСсылокМатериалов)
	И СпецификацииНоменклатурыИсходныеКомплектующие1.Номенклатура В(&СписокСсылокМатериалов)
	И СпецификацииНоменклатурыИсходныеКомплектующие.НомерСтроки <> СпецификацииНоменклатурыИсходныеКомплектующие1.НомерСтроки
Показать
15. nikivr 09.01.25 23:24 Сейчас в теме
(14) Харош конечно, жму твою мужественную руку, все в одном запросе без временных таблиц, возможно этот вариант даже быстрее будет отрабатывать 100500 тысячах строк

Но привязываться к НомеруСтроки по мне так это так себе история. В реальных задачах особенно, когда в одном изделии один порядок материалов, в другом другой, и 150% что в какой-то момент столкнешся с такой историей и придется все переделывать.

Чисто мое субъективное мнение бро.

Если есть мысли на этот счет, можем обсудить без проблем
16. Fox-trot 163 10.01.25 00:30 Сейчас в теме
17. Fox-trot 163 10.01.25 00:30 Сейчас в теме
(16)
 ВЫБРАТЬ
	СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка КАК Изделие,
	СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Материал,
	СпецификацииНоменклатурыИсходныеКомплектующие.Количество КАК Количество
ИЗ
	Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
ГДЕ
	СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка В
			(ВЫБРАТЬ
				Исходные.Ссылка КАК Ссылка
			ИЗ
				Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК Исходные
					ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
						КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.Ссылка) КАК Количество
					ИЗ
						Справочник.Номенклатура КАК Номенклатура
					ГДЕ
						Номенклатура.Ссылка В (&СписокСсылокМатериалов)) КАК Материалы
					ПО
						ИСТИНА
			СГРУППИРОВАТЬ ПО
				Исходные.Ссылка,
				Материалы.Количество
			ИМЕЮЩИЕ
				КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Исходные.Номенклатура) >= Материалы.Количество) 
Показать
18. Fox-trot 163 10.01.25 02:41 Сейчас в теме
(17) пропустил ГДЕ Исходные.Номенклатура В (&СписокСсылокМатериалов)
Оставьте свое сообщение

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