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

         

Работа с выборкой


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

• Следующий - перейти к следующей записи результата в соответствии с порядком обхода выборки. При первом вызове позиционирует выборку на первую запись. Когда будут выбра­ны все записи, данный метод просигнализирует об этом, вер­нув значение «Ложь».

• СледующийПоЗначениюПоля - получить следующую за­пись со значением в заданном поле, отличающимся от значе­ния в этом поле текущей записи.

• НайтиСледующий - найти запись, с заданными значениями некоторых полей.

Использование метода СледующийПоЗначениюПоля

Метод позволяет сгруппировать записи результата по значениям полей.

Пример:

Выбрать

    Док.Товар,

    Док.Получатель,

    Док.Количество

ИЗ

    Документ.РасхНакл.Состав Док



Упорядочить по

    Док.Товар.Наименование,

    Док.Получатель.Наименование.

Его результат представлен в таблице:

Товар Получатель Количество
1 Смеситель Маг. "Гигант" 14
2 Смеситель Маг. "Хозяин" 1
3 Смеситель Мосгорторг 5
4 Кран Маг. "Гигант" 44
5 Кран Маг. "Хозяин" 8
6 Кран Мосгорторг 10
7 Кран Мосгорторг 22
8 Стол Маг. "Гигант" 10
9 Стол Маг. "Мебель" 15
10 Стол Мосгорторг 1
11 Стул Маг. "Гигант" 32
12 Стул Маг. "Мебель" 55
13 Стул Маг. "Хозяин" 5
14 Стул Мосгорторг 16

Получим линейную выборку из результата запроса и обойдем выборку при помощи метода СледующийПоЗначениюПоля.

Пример:

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

Пока Выборка.СледующийПоЗначениоПоля("Товар") Цикл




    // здесь мы получим записи с номерами 1, 4, 8, 11

    Пока Выборка.СледующийПоЗначениюПоля('Получатель") Цикл

        // здесь мы сначала получим записи с номерами 1, 2, 3

        // затем 4, 5, 6

        // затем 8, 9, 10

        // затем 11, 12, 13, 14

    КонецЦикла;

КоиецЦикла ;

Следует обратить внимание на то, что во внутреннем цикле не была выбрана запись с номером 7, т.к. в ней такое же значение поля «Получатель» как и в предыдущей записи.

Заметим, что если в цикле получения по значению поля получать записи при помощи метода Следующий, то будут выбраны все записи с равным значением поля, заданного в предыдущем вызове метода СледующийПоЗначениюПоля.

Пример:

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

Пока Выборка.СледующийПоЗначениюПоля("Товар") Цикл

// здесь мы получим записи с номерами 1, 4, 8, 11

Пола Выборка.Следующий() Цикл

    // здесь мы сначала получим записи с номерами 1, 2, 3

    // затем 4, 5, 6, 7

    // затем 8, 9, 10

    // затем 11, 12, 13, 14

    КонецЦикла;

КонецЦикла;

Методы определения типа текущей записи

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

Уровень - определяет уровень записи в результате запроса.

ТипЗаписи - определяет принадлежность записи к одному из следующих типов:

• групповой итог;

• итого по иерархии;

• детальная запись;

• общий итог.

Группировка - определяет имя поля, по которому были рассчитаны итоги.

Для иллюстрации работы этих методов посмотрим, что они будут возвращать записи для запроса, рассматриваемого в начале гла­вы:

Выбрать

    Товар, Количество Количество

Из

    Документ.РасхНакл.Состав



Упорядочить по

    Товар

Итоги

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

Результат представлен в таблице:

Товар Количество Уровень ТипЗаписи Группировка
1 Сантехника 104 0 ИтогПоИерархии Товар
2 Кран 84 1 ИтогПоГруппировке Товар
3 Кран 10 2 ДетальнаяЗапись  
4 Кран 8 2 ДетальнаяЗапись  
5 Кран 44 2 ДетальнаяЗапись  
6 Кран 22 2 ДетальнаяЗапись  
7 Смеситель 20 1 ИтогПоГруппировке Товар
8 Смеситель 5 2 ДетальнаяЗапись  
9 Смеситель 1 2 ДетальнаяЗапись  
10 Смеситель 14 2 ДетальнаяЗапись  
11 Мебель 134 0 ИтогПоИерархии Товар
12 Стол 26 1 ИтогПоГруппировке Товар
13 Стол 1 2 ДетальнаяЗапись  
14 Стол 15 2 ДетальнаяЗапись  
15 Стол 10 2 ДетальнаяЗапись  
16 Стул 108 1 ИтогПоГруппировке Товар
17 Стул 55 2 ДетальнаяЗапись  
18 Стул 5 2 ДетальнаяЗапись  
19 Стул 32 2 ДетальнаяЗапись  
20 Стул 16 2 ДетальнаяЗапись  
«««««««««« 1С:Предприятие 8.0 »»»»»»»»»»

Содержание раздела