Здравствуйте. Пару дней пытался разобраться самостоятельно, не получается пока что.

У меня есть форма справочника, у нее есть параметр вида СписокЗначений, и основной реквизит имеет тип ДинамическийСписок
Проблемы с написанием этого динамического запроса.

Мне нужно сделать так, чтобы в список попадали все элементы справочника, у которых табличная часть полностью включает в себя набор из параметра.

То, что параметр имеет тип СписокЗначений для меня не критично, я его сделал таким, но если не правильно, нужно поменять на что то другое. Суть его в том, что програмно я туда записываю, например, А Б В, и потом в результате обновления формы я хочу видить только элементы справочника, у которых внутри их табличной части есть полный набор А Б В в любом порядке. (Например, элемент с табличной частью А В Т М Б удовлетворит условию, а элемент с табличной частью А Б - нет.)

Я так понимаю, что нужно использовать некий вложеный запрос или временную таблицу внутри условия "ГДЕ", но не могу разобраться именно с тем что один из объектов выборки - это параметр, к которому я не могу как к таблице обратиться.

P.S. Элементы справочника, из которого это все выбираются, имеют несколько реквизитов и одну табличную часть с одним реквизитом внутри.
---
Пока что решаю через запрос, как я и описывал в первом сообщении.
Подсказывает коллега по работе.

Ход решения на данный момент таков:
Временная таблица 1: Формирует таблицу из переданного параметра-массива типа СписокЗначений
Временная таблица 2: Получает количество записей из ВТ1
Временная таблица 3: Левым соединением соединяет ВТ1 и ТЧ из Мой Справочник, одновременно группируя по ссылке, чтобы на выходе получить, сколько различных элементов из параметра содержатся в табличных частях элементов справочника.

Далее я думаю в следующем запросе отобрать из ВТ3 только те записи, которые имеют число по группировке равное числу из ВТ2...

Как дорешаю, напишу, думаю, получится то что мне нужно. Всем спасибо за советы!
---
я бы так же сделал, никакие временные таблицы не нужны, посчитать количество различных вхождений значений из списка в табличной части и сравнить с размером списка. Размер списка передать вторым параметром. Будет работать при условии, что в списке-параметре значения не повторяются.
---
Если верно Вас поняла, то можно в условии ГДЕ использовать временную таблицу, которая формируется следующим образом:

Сравнивается набор из справочника в виде массива (как я понимаю это значение колонки из его ТЧ, которую можно выгрузить в массив) и массив-параметр(список значение) с помощью это функции:

```1c
    // Вычисляет разность массивов. Разностью массивов А и В является массив, содержащий
    // все элементы массива А не существующие в массиве В.
    //
    // Параметры:
    // Массив - Массив - массив элементов, из которого необходимо выполнить вычитание;
    // МассивВычитания - Массив - массив элементов, который будет вычитаться.
    //
    // Возвращаемое значение:
    // Массив - дополнение массива В до А.
    //
    // Пример:
    // //А = [1, 3, 5, 7];
    // //В = [3, 7, 9];
    // Результат = РазностьМассивов(А, В);
    // //Результат = [1, 5];
    //
    Функция РазностьМассивов(Массив, МассивВычитания) Экспорт

    Результат = Новый Массив;

    Для Каждого Элемент Из Массив Цикл

    Если МассивВычитания.Найти(Элемент) = Неопределено Тогда

    Результат.Добавить(Элемент);

    КонецЕсли;

    КонецЦикла;

    Возврат Результат;

    КонецФункции
```

Если массив пустой, то есть набор элемента совпадает с параметром, то этот элемент добавляется, например, в список значений, который впоследствии будет источником для временной таблицы
---
Хорошо, а как мне заполнить такую временную таблицу с помощью функции? Мне ее нужно заполнять отдельно в коде до обновления формы? А как потом передать в форму тогда?
Текст запроса то по итогу находится в настройках списка основного реквизита формы "ДинамическийСписок".

