Выгружаю номенклатуру из ТЧ, в ТЧ в основном бывает только номенклатура с типом значения Номенклатурная группа, но иногда попадается и просто номенклатура, нужно учесть это в запросе. А то если я передаю только номенклатурные группы, и у какой-то номенклатурной группы не найден артикул, то мне возвращает пустую строку и при ЗагрузитьКолонку(Массив,"АртикулПоставщика"); оно четко загружает. А вот если передаю с типом значения Номенклатура, тогда ничего не возвращает и колонку в ТЧ заполняет не правильно.

Подскажите, как учесть что может быть и тип значения номенклатура помимо номенклатурнаяГруппа

```1c
    Если ЗначениеЗаполнено(Элемент.ТекущаяСтрока) Тогда
    МассивНоменклатуры = ЭтотОбъект.ВыбраннаяГруппа.ВыгрузитьКолонку("НоменклатурнаяГруппа");

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | НоменклатураМТД_Поставщики.Артикул
    |ИЗ
    | Справочник.Номенклатура.МТД_Поставщики КАК НоменклатураМТД_Поставщики
    |ГДЕ
    | НоменклатураМТД_Поставщики.Ссылка.НоменклатурнаяГруппа В(&НоменклатурнаяГруппа)
    | И НоменклатураМТД_Поставщики.Поставщики = &Поставщики
    | И НоменклатураМТД_Поставщики.Ссылка.ОсновнаяНоменклатура = ИСТИНА";

    Запрос.УстановитьПараметр("НоменклатурнаяГруппа", МассивНоменклатуры);
    Запрос.УстановитьПараметр("Поставщики", Элемент.ТекущаяСтрока.Поставщик);

    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    Массив = РезультатЗапроса.ВыгрузитьКолонку("Артикул");
    Если ЗначениеЗаполнено(Массив) Тогда
    ЭтотОбъект.ВыбраннаяГруппа.ЗагрузитьКолонку(Массив,"АртикулПоставщика");
    Иначе
    ВыбраннаяГруппа[0].АртикулПоставщика = ";
    КонецЕсли;

    КонецЕсли;
```
---
```1c
    Если ЗначениеЗаполнено(Элемент.ТекущаяСтрока) Тогда

    МассивНоменклатуры = ЭтотОбъект.ВыбраннаяГруппа.ВыгрузитьКолонку("НоменклатурнаяГруппа");

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | НоменклатураМТД_Поставщики.Ссылка.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    | НоменклатураМТД_Поставщики.Артикул
    |ИЗ
    | Справочник.Номенклатура.МТД_Поставщики КАК НоменклатураМТД_Поставщики
    |ГДЕ
    | НоменклатураМТД_Поставщики.Ссылка.НоменклатурнаяГруппа В(&НоменклатурнаяГруппа)
    | И НоменклатураМТД_Поставщики.Поставщики = &Поставщики
    | И НоменклатураМТД_Поставщики.Ссылка.ОсновнаяНоменклатура = ИСТИНА";

    Запрос.УстановитьПараметр("НоменклатурнаяГруппа", МассивНоменклатуры);
    Запрос.УстановитьПараметр("Поставщики", Элемент.ТекущаяСтрока.Поставщик);

    ТЗ = Запрос.Выполнить().Выгрузить();
    ТЗ.Индексы.Добавить("НоменклатурнаяГруппа");

    Для Каждого Стр Из ЭтотОбъект.ВыбраннаяГруппа Цикл
    МассивСтрок = ТЗ.НайтиСтроки(Новый Структура("НоменклатурнаяГруппа", Стр.НоменклатурнаяГруппа));
    Если МассивСтрок.Количество() > 0 Тогда
    Стр.АртикулПоставщика = МассивСтрок[0].Артикул;
    Иначе
    Стр.АртикулПоставщика = ";
    КонецЕсли;
    КонецЦикла;

    КонецЕсли;
```
---
```1c
    "ВЫБРАТЬ
    | НоменклатураМТД_Поставщики.Артикул
    |ИЗ
    | Справочник.Номенклатура.МТД_Поставщики КАК НоменклатураМТД_Поставщики
    |ГДЕ
    | НоменклатураМТД_Поставщики.Ссылка.НоменклатурнаяГруппа В(&НоменклатурнаяГруппа)
    | И НоменклатураМТД_Поставщики.Поставщики = &Поставщики
    | И НоменклатураМТД_Поставщики.Ссылка.ОсновнаяНоменклатура = ИСТИНА
    | Объединить все
    |ВЫБРАТЬ
    | НоменклатураМТД_Поставщики.Артикул
    |ИЗ
    | Справочник.Номенклатура.МТД_Поставщики КАК НоменклатураМТД_Поставщики
    |ГДЕ
    | НоменклатураМТД_Поставщики.Ссылка В(&НоменклатурнаяГруппа)
    | И НоменклатураМТД_Поставщики.Поставщики = &Поставщики
    | И НоменклатураМТД_Поставщики.Ссылка.ОсновнаяНоменклатура = ИСТИНА"
```
---
где НоменклатураМТД_Поставщики.Ссылка.Номенклатура ССЫЛКА Справочники.номенклатура
?
---
ССЫЛКА Справочники.номенклатура Справочник. В данном случае употребляется в единственном числе. В остальном да.
---
Но я так номенклатуру с типом НоменклатурнаяГруппа не вытащу
---
```1c
    Если ЗначениеЗаполнено(Элемент.ТекущаяСтрока) Тогда

    МассивНоменклатуры = ЭтотОбъект.ВыбраннаяГруппа.ВыгрузитьКолонку("НоменклатурнаяГруппа");

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | НоменклатураМТД_Поставщики.Ссылка.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    | НоменклатураМТД_Поставщики.Артикул
    |ИЗ
    | Справочник.Номенклатура.МТД_Поставщики КАК НоменклатураМТД_Поставщики
    |ГДЕ
    | НоменклатураМТД_Поставщики.Ссылка.НоменклатурнаяГруппа В(&НоменклатурнаяГруппа)
    | И НоменклатураМТД_Поставщики.Поставщики = &Поставщики
    | И НоменклатураМТД_Поставщики.Ссылка.ОсновнаяНоменклатура = ИСТИНА";

    Запрос.УстановитьПараметр("НоменклатурнаяГруппа", МассивНоменклатуры);
    Запрос.УстановитьПараметр("Поставщики", Элемент.ТекущаяСтрока.Поставщик);

    ТЗ = Запрос.Выполнить().Выгрузить();
    ТЗ.Индексы.Добавить("НоменклатурнаяГруппа");

    Для Каждого Стр Из ЭтотОбъект.ВыбраннаяГруппа Цикл
    МассивСтрок = ТЗ.НайтиСтроки(Новый Структура("НоменклатурнаяГруппа", Стр.НоменклатурнаяГруппа));
    Если МассивСтрок.Количество() > 0 Тогда
    Стр.АртикулПоставщика = МассивСтрок[0].Артикул;
    Иначе
    Стр.АртикулПоставщика = ";
    КонецЕсли;
    КонецЦикла;

    КонецЕсли;
```
---
Да, это помогло, но почему-то для номенклатуры с типом "Номенклатура" не выводит артикул (но он есть)
---
Попробуйте адаптировать запрос из (5) под код в (4).
---
Спасибо, понял как использовать индексы, полезно, тоже помогло!
---
```1c
    "ВЫБРАТЬ
    | НоменклатураМТД_Поставщики.Артикул
    |ИЗ
    | Справочник.Номенклатура.МТД_Поставщики КАК НоменклатураМТД_Поставщики
    |ГДЕ
    | НоменклатураМТД_Поставщики.Ссылка.НоменклатурнаяГруппа В(&НоменклатурнаяГруппа)
    | И НоменклатураМТД_Поставщики.Поставщики = &Поставщики
    | И НоменклатураМТД_Поставщики.Ссылка.ОсновнаяНоменклатура = ИСТИНА
    | Объединить все
    |ВЫБРАТЬ
    | НоменклатураМТД_Поставщики.Артикул
    |ИЗ
    | Справочник.Номенклатура.МТД_Поставщики КАК НоменклатураМТД_Поставщики
    |ГДЕ
    | НоменклатураМТД_Поставщики.Ссылка В(&НоменклатурнаяГруппа)
    | И НоменклатураМТД_Поставщики.Поставщики = &Поставщики
    | И НоменклатураМТД_Поставщики.Ссылка.ОсновнаяНоменклатура = ИСТИНА"
```
---
Вообще ничего не вывело)
---
Спасибо, этот запрос помог, но чуть поправил
(5)
---
В &НоменклатурнаяГруппа что содержится?

