В справочнике номенклатура (иерархический) при открытии какой-либо папки автоматически подставляется вид номенклатуры. Но мое условие если игнорируется и везде подставляется только один вид номенклатуры. В чем проблема?

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

```1c
    Процедура ПриСозданииНаСервере()

    Если Параметры.Ключ.Пустая() Тогда
    Если Объект.Родитель.Наименование = "Услуги" Тогда
    Объект.Вид = ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.Услуга");
    ИначеЕсли Объект.Родитель.Наименование = "Товары" Тогда
    Объект.Вид = ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.Товар");
    КонецЕсли;

    КонецПроцедуры
```

(40)
---
Проблема в
```1c
    ПРЕДСТАВЛЕНИЕССЫЛКИ(Номенклатура.Родитель.Наименование) КАК РодНаи
```
---
Почему? Как решить эту проблему?
---
Сообщение было скрыто модератором.
---
ПРЕДСТАВЛЕНИЕССЫЛКИ(Номенклатура.Родитель.Наименование) КАК РодНаи,
Номенклатура.Родитель.Наименование это не ссылка!
---
я в принципе поняла что это лишнее, удалила, но ситуация не изменилась
---
Я так понимаю, "Объект.Вид" - это у вас реквизит, и он ОДИН, то есть заполнить его нужно единожды, соответственно перебирать все записи нет смысла. Либо ставьте отбор в запросе, либо выбирайте только первые записи, либо вообще там запрос нафиг не нужен (поскольку не видно никакого отбора, соответственно не вижу смысла), либо вместо цикла ставьте условие:

```1c
    Если ВыборкаТовары.Следующий() Тогда
    Если ВыборкаТовары.РодНаи = "Услуги" Тогда
    Объект.Вид = ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.Услуга");
    ИначеЕсли ВыборкаТовары.РодНаи = "Товары" Тогда
    Объект.Вид = ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.Товар");
    КонецЕсли;
    КонецЕсли;
```

P.S.: Мое мнение - вы намудрили с решением поставленной задачи
P.S.S: Функцию предопределенное значение правильно использовать на клиенте, а на сервере лучше пиши так "Перечисления.ВидыНоменклатуры.Товар".
---
а точно заходит в этот код? Возможно после него где-то переопределяется
---
В код заходит, пробовала точку останова, когда выбираю папку услуги "ВыборкаТовары.РодНаи" принимает почему-то значение ТОВАР, а не услуга
---
чему равно "ВыборкаТовары.РодНаи" в отладчике в этом случае?
---
Всегда равно Товар, чтобы я не выбирала
---
вот это не может быть. Как минимум должно быть одно/несколько null.
Что в консоле запросов показывает?
---
Сообщение было скрыто модератором.
---
Вот что получается
---
получается есть две папки Товары и Услуги, в каждой из которой есть две номенклатуры... и зачем эта информация? Надо в запросе отбирать только необходимую информацию, а не все подряд
---
А как тогда верно должен выглядить запрос , чтобы получить эту "необходимую информацию"???
---
То есть когда вы выбираете номенклатуру из подгруппы "Услуги" (а у вас есть такая подгруппа?) то в отладке в строке
Если ВыборкаТовары.РодНаи = "Услуги" Тогда
все равно ВыборкаТовары.РодНаи равно строке "Товар" ?
---
Да, все равно Товар, подгруппа такая есть
---
А вы запрос из консоли в программу вставили? А то они разные...
---
И вообще я не понял зачем вы сравниваете РодНаи вместо РодительНаименование
Вот здесь
Если ВыборкаТовары.РодНаи = "Услуги" Тогда

