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

Пытаюсь разобраться с запросами, и понять что из себя представляют типы РезультатЗапроса и ВыборкаИзРезультатаЗапроса, а также что происходит при Выполнить() и Выбрать(). Поправьте, пожалуйста, где ошибаюсь.

Как я понимаю, из Справочника с количеством реквизитов n (по сути таблица с n-столбцами) и количеством элементов (строк) m, мы получаем таблицу со столбцами Ссылка, Наименование, Родитель. Строк в ней будет столько, сколько элементов отвечает условию ГДЕ. С циклом Выборка.Следующий() мне уже тогда все понятно.

Что НЕ понятно - так это результаты методов Выполнить и Выбрать. Какую таблицу мы имеем на руках после каждого из них? Интуиция говорит что Выполнить() сразу дает таблицу с 3мя столбцами и только нужными нам строками. Но тогда зачем метод Выбрать()? Мне кажется я правильно представляю результат двух этих методов выполненных вместе, а вот что делает каждый из них в отдельности... Можете объяснить на пальцах?
---
Выполнить() - происходит выполнение sql запроса.
Выбрать() - создается объект ВыборкаИзРезультатаЗапроса, который забирает данные в память.
Следующий() обходит полученную выборку.
---
https://its.1c.ru/db/metod8dev#content:2582:hdoc
---
Выполнить - это выполнить запрос с указанными параметрами и текстом запроса .
Результат команды "Выполнить" можно выгрузить в таблицу значений либо открыть выборку командой "Выбрать()"
---
Например
Запрос=Новый Запрос;

 Запрос.Текст="ВЫБРАТЬ
              | Номенклатура.Ссылка КАК Ссылка
              |ИЗ
              | Справочник.Номенклатура КАК Номенклатура
              |ГДЕ
              | Номенклатура.Родитель = &Родитель" ;
 Запрос.УстановитьПараметр("Родитель",ЗначениеОтбора);
 РезультатЗапроса=Запрос.Выполнить();
 ТЗ=РезультатЗапроса.Выгрузить(); // Выгружаем в таблицу значений

Выборка=РезультатЗапроса.Выбрать(); // выборка результатов запроса
 Пока Выборка.Следующий() Цикл
  .....
 КонецЦикла;
---
Выборка=РезультатЗапроса.Выбрать();

Спасибо за выгрузку в таблицу, посмотрел что получается в ней - стало намного понятнее. Еще немного поискал про выборку. Выходит все что делает команда Выбрать() - ставит указатель на первую строку результата запроса? А команда Следующий() опускает этот указатель на 1 строку после каждой итерации цикла?
---
Если тебе так будет проще понять, то выполнить() это то же что и execute(), а следующий() это moveNext()
---
С выполнить() и следующий() мне уже все понятно. Я толком не пойму что конкретно происходит с выбрать().
---
Выполнить() - происходит выполнение sql запроса.
Выбрать() - создается объект ВыборкаИзРезультатаЗапроса, который забирает данные в память.
Следующий() обходит полученную выборку.
---
Вот, так понятно. Спасибо.
---
А почитать учебники по программированию в 1С, а не интуицию?
---
А почитать учебники по программированию в 1С, а не интуицию?
Приносит чукча в редакцию свой роман, но
редактор после прочтения отказывается
опубликовать этот шедевр:
- Вам бы надо классику почитать - Пушкина, Тургенева, Толстого...
На что чукча отвечает:
- Чукча не читатель, однако! Чукча - писатель…