```1c
    Эти условия валидны в обоих случаях(и когда номенклатура и когда номенклатурная группа)
    | И НоменклатураМТД_Поставщики.Поставщики = &Поставщики
    | И НоменклатураМТД_Поставщики.Ссылка.ОсновнаяНоменклатура = ИСТИНА
```

Если подозрение, что "И НоменклатураМТД_Поставщики.Ссылка.ОсновнаяНоменклатура = ИСТИНА" не нужно
---
Есть подозрение, что в случае с номенклатурой, достаточно просто выводить ее реквизит "Артикул".
---
В номенклатурной группе есть несколько номенклатур, одна из этих номенклатур основная. Когда нужно вытащить артикул по номенклатурной группе, беру из основной
---
Интересный разворот, можете удалять свой запрос, забыть про него как про страшный сон и обдумывать логику с самого начала...
---
почему?
---
Потому что если у номенклатурной группы есть только одна основная номенклатура. А у вас есть еще и поставщик...
Может даже я не так выразился. Обдумать не логику запроса, а логику поиска и подбора данных. А потом уже претворять эту логику в запрос.
---
Номенклатурная группа это несколько номенклатур в одной номенклатурной группе, у каждой есть основная номенклатура.
У каждой номенклатуры есть ТЧ где указаны АртикулПоставщика - Поставщик.

