Здравствуйте! Есть запрос:

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

    ВыборкаЗапроса = Запрос.Выполнить().Выбрать();

    Таблица = Запрос.Выполнить().Выгрузить();
    Таблица.Свернуть("Номенклатура,ВНаличииОстаток,ВидЦены,Цена",");

    Для Каждого Строка Из Таблица Цикл
    Номенклатура = Строка.Номенклатура;
    Артикул = Строка.Номенклатура.Артикул;
    Код = Строка.Номенклатура.Код;
    Родитель = Строка.Номенклатура.Родитель;
    Единица = Строка.Номенклатура.ЕдиницаИзмерения;
    Остаток = Строка.ВНаличииОстаток;
    ВидЦены = Строка.ВидЦены;

    Если Строка.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию ("Розница") Тогда
    ЦенаРозница = Строка.Цена;
    ИначеЕсли Строка.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию ("Заказ") Тогда
    ЦенаЗаказ = Строка.Цена;
    Иначе
    КонецЕсли;

    Сообщить ("Код "+Код +" Номенклатура "+Номенклатура+" Артикул "+Артикул+
    " Родитель "+Родитель+" Единица "+Единица+
    " Остаток "+Остаток+" ЦенаЗаказ "+ЦенаЗаказ+" ЦенаРозница "+ЦенаРозница);

    КонецЦикла;
```

Все бы хорошо, но Сообщить выводит все ВидыЦен.
Как это можно исправить?
---
В СписокЦен нужно добавлять виды цен, а у вас строки. Это во первых.
Во вторых не
(15) |ГДЕ РегистрСведений.ЦеныНоменклатуры.ВидЦены В (&СписокЦен)
а
ЦеныНоменклатурыСрезПоследних.ВидЦены В (&СписокЦен)

а вообще лучше данное условие поместить в параметры виртуальной таблицы

(15) |ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних

заменить на

ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены В (&СписокЦен)) КАК ЦеныНоменклатурыСрезПоследних
---
Тогда всё верно. Тлько

```1c
    СписокЦен.Добавить("Заказ");
    СписокЦен.Добавить("Розница");
```

замените на

```1c
    СписокЦен.Добавить(Справочники.ВидыЦен.НайтиПоНаименованию("Заказ", Истина));
    СписокЦен.Добавить(Справочники.ВидыЦен.НайтиПоНаименованию("Розница", Истина));
```

если цены предопределенные, тогда

```1c
    СписокЦен.Добавить(Справочники.ВидыЦен.Заказ);
    СписокЦен.Добавить(Справочники.ВидыЦен.Розница);
```

И всё пойдет
---
Вдруг кому понадобится.

```1c
    Таблица = Запрос.Выполнить().Выгрузить();
    Таблица.Свернуть("Номенклатура,ВНаличииОстаток,ВидЦены,Цена",");
```

не сворачивается, очевидно свернуть не дает ВидЦены, убрать из свертки ВидЦены нельзя, используется далее.
Решение здесь похоже одно:
1. Запрос с одной ценой выгружаем в одну таблицу, запрос с другой ценой в другую.
2. Соединяем обе таблицы и общую таблицу сворачиваем так:

```1c
    Таблица.Свернуть("Номенклатура,ВНаличииОстаток","Цена,Цена1");
```
---
Что значит "исправить"? Удалите всю строку с "Сообщить" и будет вам счастье - не будет он выводить "все ВидыЦен".

Ну или попробуйте сделать так, чтобы в результат запроса попадали только нужные виды цен, например.
---
Возможно не корректно поставил вопрос. Мне надо загрузить в БД, соответственно, если грубо говоря написать БД.Код = Код и т.д., то у меня получается столько номенклатуры сколько ВидовЦен в базе.
---
Естественно, вы именно так запрос и написали. Именно поэтому я вам и говорю - добавьте в запрос условие, чтобы попадали только необходимые виды цен. Тогда и номенклатуры будет столько, сколько у вас в запросе получится видов цен.
---
Не правильно объяснил. Добавлю в запрос условие по двум ценам, я ведь все-равно получу:

Товар1 остаток 20 цена1 100 цена2 150
Товар1 остаток 20 цена1 100 цена2 150
Товар2 остаток 10 цена1 50 цена2 100
Товар2 остаток 10 цена1 50 цена2 100

а мне надо получить:

Товар1 остаток 20 цена1 100 цена2 150
Товар2 остаток 10 цена1 50 цена2 100
---
Все бы хорошо, но Сообщить выводит все ВидыЦен. А вроде другая проблема описана, да?
1. Левое соединение. Слева - таблица остатков, справа - две таблицы цен со связью по конкретному виду цен.
2. Объединение. Два подзапроса в каждом условие на отдельный вид цен. Потом группировка (при условии правильных отборов в виртуальных таблицах).
2. Ветвление. Запрос почти как сейчас есть, с условием по двум ценам и два поля цены (Выбор Когда Тогда Иначе 0). Потом группировка (при условии правильных отборов в виртуальных таблицах).

Выбирайте.
---
Я плоховато разбираюсь в 8.3, можете запрос написать?
---
Нет, не могу. Я и сам лох в 8.3. Посмотри на мой стаж.
А запросы учат писать на курсах или в учебниках. Там же учат и основным приемам написания запросов.
Я подсказал о существующих ошибках и о том, какими приемами можно добиться искомого результата.

Заниматься обучением или делать за других их работу - не моя стезя.
Впрочем, тут почти все такие.
Но есть и другие.
---
Я вот не понимаю, кто все эти люди, которые добрались до 1с но при этом не понимаю как сделать условие в запросе?
сисадмин которого попросили, а ему это зачем? новичек, да как он тогда устроился и кто его пустил вообще.
ученик/стажер, ну так в любой книжке об этом на второй странице написано. непонимаю
---
Я не понимаю, как это можно не понимать. Тут всё очевидно люди, которые пытаются разобраться
---
8.3 увидел месяц назад до этого работали на 7.7, согласен в 7.7 тоже есть запросы, но они там (по мне) проще, а чаще всего я обходился без них.
---
"До этого ездил на тракторе. Позавчера увидел самолет. Согласен, немного сложнее. Вот пришел к вам проконсультироваться."
Ну да, действительно - зачем тратить время на переучивание, когда под боком есть форум пилотов?
---
В запрос добавьте
  |ГДЕ РегистрСведений.ЦеныНоменклатуры.ВидЦены В (&СписокЦен)

```1c
    СписокЦен = Новый СписокЗначений;
    СписокЦен.Добавить(Цена1);
    СписокЦен.Добавить(Цена2);
    ......
    Запрос.УстановитьПараметр("СписокЦен", СписокЦен)
```
---
Спасибо, пошел пробовать!
А остальное в запросе правильно?
---
Синтаксис верный, в остальном зависит от задачи.
---
не получилось

Поле не найдено "РегистрСведений.ЦеныНоменклатуры.ВидЦены"
ГДЕ <<?>>РегистрСведений.ЦеныНоменклатуры.ВидЦены В (&СписокЦен)

Вроде бы все правильно сделал:
---
В СписокЦен нужно добавлять виды цен, а у вас строки. Это во первых.
Во вторых не
(15) |ГДЕ РегистрСведений.ЦеныНоменклатуры.ВидЦены В (&СписокЦен)
а
ЦеныНоменклатурыСрезПоследних.ВидЦены В (&СписокЦен)

а вообще лучше данное условие поместить в параметры виртуальной таблицы

(15) |ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних

заменить на

ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены В (&СписокЦен)) КАК ЦеныНоменклатурыСрезПоследних
---
Задача простая: получить товар, остаток и две цены.
---
Конечно же ГДЕ РегистрСведений.ЦеныНоменклатуры.ВидЦены В (&СписокЦен)
Смотрю уже DanDy поправил. И верно параметры виртуальной таблицы будет удачнее
---
Тогда всё верно. Тлько

```1c
    СписокЦен.Добавить("Заказ");
    СписокЦен.Добавить("Розница");
```

замените на

```1c
    СписокЦен.Добавить(Справочники.ВидыЦен.НайтиПоНаименованию("Заказ", Истина));
    СписокЦен.Добавить(Справочники.ВидыЦен.НайтиПоНаименованию("Розница", Истина));
```

если цены предопределенные, тогда

```1c
    СписокЦен.Добавить(Справочники.ВидыЦен.Заказ);
    СписокЦен.Добавить(Справочники.ВидыЦен.Розница);
```

И всё пойдет
---
Спасибо!
После ответа DanDy переделал так

```1c
    Заказ = Справочники.ВидыЦен.НайтиПоНаименованию("Заказ");
    Розница = Справочники.ВидыЦен.НайтиПоНаименованию("Розница");

    СписокЦен = Новый СписокЗначений;
    СписокЦен.Добавить(Заказ);
    СписокЦен.Добавить(Розница);
```

Ваш вариант, конечно, правильнее и красивей.

До создания темы на форуме пробовал делать типа этого:

```1c
    |ГДЕ
    | ЦеныНоменклатурыСрезПоследних.ВидЦены.Наименование = "Заказ" ИЛИ
    | ЦеныНоменклатурыСрезПоследних.ВидЦены.Наименование = "Розница"
```

Так же как и сейчас выводило две цены.

Но обоими вариантами выводит:
Товар1 Остаток 2 Цена1 100 Цена2 150
Товар1 Остаток 2 Цена1 100 Цена2 150
Товар2 Остаток 5 Цена1 10 Цена2 50
Товар2 Остаток 5 Цена1 10 Цена2 50

А мне бы получить:
Товар1 Остаток 2 Цена1 100 Цена2 150
Товар2 Остаток 5 Цена1 10 Цена2 50
---
В коде вот это осталось?

Таблица.Свернуть("Номенклатура,ВНаличииОстаток,ВидЦены,Цена","");

Тогда должно быть так

Товар1 Остаток 2 Цена1 100 Цена2 150
Товар2 Остаток 5 Цена1 10 Цена2 50

Иначе Товар1 и Товар2 не по одной позиции в справочнике номеклатура

И лучше вот так;

Таблица.Свернуть("Номенклатура,ВНаличииОстаток,ВидЦены,Цена","");
---
Ну, да есть!

```1c
    Таблица = Запрос.Выполнить().Выгрузить();
    Таблица.Свернуть("Номенклатура,ВНаличииОстаток,ВидЦены,Цена",");
```

думал свернет.
К тому же выводит так:

Код 00-00000153 Номенклатура 1118 Амортизатор крышки багажника GAMMA GMSAD1118 Артикул 1118-8231010-01 Родитель 1118 Седан Единица м Остаток 16 ЦенаЗаказ 110 ЦенаРозница
Код 00-00000153 Номенклатура 1118 Амортизатор крышки багажника GAMMA GMSAD1118 Артикул 1118-8231010-01 Родитель 1118 Седан Единица м Остаток 16 ЦенаЗаказ 110 ЦенаРозница 130
Код 00-00000154 Номенклатура 1118 Амортизатор крышки багажника фирм. упак.LADA Артикул 1118-8231010 Родитель 1118 Седан Единица м Остаток 28 ЦенаЗаказ 1 100 ЦенаРозница 130
Код 00-00000154 Номенклатура 1118 Амортизатор крышки багажника фирм. упак.LADA Артикул 1118-8231010 Родитель 1118 Седан Единица м Остаток 28 ЦенаЗаказ 1 100 ЦенаРозница 1 300

Обратите внимание на ЦенаРозница.
---
Был, конечно, еще вариант.
Сделать два запроса с разными видами цен, выгрузить их одну Таблицу и потом свернуть.
---
Это пункты 2 и 3 в сообщении (6)
---
Да, сейчас второй раз прочитал (6), согласен предлагалось.
---
Вдруг кому понадобится.

```1c
    Таблица = Запрос.Выполнить().Выгрузить();
    Таблица.Свернуть("Номенклатура,ВНаличииОстаток,ВидЦены,Цена",");
```

не сворачивается, очевидно свернуть не дает ВидЦены, убрать из свертки ВидЦены нельзя, используется далее.
Решение здесь похоже одно:
1. Запрос с одной ценой выгружаем в одну таблицу, запрос с другой ценой в другую.
2. Соединяем обе таблицы и общую таблицу сворачиваем так:

```1c
    Таблица.Свернуть("Номенклатура,ВНаличииОстаток","Цена,Цена1");
```