Простите за возможную глупость в вопросах, я очень недавно во всем этом начал разбираться.
---
Вы можете создать массив, который будет выступать в качестве отбора динамического списка

 Для динамического списка, являющегося основным реквизитом формы, имеется возможность устанавливать значения отбора с помощью параметра формы Отбор. Для этого необходимо, чтобы имя свойства структуры, находящееся в параметре Отбор,
совпало с именем поля отбора динамического списка. В этом случае значение свойства структуры будет установлено в качестве правого значения элемента отбора. Если в качестве значения элемента параметра Отбор формы динамического списка передан массив, фиксированный массив или список значений, то в отбор добавляется условие с вариантом В Списке

И да, этот массив будет формироваться в коде, то есть в момент когда вы добавляете программно элемент - сразу сравниваете функцией, совпадает ли их наборы и если совпадает, то помещаете его в массив, который впоследствии станет отбором динамического списка

Все это в теории, если не получится, скиньте файл конфигурации, посмотрим что можно сделать
---
Не знаю насколько я Вас правильно понял, потому как тут никто прямо не пишет чего хочет. Но попробую угадать - Вам нужно открыть Форму выбора из какого то документа с отбором? Если угадал, то Вам поможет это

```1c
    &НаКлиенте // в документе
    Процедура КодТорговойТочкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;
    ПараметрыПодразделения = Новый Структура;
    ПараметрыПодразделения.Вставить("Владелец",Объект.Контрагент);
    ОткрытьФорму("Справочник.ОбособленныеПодразделения.ФормаВыбора", ПараметрыПодразделения, Элемент);
    КонецПроцедуры

    &НаСервере // форма выбора справочника
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    НаборЭлементов = Список.КомпоновщикНастроек.Настройки.Отбор;
    ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(НаборЭлементов,"Владелец",Параметры.Владелец,Неопределено,,Истина);
```

Сам код может быть не рабочим из-за ОбщегоНазначенияКлиентСервер, но я намекаю куда копать :-)
---
По идее, правое соединение может указать, что среди значений в параметре есть такие, которых нет в табличной части справочника, а значит и этот элемент не удовлетворяет условию.
Можно сделать что то по типу:

```1c
    ВЫБРАТЬ
    Все реквизиты и таб.часть
    ИЗ
    Мой справочник
    ГДЕ
    (Результат правого соединения ТЧ справочника и параметра = пусто)
```

Но я не знаю как это синтаксически и ссылочно правильно реализовать. Как в условии скобочки обратиться именно к конкретной табличной части и как соеденить ее со значениями из СпискаЗначений.
---
Я бі реалізовал с помощью вложеного запроса:
1. Запрос по ТЧ справочника, с вічислением поля «если значение указаное в списке есть тогда Истина иначе Ложь. После чего групируем по Мининуму и получаем таблицу
Ссілка
ЗначениеВСписке. Єто все во вложеном запросе

В основному просто ставим условие ЗначениеВСписке = Истина
---
Пока что решаю через запрос, как я и описывал в первом сообщении.
Подсказывает коллега по работе.

Ход решения на данный момент таков:
Временная таблица 1: Формирует таблицу из переданного параметра-массива типа СписокЗначений
Временная таблица 2: Получает количество записей из ВТ1
Временная таблица 3: Левым соединением соединяет ВТ1 и ТЧ из Мой Справочник, одновременно группируя по ссылке, чтобы на выходе получить, сколько различных элементов из параметра содержатся в табличных частях элементов справочника.

Далее я думаю в следующем запросе отобрать из ВТ3 только те записи, которые имеют число по группировке равное числу из ВТ2...

Как дорешаю, напишу, думаю, получится то что мне нужно. Всем спасибо за советы!
---
Можно упростить и количество в списке тоже передавать параметром в запрос.
---
я бы так же сделал, никакие временные таблицы не нужны, посчитать количество различных вхождений значений из списка в табличной части и сравнить с размером списка. Размер списка передать вторым параметром. Будет работать при условии, что в списке-параметре значения не повторяются.