Моя задача:

Есть обработка "прайсы поставщиков". На ней есть 2 ТЧ в одну загружается номенклатурные группы/номенклатура, в другую все поставщики которые есть у номенклатуры. И когда я нажимаю на поставщика, в ТЧ с номенклатурой в колонку должны появится артикулы по этим поставщикам. Если у номенклатуры есть артикул по поставщику то он выводится, если нет, пустая ячейка остается.
---
Мне кажется что запрос правильный, просто нужно доработать
---
Ну так совсем не понятно, что содержит &НоменклатурнаяГруппа? Это массив номенклатурных групп + номенклатура или все отдельно?
---
Может быть массив номенклатурных групп, может быть номенклатур и может быть номенклатурных групп + номенклатура
---
"А вот если передаю с типом значения Номенклатура, тогда ничего не возвращает и колонку в ТЧ заполняет не правильно."

Я как что то должен вернуть запрос, если
        |ГДЕ
        | НоменклатураМТД_Поставщики.Ссылка.НоменклатурнаяГруппа В(&НоменклатурнаяГруппа)

ТипЗнч(НоменклатураМТД_Поставщики.Ссылка.НоменклатурнаяГруппа) = Тип("СправочникСсылка.НоменклатурныеГруппы")

По этому запрос и работает при условии ,что на &НоменклатурнаяГруппа содержит номенклатурные группы
---
Я это понимаю, но как сделать так, чтобы он работал и Номенклатурная Группа + Номенклатура в &НоменклатурнаяГруппа
---
Т. е в таб части "ВыбраннаяГруппа" колонка "НоменклатурнаяГруппа" имеет составной тип?
---
Верно!
---
```1c
    "ВЫБРАТЬ
    | НоменклатураМТД_Поставщики.Артикул КАК Артикул
    |ИЗ
    | Справочник.Номенклатура.МТД_Поставщики КАК НоменклатураМТД_Поставщики
    |ГДЕ
    | НоменклатураМТД_Поставщики.Ссылка.НоменклатурнаяГруппа В(&НоменклатурнаяГруппа)
    | И НоменклатураМТД_Поставщики.Ссылка.ОсновнаяНоменклатура
    | И НоменклатураМТД_Поставщики.Поставщики = &Поставщики
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |//Во вложенном запросе отбираем номенклатуру, получаем из нее номенклатурную группу,
    |//Потом соединяем с табличными частями
    |//по номенклатурным группам.
    |//
    |ВЫБРАТЬ
    | НоменклатураМТД_Поставщики.Артикул
    |ИЗ
    | (ВЫБРАТЬ
    | Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа
    | ИЗ
    | Справочник.Номенклатура КАК Номенклатура
    | ГДЕ
    | Номенклатура.Ссылка В(&НоменклатурнаяГруппа)) КАК ВложенныйЗапрос
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.МТД_Поставщики КАК НоменклатураМТД_Поставщики
    | ПО ВложенныйЗапрос.НоменклатурнаяГруппа = НоменклатураМТД_Поставщики.Ссылка.НоменклатурнаяГруппа
    |ГДЕ
    | НоменклатураМТД_Поставщики.Ссылка.ОсновнаяНоменклатура
    | И НоменклатураМТД_Поставщики.Поставщики = &Поставщики"
```
---
Не, вообще что-то не то выдает)) Это прям вообще мимо)
---
Я подбросил Вам идею как можно реализовать, а Вы ее сами развивайте. Или ждете что кто то напишет для Вам на 100% рабочий код?