Еще раз выложите пож текст исправленной программы
---
```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.Родитель.Наименование КАК РодительНаименование,
    | Номенклатура.Родитель.ЭтоГруппа КАК РодительЭтоГруппа
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура";
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаТовары = РезультатЗапроса.Выбрать();
    Пока ВыборкаТовары.Следующий() Цикл
    Если ВыборкаТовары.РодительНаименование = "Услуги" Тогда
    Объект.Вид = ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.Услуга");
    ИначеЕсли ВыборкаТовары.РодительНаименование = "Товары" Тогда
    Объект.Вид = ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.Товар");
    Иначе Объект.Вид = ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.ПустаяСсылка");
    КонецЕсли;
    КонецЦикла;
```
---
и снова выбираете из справочника ВСЕ записи без отбора... добавьте условие в запрос, чтобы отбирать только родителя нужной номенклатуры
---
передать параметр в запрос надо
---
условие: номенклатура.родитель = номенклатура.вид? не знаю как его верно написать
---
Изначально неясна задача, которую вы решаете. Поэтому запрос кажется совершенно бестолковым.
Результат его состоит в основном из записей содежащих одни NULL
Допустим у вас 1000 номеклатуры и 2 группы
Так вот запрос выдаст 1002 строчки 1000 - NULL и 2 Наименования групп.
Не кажется вам - абсурдным?
---
В смысле не ясна задача, мне нужно при создании номенклатуры чтобы в зависимости от название папки товар или услуга, подставлялся вид номенклатуры товар или услуга, для этого я и пишу сюда, чтобы мне помогли написать верный корректный запрос
---
В запросе "Где Номенклатура.Родитель = &ВыбРодитель".
Перед выполнением запроса: Запрос.Параметры.Выставить("ВыбРодитель", ТутПрописатьРодителяПоКоторомуДолженБытьОтборСмотритеОтладчи­комЧтоТамУВасДолжноБыть);
---
возможно, так и пишу что бы мне помогли, а не сказали твой код дерьмо, помогите сделать это правильно
---
Чтобы помогли - нужно описать исходную задачу.
По описанию задачи - она у вас поставлена с ног на голову.
При создании нормально выбирать вид и потом в зависимости от вида можно перемещать ее в соответствующую папку.
Зачем делать наоборот совершенно не ясно до сих пор...

Поясните?
---
Такова задача, что можно сказать. Именно Открывая какую либо папку в номенклатуре и создавая новый элемент подставляется значение родителя
---
Хорошо . Идем дальше тогда...
Если ва необходимо получить группы, то и нужно выбирать группы а не всю номенклатуру

```1c
    ВЫБРАТЬ
    Номенклатура.Родитель.Наименование КАК РодительНаименование,
    Номенклатура.Родитель.ЭтоГруппа КАК РодительЭтоГруппа
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    Где Номенклатура.Родитель.ЭтоГруппа
```

Но теперь вопрос все же - каков общий механизм применения этого запроса?
Вы хотите Именно при ОТКРЫТИИ папки этот запрос запускать?
Или в другой момент?
Очень не понятно...
---
При создании, я писала до этого код при создании на сервере
---
Если я не верно понял задачу, простите, так описана....

Тогда еще одна попытка.

Некорректно сортировать Товар и Услугу по группе, очень легко перетаскивается номенклатура из одной папки в другую совершенно случайно...
Анализировать необходимо реквизит Номенклатуры ВидНоменклатуры и в зависимости от него устанавливать свой Объект.Вид...
---
как тогда это можно реализовать???
---
Что это?
Опишите пожалуйста ГЛОБАЛЬНУЮ задачу....
Я же говорю из вашей информации ничего не ясно.
---
Да я уже не знаю как вам описать.
1-Есть две папки в справочнике НОМЕНКЛАТУРА
2-захожу в конкретную папку
3-нажимаю создать
4-открывается форма выбора со строчкой ВИД, которая подставилась автоматически в зависимости от родителя
5 код
---
Т.е. устанавливать параметр принципиально не хотите?
---
можно попробовать, просто не успела это сделать, пока делала скрины(
---
Нет, не подходит
---
Да я же говорил, что вы не тем занимаетесь.

```1c
    Процедура ПриСозданииНаСервере()

    Если Параметры.Ключ.Пустая() Тогда
    Если Объект.Родитель.Наименование = "Услуги" Тогда
    Объект.Вид = ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.Услуга");
    ИначеЕсли Объект.Родитель.Наименование = "Товары" Тогда
    Объект.Вид = ПредопределенноеЗначение("Перечисление.ВидыНоменклатуры.Товар");
    КонецЕсли;

    КонецПроцедуры
```

(40)
---
Точно, все работает, спасибо ОГРОМНОЕ, а можно еще один вопрос?!
что это за строчка Если Параметры.Ключ.Пустая() Тогда, что она делает?
---
Почему вы ему пишете а не мне?)

Это строчка проверяет, что это новый создаваемый объект, то есть чтобы не перезаписывать лишний раз значение реквизита.

P.S. то есть, что у данного объекта еще нет ссылки - если так понятней.
---
так получилось) извиняюсь)))) Спасибо, огромное))))
---
Вот видите - решение оказалось очень простым - (42)
На будущее - главное правильно задать вопрос!
В вопросе всегда скрывается ответ. Неверный вопрос - получите кучу хлама в ответ, причем неверного.
Формулируйте вашу изначальную задачу хоть в 2 словах и получите быструю помощь
---
Да, спасибо буду учится формулировать вопросы конкретнее)
---
Я же прошу ГЛОБАЛЬНУЮ задачу, а не технологию , которую вы придумали для ее решения.

То есть я спрашиваю - Зачем это вообще нужно?
Вы автоматизируете создание новой номеклатуры или еще какие варианты?

Да и кстати не написали наименование песочницы... Конфигурация то какая?

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