Файл: Хрусталева Е. Ю. Язык запросов 1С-Предприятия 8 (2013).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.03.2019

Просмотров: 51812

Скачиваний: 8725

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Пример этой процедуры находится в демонстрационной конфигурации «Язык запросов»,
прилагающейся к книге, в обработке Работа с запросами.

Результат иерархического обхода выборки представлен на рис. 2.34.

Рис. 2.34. Результат обхода иерархической выборки

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

Уровень() – определяет уровень текущей записи в иерархии и группировках. Уровень
считается от начальной выборки из результата запроса. Уровень начальной выборки
равен нулю.
ТипЗаписи() – определяет принадлежность записи к одному из следующих типов,
перечисленных в системном перечислении ТипЗаписиЗапроса:
общий итог,
итог по иерархии,
итог по группировке,
детальная запись.
Группировка() – определяет имя поля, по которому были рассчитаны итоги. Для
детальных записей возвращается пустая строка.

На схеме для нашего примера это будет выглядеть следующим образом (рис. 2.35).


background image

Рис. 2.35. Иерархический обход результата запроса

Мы видим, что в результате запроса рассчитаны итоги по иерархии товаров. На самом
верхнем уровне иерархии находятся записи с номерами 1, 11 (на схеме выделены
сиреневым цветом) – Обувь и Продукты. Эти записи будут получены в результате
первого прохода иерархической выборки. Уровень выборки для этих записей равен 0, тип
записи – Итог по иерархии, а группировка – поле, по которому рассчитаны итоги, –
Товар. На втором проходе иерархической выборки будут получены записи с номерами 2,
5, 8, 12, 15, 18 (на схеме выделены бежевым цветом), находящиеся на следующем
уровне иерархии – ТуфлиСапогиКроссовки и МаслоМолокоСметана. Уровень
выборки для этих записей равен 1, тип записи – Итог по группировке, а группировка –
Товар. И на третьем проходе иерархической выборки будут получены детальные записи с
номерами 3, 4, 6, 7, 9, 10, 13, 14, 16, 17, 19, 20 (на схеме выделены серым цветом).
Уровень выборки для этих записей равен 2, тип записи – Детальная запись, а
группировка – пустая строка. Термин «Группировка» здесь используется для указания
поля, по которому были рассчитаны итоги и по значению которого записи в результате
запроса собираются вместе.

Обход по группировкам
Обход результата запроса по группировкам используется в случае получения в


background image

результате запроса итоговых данных (в запросе присутствует слово ИТОГИ ПО). В
нашем примере (см. рис. 2.33) это будут записи с номерами 1, 2, 5, 8, 11, 12, 15, 18.

Для получения выборки по группам из результата запроса необходимо вызвать метод
Выбрать() объекта РезультатЗапроса с параметром
ОбходРезультатаЗапроса.ПоГруппировкам.

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

Для примера рассмотрим тот же запрос, что и в двух предыдущих случаях (листинг 2.24).

Листинг 2.24. Обход результата запроса по группам


background image

В процедуре выполнения запроса для получения групповых итогов из результата запроса
получается выборка с типом обхода ПоГруппировкам. Эта выборка обходится в цикле, и
в окно сообщений выводятся данные этой выборки.

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

В процедуре ВыдатьДочерниеЗаписи() обходятся детальные записи для каждой
группировки (итоговой строки), и в окно сообщений выводится суммарное количество
поступлений каждого товара и его наименование, а также такие характеристики текущей
записи выборки, как: УровеньТип записи и Группировка (листинг 2.25). Эти
характеристики были рассмотрены в предыдущем разделе.

Листинг 2.25. Обход дочерней выборки

Пример этой процедуры находится в демонстрационной конфигурации «Язык запросов»,
прилагающейся к книге, в обработке Работа с запросами.

Результат обхода выборки по группировкам представлен на рис. 2.36.


background image

Рис. 2.36. Результат обхода выборки по группировкам

Если в запросе получается общий итог, то эта запись занимает место в корне иерархии с
нулевым уровнем и типом записи Общий Итог, а все остальные записи как бы вложены в
нее, и их уровень соответственно возрастает на единицу.