Skip to main content

Способы обхода результата запроса

Способы обхода выборки: в линейном порядке, в иерархическом порядке или по группировкам. Тип обхода выборки задается значением системного перечисления ОбходРезультатаЗапроса и передается в качестве параметра в метод Выбрать() объекта
РезультатЗапроса. При линейном обходе выборки будут последовательно получаться все записи из результата запроса, при иерархическом обходе получаются только записи результата запроса, находящиеся на одном уровне иерархии, при обходе по 
группировкам будут получены только родительские записи, являющие групповыми итогами. 

Тип выборкиОписаниеФункция в коде
Линейныйвсе записи из результата запроса

Без указания способа или

СпособВыборки = ОбходРезультатаЗапроса.Прямой;

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