P/S
Еще несколько идей..

МассивНоменклатуры = ЭтотОбъект.ВыбраннаяГруппа.Выгрузить( , "НоменклатурнаяГруппа");//В итоге получите ТаблицуЗначений.

Загружаете эту ТЗ в запрос. Далее используете ее как источник данных(вместо массива) с проверкой типов

Для отладки разбейте запрос на 2 отдельных
---
(26) Или ждете что кто то напишет для Вам на 100% рабочий код?

Нет, я использовал Ваш запрос в (5) немного переделал и заполение ТЧ использовал из (4)
---
```1c
    МассивНоменклатуры = ЭтотОбъект.ВыбраннаяГруппа.ВыгрузитьКолонку("НоменклатурнаяГруппа");

    Запрос = Новый Запрос;
    Запрос.Текст =

    "ВЫБРАТЬ
    | НоменклатураМТД_Поставщики.Артикул,
    | НоменклатураМТД_Поставщики.Ссылка.НоменклатурнаяГруппа,
    | NULL КАК Номенклатура
    |ИЗ
    | Справочник.Номенклатура.МТД_Поставщики КАК НоменклатураМТД_Поставщики
    |ГДЕ
    | НоменклатураМТД_Поставщики.Ссылка.НоменклатурнаяГруппа В(&НоменклатурнаяГруппа)
    | И НоменклатураМТД_Поставщики.Поставщики = &Поставщики
    | И НоменклатураМТД_Поставщики.Ссылка.ОсновнаяНоменклатура = ИСТИНА
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | НоменклатураМТД_Поставщики.Артикул,
    | NULL,
    | НоменклатураМТД_Поставщики.Ссылка
    |ИЗ
    | Справочник.Номенклатура.МТД_Поставщики КАК НоменклатураМТД_Поставщики
    |ГДЕ
    | НоменклатураМТД_Поставщики.Ссылка В(&НоменклатурнаяГруппа)
    | И НоменклатураМТД_Поставщики.Поставщики = &Поставщики";

    Запрос.УстановитьПараметр("НоменклатурнаяГруппа", МассивНоменклатуры);
    Запрос.УстановитьПараметр("Поставщики", Элемент.ТекущаяСтрока.Поставщик);

    ТЗ = Запрос.Выполнить().Выгрузить();
    ТЗ.Индексы.Добавить("НоменклатурнаяГруппа");
    ТЗ.Индексы.Добавить("Номенклатура");

    Для Каждого Стр Из ЭтотОбъект.ВыбраннаяГруппа Цикл
    Если ТипЗнч(Стр.НоменклатурнаяГруппа) = Тип("СправочникСсылка.НоменклатурныеГруппы") Тогда
    МассивСтрок = ТЗ.НайтиСтроки(Новый Структура("НоменклатурнаяГруппа", Стр.НоменклатурнаяГруппа));
    Иначе
    МассивСтрок = ТЗ.НайтиСтроки(Новый Структура("Номенклатура", Стр.НоменклатурнаяГруппа));
    КонецЕсли;
    Если МассивСтрок.Количество() > 0 Тогда
    Стр.АртикулПоставщика = МассивСтрок[0].Артикул;
    Иначе
    Стр.АртикулПоставщика = ";
    КонецЕсли;
    КонецЦикла;
```

Вот так вот получилось!