Получает следующую запись по значению указанного поля. Выборка позиционируется на следующую запись со значением, отличающимся от текущего значения, по указанному полю. При первом вызове - остается на текущей записи.
Синтаксис
СледующийПоЗначениюПоля(<ИмяПоля>)Примеры платформы
Пока Выборка.СледующийПоЗначениюПоля("Товар") Цикл
...
КонецЦикла;Полное описание, параметры и ограничения
ВыборкаИзРезультатаЗапроса.СледующийПоЗначениюПоля (QueryResultSelection.NextByFieldValue)
ВыборкаИзРезультатаЗапроса (QueryResultSelection)
СледующийПоЗначениюПоля (NextByFieldValue)
Доступен, начиная с версии 8.0.
Синтаксис:
СледующийПоЗначениюПоля(<ИмяПоля>)
Параметры:
<ИмяПоля> (обязательный)
Тип: Строка.
Имя поля результата запроса, в котором будет осуществляться поиск следующего значения.
Возвращаемое значение:
Тип: Булево.
Истина - следующая запись выбрана; Ложь - достигнут конец выборки.
Описание:
Получает следующую запись по значению указанного поля. Выборка позиционируется на следующую запись со значением, отличающимся от текущего значения, по указанному полю. При первом вызове - остается на текущей записи.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Пример:
Пока Выборка.СледующийПоЗначениюПоля("Товар") Цикл
...
КонецЦикла;
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Обойти соседние строки одного товара методом СледующийПоЗначениюПоля
Плоская выборка отсортирована по товару: внешний цикл меняет товар, внутренний читает его строки.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Используйте приведённые три строки и сортировку Название; строки одного товара должны идти рядом.
Здесь нет предложения ИТОГИ: показано управление курсором плоской выборки.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ""Книга"" КАК Название, 3 КАК Количество
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Книга"", 2
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Ручка"", 1
|УПОРЯДОЧИТЬ ПО Название";
Выборка = Запрос.Выполнить().Выбрать();
ВсегоСтрок = 0;
ВсегоКоличество = 0;
Пока Выборка.СледующийПоЗначениюПоля("Название") Цикл
НазваниеГруппы = Выборка.Название;
КоличествоГруппы = Выборка.Количество;
ВсегоСтрок = ВсегоСтрок + 1;
Пока Выборка.Следующий() Цикл
КоличествоГруппы = КоличествоГруппы + Выборка.Количество;
ВсегоСтрок = ВсегоСтрок + 1;
КонецЦикла;
ВсегоКоличество = ВсегоКоличество + КоличествоГруппы;
Сообщить(СтрШаблон("%1: %2", НазваниеГруппы, КоличествоГруппы));
КонецЦикла;
Сообщить(ВсегоСтрок = 3);
Сообщить(ВсегоКоличество = 6);Разбор по шагам
СледующийПоЗначениюПоля начинает новую группу одинаковых значений. Первый её элемент уже текущий, поэтому сразу учитываем его.
Внутренний Следующий читает остальные строки этой группы и останавливается на смене значения.
Следующий вызов внешнего метода переходит к следующему названию. Общий счёт строк помогает заметить пропуск первой записи.
Для настоящих итогов в отчёте можно выбрать запрос с ИТОГИ; этот урок специально показывает курсор без итогов.
Как проверить результат
Сообщения содержат Книга: 5, Ручка: 1; контроль трёх строк и количества 6 — Истина.
Добавьте третью строку Книга с количеством 4: итог этой группы станет 9, измените контроль числа строк и суммы.
Не убирайте сортировку: объединённые ветви сами по себе не гарантируют нужного порядка.
Ожидаемый результат
Соседние строки одного значения обработаны группами без повторного чтения первой строки.
На что обратить внимание
У обычного Следующий есть особое ограничение после СледующийПоЗначениюПоля: он остаётся внутри текущего значения поля.
Без сортировки одинаковые названия могут образовать отдельные несмежные группы.
Если нужны группы в произвольном порядке исходных данных, используйте запрос с группировкой или накопление в Соответствие.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.