В Управлении Торговлей 10.3 если выполнить код ниже, то мы получим элементы отбора, включая свои добавленные реквизиты в справочнике Номенклатура, но без стандартного реквизита "Родитель". При этом стандартные реквизиты "Код", "ПометкаУдаления", "ЭтоГруппа" попадают в элементы Отбора.

Добавление реквизита Родитель на форму списка не помогло.

Подскажите, может кто-нибудь знает каким-образом возможно добавить в Отбор Родителя?

```1c
    Справочники.Номенклатура.ПолучитьФорму("ФормаСписка").Отбор
```
---
Решение, которое получилось:
1) Создал у номенклатуры реквизит ДубльРодителя с Использованием: "Для группы и элемента"
2) В модуле объекта номенклатуры прописал в конце процедуры ПередЗаписью:

```1c
    Если ДубльРодителя <> Родитель Тогда
    ДубльРодителя = Родитель;
    КонецЕсли;
```

3) Перезаполнил для всей номенклатуры реквизит ДубльРодителя с помощью обработки:

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура";

    РезультатТЗ = Запрос.Выполнить().Выгрузить();

    Для Каждого Строка Из РезультатТЗ Цикл
    ОбъектНоменклатуры = Строка.Ссылка.ПолучитьОбъект();
    Попытка
    ОбъектНоменклатуры.Записать();
    Исключение
    Сообщить("Не установися ДубльРодителя у позиции: "+ Строка(Строка.Ссылка));
    КонецПопытки;
    КонецЦикла;
```

4) В начале процедуры УстановитьОтборПоНоменклатурнойГруппе в основной форме обработки ПодборНоменклатуры прописал:

```1c
    //СписокПозиций - глобальная переменная, значение которой получено перед открытием обработки
    Если СписокПозиций.Количество() <> 0 Тогда
    ЭлементОтбора = ЭлементыФормы.СправочникНоменклатура.Значение;
    ЭлементОтбора.Отбор.ДубльРодителя.ВидСравнения = ВидСравнения.НеВСписке;
    ЭлементОтбора.Отбор.ДубльРодителя.Значение = СписокПозиций;
    ЭлементОтбора.Отбор.ДубльРодителя.Использование = Истина;
    КонецЕсли;
```
---
Мне кажется Ссылки будет вполне достаточно чтобы накладывать разные отборы по Родителю.
p.s. Как Родителя добавить в Отбор не подскажу)
---
Ссылки по следующему коду достаточно когда СписокПозиций небольшой, а когда список огромный, то код выполняется очень долго. Поэтому и нужно решение по быстрому отбору через Родителя

```1c
    РезультатТЗ = Запрос.Выполнить().Выгрузить();
    МассивПозиций = РезультатТЗ.ВыгрузитьКолонку("Ссылка");
    СписокПозиций = Новый СписокЗначений;
    СписокПозиций.ЗагрузитьЗначения(МассивПозиций);

    ЭлементОтбора = ЭлементыФормы.СправочникНоменклатура.Значение;
    ЭлементОтбора.Отбор.Ссылка.ВидСравнения = ВидСравнения.НеВСписке;
    ЭлементОтбора.Отбор.Ссылка.Значение = СписокПозиций;
    ЭлементОтбора.Отбор.Ссылка.Использование = Истина;
```
---
а может так?

```1c
    ЭлементОтбора.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВИерархии;
    ЭлементОтбора.Отбор.Ссылка.Значение = СписокРодителей;
    ЭлементОтбора.Отбор.Ссылка.Использование = Истина;
```
---
Так тоже пробовал. При "Подборе номенклатуры" происходит сильнейшее зависание если искать номенклатуру набором текста в области НоменклатураДляПодбора с отключенным Иерархическим просмотром
---
ну так в 4 по сути отбор по Родителю. Рискну предположить что даже если бы вы добавили в Отбор Родителя, то при наборе текста в области НоменклатураДляПодбора с отключенным Иерархическим просмотром, получили бы аналогичные тормоза.
---
Все верно
---
Должно выполняться быстро. Включите замер производительности. На какой строке тормозит?
---
Дело в том, что происходит и свой Отбор, и выполнение многочисленных стандартных запросов при наборе текста. Отбор в Иерархии или в большом списке сильно замедляет в этом случае выполнение кода
---
Отбор "в списке" даже при большом количестве ссылок отрабатывает быстро. Попробуйте код из (3) переделать на ВидСравнения.ВСписке.
Еще как вариант, добавить в метаданные свой реквизит для отбора.
---
1) ВидСравнения.ВСписке делал, работает быстро когда позиций 300, а когда их тысячи, например 25000, то все зависает.
2) Вариант с добавление своего реквизита - это рабочая идея, только заполнять свой реквизит нужно значением Родителя каждый раз.
---
Решение, которое получилось:
1) Создал у номенклатуры реквизит ДубльРодителя с Использованием: "Для группы и элемента"
2) В модуле объекта номенклатуры прописал в конце процедуры ПередЗаписью:

```1c
    Если ДубльРодителя <> Родитель Тогда
    ДубльРодителя = Родитель;
    КонецЕсли;
```

3) Перезаполнил для всей номенклатуры реквизит ДубльРодителя с помощью обработки:

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура";

    РезультатТЗ = Запрос.Выполнить().Выгрузить();

    Для Каждого Строка Из РезультатТЗ Цикл
    ОбъектНоменклатуры = Строка.Ссылка.ПолучитьОбъект();
    Попытка
    ОбъектНоменклатуры.Записать();
    Исключение
    Сообщить("Не установися ДубльРодителя у позиции: "+ Строка(Строка.Ссылка));
    КонецПопытки;
    КонецЦикла;
```

4) В начале процедуры УстановитьОтборПоНоменклатурнойГруппе в основной форме обработки ПодборНоменклатуры прописал:

```1c
    //СписокПозиций - глобальная переменная, значение которой получено перед открытием обработки
    Если СписокПозиций.Количество() <> 0 Тогда
    ЭлементОтбора = ЭлементыФормы.СправочникНоменклатура.Значение;
    ЭлементОтбора.Отбор.ДубльРодителя.ВидСравнения = ВидСравнения.НеВСписке;
    ЭлементОтбора.Отбор.ДубльРодителя.Значение = СписокПозиций;
    ЭлементОтбора.Отбор.ДубльРодителя.Использование = Истина;
    КонецЕсли;
```
---
Дало ли прирост производительности это решение по сравнению с отбором по Ссылке?
---
Полностью ощутимый прирост. Раньше все зависало надолго из-за большого количества номенклатуры в списке. Теперь когда в отборе список с Дублями родителей в количестве в среднем 15 шт, работает в целом также как и без отбора вообще.