Работа с выборкой
Объект ВыборкаИзРезультатаЗапроса предназначен для обхода записей результата запроса. Можно представить себе выборку как некоторый объект, который содержит указатель на текущую запись в результате и предоставляет программе доступ ко всем полям текущей записи. Для навигации по записям запроса используются три метода:
• Следующий - перейти к следующей записи результата в соответствии с порядком обхода выборки. При первом вызове позиционирует выборку на первую запись. Когда будут выбраны все записи, данный метод просигнализирует об этом, вернув значение «Ложь».
• СледующийПоЗначениюПоля - получить следующую запись со значением в заданном поле, отличающимся от значения в этом поле текущей записи.
• НайтиСледующий - найти запись, с заданными значениями некоторых полей.
Использование метода СледующийПоЗначениюПоля
Метод позволяет сгруппировать записи результата по значениям полей.
Пример:
Выбрать
Док.Товар,
Док.Получатель,
Док.Количество
ИЗ
Документ.РасхНакл.Состав Док
Упорядочить по
Док.Товар.Наименование,
Док.Получатель.Наименование.
Его результат представлен в таблице:
№ | Товар | Получатель | Количество |
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 | »»»»»»»»»» |