Коллеги, добрый день!

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

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

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

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

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

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

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

Спасибо!
---
В итоге вот так получилось и работает без вложенных запросов, только с временными таблицами, для большей читаемости:

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

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

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

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

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

Всех благодарю за обсуждения, С Новым Годом и Рождеством! :)
---
Будет что-то вроде:

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

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

Не совсем понимаю логику решения
---
А если материалов в составе 5То тебе надо указать 5 вместо 2
---
Если уж вообще непробиваемо в случае однаковых ссылок, то я бы написал

```1c
    ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура) В (
    ВЫБРАТЬ КОЛИЧЕСТВО(Ссылка) ИЗ Справочник.Номенклатура ГДЕ Ссылка В (&СписокСсылокМатериалов)
    )
```
---
Благодарю конечно! У нас нет четкого условия, сколько и где материалов, по этому не подходит данное решение, увы
---
сколько и где материалов Не смеши мои тапки. Массив комплектующих ты же заполняешь для условия запроса, а вот посчитать количество элементов в массиве уже не можешь?
---
Тут согласен, хотелось как-то упростить и в запросе это сразу посчитать, но к сожалению не удалость из списка значений вытащить количество выбранных записей в СКД. А городить и выносить это в таблицу отдельную не хотелось
---
хотелось как-то упростить и в запросе это сразу посчитатПост (5) ты, конечно же, даже не пытался осознать...
---
Но все равно всем спасибо, натолкнули на мысль, сейчас проверю и напишу как надо было)
---
а не проще выгрузить массив во временную таблицу, а дальше иннержойнить?
---
Мне кажется проще передать параметр в СКД, чем еще джойнить с еще одной таблицей ради этого)
---
В итоге вот так получилось и работает без вложенных запросов, только с временными таблицами, для большей читаемости:

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

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

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

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

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

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

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

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

Если есть мысли на этот счет, можем обсудить без проблем
---
без номеров
---
```1c
    ВЫБРАТЬ
    СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка КАК Изделие,
    СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Материал,
    СпецификацииНоменклатурыИсходныеКомплектующие.Количество КАК Количество
    ИЗ
    Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
    ГДЕ
    СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка В
    (ВЫБРАТЬ
    Исходные.Ссылка КАК Ссылка
    ИЗ
    Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК Исходные
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.Ссылка) КАК Количество
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ГДЕ
    Номенклатура.Ссылка В (&СписокСсылокМатериалов)) КАК Материалы
    ПО
    ИСТИНА
    СГРУППИРОВАТЬ ПО
    Исходные.Ссылка,
    Материалы.Количество
    ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Исходные.Номенклатура) >= Материалы.Количество)
```
---
пропустил ГДЕ Исходные.Номенклатура В (&СписокСсылокМатериалов)