1С Предприятие 8.0. Описание встроенного языка



              

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


/p>

Из этого рисунка видно, что именно записи с номерами 1 и 11, и только они находятся на первом уровне дерева, в результате чего только они и попадают в первый проход иерархической выборки.

Возникает вопрос, как получать остальные записи результата за­проса. Для этого у объекта ВыборкаИзРезультатаЗапроса можно получить еще одну выборку, которая будет обходить под­чиненные записи текущей записи выборки. В нашем примере в момент, когда объект Выборка2 будет позиционирован на запись с номером 1, мы запросим у него иерархическую выборку. Таким образом, мы получим выборку, которая нам вернет записи с но­мерами 2, 7. А когда Выборка2 будет спозиционирована на записи с номером 11, то полученная у нее иерархическая выборка вернет записи с номерами 12, 16. Так реализуется иерархический обход результатов запроса Заметим, что у выборки можно получать вложенные выборки любого типа. Так, если бы мы запросили у Выборки2, спозиционированной на записи 1, линейную выборку, то с ее помощью мы бы получили записи с номерами записей со 2-го по 10-й. Проиллюстрируем описанную методику на примере.

Пример:

Процедура ВыдатьРекурсивно(Выборка) Далее;

Процедура ВыполнитьЗапрос()

    Запрос = Новый Запрос;

    Текст = "Выбрать Товар, Количество

        |    Из Документ.РасхНакя.Состав

        |    Упорядочить по Товар

        |    Итоги Сумма(Количество) По Товар, Товар Иерархия";

    РезультатЗапроса = Запрос.Выполнить();

    // Получим выборку из результата запроса.

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

    Выборка = РезультатЗапроса.Выбрать(СпособВыборки);

    ВыдатьРекурсивно(Выборка);

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

Процедура ВыдатьРекурсивно(Выборка)

    // Пока в выборке есть записи ...




Содержание  Назад  Вперед