Добрый день, на собеседовании встретилась задачка, которую я не смогу решить, хочу разобраться для себя как вообще в теории можно такое реализовать:
Вводные данные - Есть 2 Справочника: Номенклатура(Код, Наименование) и Варианты Производства(тч.ГотоваяПродукция, тч.Материалы)

_________________________________Готовая продукция ____ Материалы
Например Вариант Комплекта №1 :___Номенклатура №1 ____ Номенклатура №2
_____________________________________________________ Номенклатура №3

 Например Вариант Комплекта №2 : __Номенклатура №1 ____ Номенклатура №2
________________________________ Номенклатура №4 ____ Номенклатура №3

Задача: создать отчет который отобразит Вариант Производства удовлетворяющий отборам.
Отчет должен быть построен на СКД, в отчете разрешается использовать Набор данных Объект.

Например запрос с отбором: ГотоваяПродукция - Номенклатура№1 , Материалы - Номенклатура №2, №3 вернет Вариант Комплекта № 1,
а запрос с отбором ГотоваяПродукция - Номенклатура№1,№2, Материалы - Номенклатура№2, №3 вернет пустой результат.

Если бы отчет не нужно было строить не на скд, тогда задача была бы вполне решаема, но я совсем не понимаю как соединить набор данных объект с табличной частью и применить условие "Имеющие".
---
Решил все таки, долго тупил оказывается все просто, но костыльно... Мой запрос:

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

    ИНДЕКСИРОВАТЬ ПО
    Номенклатура
    ;

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

    СГРУППИРОВАТЬ ПО
    СпецификацииНоменклатурыВыходныеИзделия.Ссылка

    ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ втВЫходныеИзделия.Номенклатура) = КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СпецификацииНоменклатурыВыходныеИзделия.Номенклатура)
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    втСовпадПоКоличеству.Ссылка КАК Ссылка,
    МИНИМУМ(ЕСТЬNULL(СпецификацииНоменклатурыВыходныеИзделия.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) КАК Номенклатура,
    МИНИМУМ(ЕСТЬNULL(втВЫходныеИзделия.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) КАК Номенклатура1
    ПОМЕСТИТЬ втСовпадПоВыходнымИзделиям
    ИЗ
    втСовпадПоКоличеству КАК втСовпадПоКоличеству
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры.ВыходныеИзделия КАК СпецификацииНоменклатурыВыходныеИзделия
    ПОЛНОЕ СОЕДИНЕНИЕ втВЫходныеИзделия КАК втВЫходныеИзделия
    ПО (втВЫходныеИзделия.Номенклатура = СпецификацииНоменклатурыВыходныеИзделия.Номенклатура)
    ПО втСовпадПоКоличеству.Ссылка = СпецификацииНоменклатурыВыходныеИзделия.Ссылка

    СГРУППИРОВАТЬ ПО
    втСовпадПоКоличеству.Ссылка

    ИМЕЮЩИЕ
    МИНИМУМ(ЕСТЬNULL(СпецификацииНоменклатурыВыходныеИзделия.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) И
    МИНИМУМ(ЕСТЬNULL(втВЫходныеИзделия.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)

    ИНДЕКСИРОВАТЬ ПО
    Ссылка
    ;

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

    ИНДЕКСИРОВАТЬ ПО
    Номенклатура
    ;

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

    СГРУППИРОВАТЬ ПО
    СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка

    ИМЕЮЩИЕ
    МИНИМУМ(ЕСТЬNULL(СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) И
    МИНИМУМ(ЕСТЬNULL(втИсходящиеКомплектующие.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
```
---
Решил все таки, долго тупил оказывается все просто, но костыльно... Мой запрос:

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

    ИНДЕКСИРОВАТЬ ПО
    Номенклатура
    ;

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

    СГРУППИРОВАТЬ ПО
    СпецификацииНоменклатурыВыходныеИзделия.Ссылка

    ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ втВЫходныеИзделия.Номенклатура) = КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СпецификацииНоменклатурыВыходныеИзделия.Номенклатура)
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    втСовпадПоКоличеству.Ссылка КАК Ссылка,
    МИНИМУМ(ЕСТЬNULL(СпецификацииНоменклатурыВыходныеИзделия.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) КАК Номенклатура,
    МИНИМУМ(ЕСТЬNULL(втВЫходныеИзделия.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) КАК Номенклатура1
    ПОМЕСТИТЬ втСовпадПоВыходнымИзделиям
    ИЗ
    втСовпадПоКоличеству КАК втСовпадПоКоличеству
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры.ВыходныеИзделия КАК СпецификацииНоменклатурыВыходныеИзделия
    ПОЛНОЕ СОЕДИНЕНИЕ втВЫходныеИзделия КАК втВЫходныеИзделия
    ПО (втВЫходныеИзделия.Номенклатура = СпецификацииНоменклатурыВыходныеИзделия.Номенклатура)
    ПО втСовпадПоКоличеству.Ссылка = СпецификацииНоменклатурыВыходныеИзделия.Ссылка

    СГРУППИРОВАТЬ ПО
    втСовпадПоКоличеству.Ссылка

    ИМЕЮЩИЕ
    МИНИМУМ(ЕСТЬNULL(СпецификацииНоменклатурыВыходныеИзделия.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) И
    МИНИМУМ(ЕСТЬNULL(втВЫходныеИзделия.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)

    ИНДЕКСИРОВАТЬ ПО
    Ссылка
    ;

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

    ИНДЕКСИРОВАТЬ ПО
    Номенклатура
    ;

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

    СГРУППИРОВАТЬ ПО
    СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка

    ИМЕЮЩИЕ
    МИНИМУМ(ЕСТЬNULL(СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) И
    МИНИМУМ(ЕСТЬNULL(втИсходящиеКомплектующие.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
```
---
Отчет должен быть построен на СКД, в отчете разрешается использовать Набор данных Объект.
Тут как бы прямым текстом говорится, что данные для отчета можно подготовить как угодно, поместить в ТЗ и ее использовать как Набор данных Объект.
Программное формирование отчета. Получение параметров отчета: материалов и готовой продукции. По ним получение нужных данных и помещение их в ТЗ. Передать ТЗ в отчет как Объект набора данных. Вывод отчета в СКД.
---
Изначально я так же подумал, в итоге получил ответ: "Задание выполнено некорректно. Требуется получить все необходимые данные одним запросом (в СКД), постобработки быть не должно".
---
постобработка это совсем другое.

Но если нужно именно одним запросом, то можно так:

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

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

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

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_ДанныеНоменклатур.Ссылка КАК Ссылка,
    МИНИМУМ(ВТ_ДанныеНоменклатур.Изделия В (&ВыходныеИзделия)) КАК СоответствиеИзделий,
    КОЛИЧЕСТВО(Различные ВТ_ДанныеНоменклатур.Изделия) КАК КоличествоИзделий,
    МИНИМУМ(ВТ_ДанныеНоменклатур.Комплектующие В (&ИсходныеКомплектующие)) КАК СоответствиеКомплектующих,
    КОЛИЧЕСТВО(Различные ВТ_ДанныеНоменклатур.Комплектующие) КАК КоличествоКомплектующих
    ПОМЕСТИТЬ ВТ
    ИЗ
    ВТ_ДанныеНоменклатур КАК ВТ_ДанныеНоменклатур

    СГРУППИРОВАТЬ ПО
    ВТ_ДанныеНоменклатур.Ссылка
    ;

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

```1c
    ВЫБРАТЬ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.Ссылка) КАК Ссылка
    ПОМЕСТИТЬ мНом
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ГДЕ
    Номенклатура.Ссылка В(&Номенклатура)
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТребованиеНакладнаяМатериалы.Номенклатура) КАК Номенклатура,
    ТребованиеНакладнаяМатериалы.Ссылка
    ПОМЕСТИТЬ мДок
    ИЗ
    Документ.ТребованиеНакладная.Материалы КАК ТребованиеНакладнаяМатериалы
    ГДЕ
    ТребованиеНакладнаяМатериалы.Ссылка = &Ссылка
    И ТребованиеНакладнаяМатериалы.Номенклатура В(&Номенклатура)

    СГРУППИРОВАТЬ ПО
    ТребованиеНакладнаяМатериалы.Ссылка
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    мДок.Ссылка
    ИЗ
    мНом КАК мНом
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ мДок КАК мДок
    ПО мНом.Ссылка = мДок.Номенклатура
```
---
Я правильно понимаю, что в справочнике "Варианты Производства" каждая строка ТЧ "Готова продукция" связана с определенными строками ТЧ "Материалы"? Т.е. в варианте комплекта № 2 производится 2 изделия: 1. Номенклатура 1, состоит из Номенклатура 1; 2. Номенклатура 4, состоит из Номенклатура 3.
---
Нет, ТЧ ни как не связаны. Метод "Все на все"
---
Что производится в варианте комплекта № 2?
---
Номенклатура № 1 и № 4, используя №3 и № 2
---
Краткость сестра таланта, конечно, но хотелось бы видеть более развернутые ответы.
Т.е. в варианте комплекта № 2 будет создано 2 изделия: 1. Номенклатура 1 состоящая из материалов: Номенклатура 1, Номенклатура 3; Номенклатура 4 состоящая из материалов: Номенклатура 1, Номенклатура 3.
---
Потаюсь ответить развернуто: Из комплекта №2 будет произведено 2 изделия, это Номенклатура №1 и Номенклатура № 4(Приход), использованы будут Номенклатура № 2 и Номенклатура № 3(Расход). ТЧ ни как не связаны и мы не знаем Из чего состоит Номенклатура №1 и Номенклатура №4. Просто 2 номенклатуры попадают в расход, 2 номенклатуры попадают в приход.
---
Понял теперь.
Вот, вроде получилось.
---
Уже решил задачку несколько часов назад.
---
Задача: создать отчет который отобразит Вариант Производства удовлетворяющий отборам.
Зачем нужны КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ) ??? У меня 3 пакета в запросе, ди и те сделаны для наглядности.
ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) это условие имеет какой-то сакральный смысл?
---
Смысл в том что бы отобрать те номенклатуры строки из группировки, где при полном соединении результатом стал null.
---
Я не разглядел условие. Сейчас понял. А мой варик некорректно работает?
---
В Вашем отчете я даже не могу выбрать соответствующий отбор по которому хочу найти Вариант комплекта. В задании это называется отбор, но по факту это не отбор скд, а параметр с типом список значений.
---
Например запрос с отбором: ГотоваяПродукция - Номенклатура№1 , Материалы - Номенклатура №2, №3 вернет Вариант Комплекта № 1
Речь идет про отбор по двум полям: готовая продукция и материал. Изменить вид условия труда не составляет.
---
Я всегда думал, что СКД - это такая умная экселина, которая на результирующей выборке просто применяет "автофильтр". В итоге все сводится к тому, чтобы выплюнуть результирующую выборку, которая будет отфильтрована юзером с помощью отборов. В итоге весь запрос - это:

```1c
    Выбрать
    М.Ссылка КАК Комплект,
    М.Материал,
    П.Продукция
    ИЗ Комплекты.Материалы КАК М
    ЛЕВОЕ СОЕДИНЕНИЕ Комплекты.Продукция КАК П
    ПО М.Ссылка = П.Ссылка
```
Так что не вижу необходимости героически свергать горы и писать тонну кода для этого.
---
Мне кажется мы совершенно не понимаем друг друга, возможно тут моя вина, видимо постановку задачи я сделал крайне непонятно. Попробуйте свои отчеты вставить в данную конфигурацию.
---
Вот же. Те же самые условия.
---
А где в вашем условии Номенклатура № 6 в Изделиях?
Или добавьте любую номенклатуру в выходные изделия, Ваш отчет продолжить показывать Вариант комплектации № 2, хотя отбор уже не будет соответствовать. Эту задачу отбором СКД не решить.
Я уже понял что я облажался с постановкой задачи.
Да простят меня те кто выдал это задание...
---
Да простят меня те кто выдал это задание...Ну так "ПОЛНОЕ" - это уже другое дело )))
---
Вот так реализовал.
Решение взято отсюда https://infostart.ru/1c/articles/336783/
Из нюансов: из коробки работает для справочника номенклатура с длинной кода 10 и состоящего только из цифр.
В закрепе dt и схема СКД.

```1c
    ВЫБРАТЬ
    1 КАК Позиция, 1 КАК ЧленРяда
    ПОМЕСТИТЬ СтепеннойРяд
    ОБЪЕДИНИТЬ ВЫБРАТЬ 2, 31
    ОБЪЕДИНИТЬ ВЫБРАТЬ 3, 961
    ОБЪЕДИНИТЬ ВЫБРАТЬ 4, 29791
    ОБЪЕДИНИТЬ ВЫБРАТЬ 5, 923521
    ОБЪЕДИНИТЬ ВЫБРАТЬ 6, 28629151
    ОБЪЕДИНИТЬ ВЫБРАТЬ 7, 887503681
    ОБЪЕДИНИТЬ ВЫБРАТЬ 8, 1742810335
    ОБЪЕДИНИТЬ ВЫБРАТЬ 9, 2487512833
    ОБЪЕДИНИТЬ ВЫБРАТЬ 10, 4098453791
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ПОДСТРОКА("0123456789", СтепеннойРяд.Позиция, 1) КАК Символ,
    СтепеннойРяд.Позиция КАК Код
    ПОМЕСТИТЬ КодоваяТаблица
    ИЗ СтепеннойРяд КАК СтепеннойРяд
    ИНДЕКСИРОВАТЬ ПО Символ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    "ГотоваяПродукция" КАК Ссылка,
    НоменклатураГП.Код КАК Аргумент
    ПОМЕСТИТЬ ГотоваяПродукцияОтбор
    ИЗ Справочник.Номенклатура КАК НоменклатураГП
    {ГДЕ НоменклатураГП.Ссылка.* КАК ГотоваяПродукцияОтбор};

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    "Материалы" КАК Ссылка,
    НоменклатураМатериалы.Код КАК Аргумент
    ПОМЕСТИТЬ МатериалыОтбор
    ИЗ Справочник.Номенклатура КАК НоменклатураМатериалы
    {ГДЕ НоменклатураМатериалы.Ссылка.* КАК МатериалыОтбор};

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВариантыПроизводстваГотоваяПродукция.Изделие.Код КАК Аргумент,
    ВариантыПроизводстваГотоваяПродукция.Ссылка КАК Ссылка
    ПОМЕСТИТЬ ГотоваяПродукция
    ИЗ Справочник.ВариантыПроизводства.ГотоваяПродукция КАК ВариантыПроизводстваГотоваяПродукция;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВариантыПроизводстваМатериалы.Номенклатура.Код КАК Аргумент,
    ВариантыПроизводстваМатериалы.Ссылка КАК Ссылка
    ПОМЕСТИТЬ Материалы
    ИЗ Справочник.ВариантыПроизводства.Материалы КАК ВариантыПроизводстваМатериалы;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ГотоваяПродукцияОтбор.Ссылка КАК Ссылка,
    ПОДСТРОКА(ГотоваяПродукцияОтбор.Аргумент, СтепеннойРяд.Позиция, 1) КАК СимволКода,
    СтепеннойРяд.ЧленРяда КАК ЧленРяда
    ПОМЕСТИТЬ ГПОтборОтдельныеСимволы
    ИЗ ГотоваяПродукцияОтбор КАК ГотоваяПродукцияОтбор, СтепеннойРяд КАК СтепеннойРяд;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ГПОтборОтдельныеСимволы.Ссылка КАК Ссылка,
    СУММА(ГПОтборОтдельныеСимволы.ЧленРяда * КодоваяТаблица.Код) КАК Хэш
    ПОМЕСТИТЬ ГПОтборВыходныеДанные
    ИЗ ГПОтборОтдельныеСимволы КАК ГПОтборОтдельныеСимволы
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ КодоваяТаблица КАК КодоваяТаблица ПО ГПОтборОтдельныеСимволы.СимволКода = КодоваяТаблица.Символ
    СГРУППИРОВАТЬ ПО ГПОтборОтдельныеСимволы.Ссылка;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    МатериалыОтбор.Ссылка КАК Ссылка,
    ПОДСТРОКА(МатериалыОтбор.Аргумент, СтепеннойРяд.Позиция, 1) КАК СимволКода,
    СтепеннойРяд.ЧленРяда КАК ЧленРяда
    ПОМЕСТИТЬ МатериалыОтборОтдельныеСимволы
    ИЗ МатериалыОтбор КАК МатериалыОтбор, СтепеннойРяд КАК СтепеннойРяд;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    МатериалыОтборОтдельныеСимволы.Ссылка КАК Ссылка,
    СУММА(МатериалыОтборОтдельныеСимволы.ЧленРяда * КодоваяТаблица.Код) КАК Хэш
    ПОМЕСТИТЬ МатериалыОтборВыходныеДанные
    ИЗ
    МатериалыОтборОтдельныеСимволы КАК МатериалыОтборОтдельныеСимволы
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ КодоваяТаблица КАК КодоваяТаблица ПО МатериалыОтборОтдельныеСимволы.СимволКода = КодоваяТаблица.Символ
    СГРУППИРОВАТЬ ПО МатериалыОтборОтдельныеСимволы.Ссылка;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ГотоваяПродукция.Ссылка КАК Ссылка,
    ПОДСТРОКА(ГотоваяПродукция.Аргумент, СтепеннойРяд.Позиция, 1) КАК СимволКода,
    СтепеннойРяд.ЧленРяда КАК ЧленРяда
    ПОМЕСТИТЬ ГПОтдельныеСимволы
    ИЗ ГотоваяПродукция КАК ГотоваяПродукция, СтепеннойРяд КАК СтепеннойРяд;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ГПОтдельныеСимволы.Ссылка КАК Ссылка,
    СУММА(ГПОтдельныеСимволы.ЧленРяда * КодоваяТаблица.Код) КАК Хэш
    ПОМЕСТИТЬ ГПВыходныеДанные
    ИЗ ГПОтдельныеСимволы КАК ГПОтдельныеСимволы
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ КодоваяТаблица КАК КодоваяТаблица ПО ГПОтдельныеСимволы.СимволКода = КодоваяТаблица.Символ
    СГРУППИРОВАТЬ ПО ГПОтдельныеСимволы.Ссылка;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Материалы.Ссылка КАК Ссылка,
    ПОДСТРОКА(Материалы.Аргумент, СтепеннойРяд.Позиция, 1) КАК СимволКода,
    СтепеннойРяд.ЧленРяда КАК ЧленРяда
    ПОМЕСТИТЬ МатериалыОтдельныеСимволы
    ИЗ Материалы КАК Материалы, СтепеннойРяд КАК СтепеннойРяд;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    МатериалыОтдельныеСимволы.Ссылка КАК Ссылка,
    СУММА(МатериалыОтдельныеСимволы.ЧленРяда * КодоваяТаблица.Код) КАК Хэш
    ПОМЕСТИТЬ МатериалыВыходныеДанные
    ИЗ МатериалыОтдельныеСимволы КАК МатериалыОтдельныеСимволы
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ КодоваяТаблица КАК КодоваяТаблица ПО МатериалыОтдельныеСимволы.СимволКода = КодоваяТаблица.Символ
    СГРУППИРОВАТЬ ПО МатериалыОтдельныеСимволы.Ссылка;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ГПВыходныеДанные.Ссылка КАК Ссылка,
    ГПВыходныеДанные.Хэш КАК ХэшГП,
    МатериалыВыходныеДанные.Хэш КАК ХэшМатериалы
    ПОМЕСТИТЬ ВариантыПроизводства
    ИЗ ГПВыходныеДанные КАК ГПВыходныеДанные
    ЛЕВОЕ СОЕДИНЕНИЕ МатериалыВыходныеДанные КАК МатериалыВыходныеДанные ПО ГПВыходныеДанные.Ссылка = МатериалыВыходныеДанные.Ссылка;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ГПОтборВыходныеДанные.Хэш КАК ХэшГП,
    МатериалыОтборВыходныеДанные.Хэш КАК ХэшМатериалы
    ПОМЕСТИТЬ ВариантыПроизводстваОтбор
    ИЗ МатериалыОтборВыходныеДанные КАК МатериалыОтборВыходныеДанные, ГПОтборВыходныеДанные КАК ГПОтборВыходныеДанные;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВариантыПроизводства.Ссылка КАК ВариантПроизводства
    ИЗ ВариантыПроизводства КАК ВариантыПроизводства
    ГДЕ (ВариантыПроизводства.ХэшГП, ВариантыПроизводства.ХэшМатериалы) В (ВЫБРАТЬ ВариантыПроизводстваОтбор.ХэшГП, ВариантыПроизводстваОтбор.ХэшМатериалы ИЗ ВариантыПроизводстваОтбор КАК ВариантыПроизводстваОтбор)
```
---
Крутой запрос, но для меня сложноват...