Difference between revisions of "Query.Next"

From SunFlurry wiki
Jump to: navigation, search
 
m (1 revision imported)
 
(No difference)

Latest revision as of 08:52, 7 February 2021

  Next (Обход результата запроса)
Объект:Запрос базы данных
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в строку, число, неверная группировка, ошибка запроса.
Визуальность:Нет

Функция выполняет шаг внутри указанной группировки запроса при обходе таблицы запроса в прямом направлении. Если следующая запись найдена, функция возвращает 1, иначе возвращает 0, и курсор переносится в начало текущего уровня, как при выполнении функции <Запрос>.First(<Уровень>-1) (после чего текущий уровень можно обойти еще раз, получая те же самые записи), таким образом группировочные строки, при выводе в печатную форму или таблицу, можно добавлять как до, так и после строк нижнего уровня. Функция работает как для обычных, так и для линейных запросов. Внимание: индекс группировки, используемый в этой функции, противоположен индексам, записанным в столбец @LEVEL таблицы результата запроса (пример, для запроса с тремя группировками, индекс этой функции 1 соответствует значению столбца @LEVEL, равному 3)! Изменение позиции текущей записи в таблице результата запроса при вызове функции можно показать на примере ниже:

//Картина исходных уровней таблицы для запроса в обычном режиме
Группировка 1
  Группировка 2
    Группировка 3
Группировка 1 <--- Положение курсора обхода до вызова функции
  Группировка 2
    Группировка 3
    Группировка 3
  Группировка 2
    Группировка 3
  Группировка 2
    Группировка 3
    Группировка 3
    Группировка 3
Группировка 1
...

//5 последовательных вызовов функции Next(2)
Группировка 1
  Группировка 2
    Группировка 3
Группировка 1 <--- 4-ый вызов Next(2), функция возвратила 0
  Группировка 2 <--- 1-ый вызов Next(2)    <--- 5-тый вызов Next(2)
    Группировка 3
    Группировка 3
  Группировка 2 <--- 2-ой вызов Next(2)
    Группировка 3
  Группировка 2 <--- 3-ий вызов Next(2)
    Группировка 3
    Группировка 3
    Группировка 3
Группировка 1
...

Синтаксис

Query.Next(<Индекс или наименование группировки запроса (INT,STRING)>):<Найдена следующая запись на указанном уровне группировки (INT)>

Аргументы

  • <Индекс или наименование группировки запроса (INT,STRING)> - Аргумент задает наименование столбца группировки или индекс группировки.

Возвращаемое значение

Возвращает единицу, если найдена еще по крайней мере одна запись в таблице результата запроса внутри указанной группировки, иначе, возвращает ноль.

Примеры

//Находим сальдо по накопителю РезервыТМЦ на момент текущего документа, при этом
//aEl -- текущий документ
//aTab -- визуальная таблица, в которую будет выведен результат
КонДата:=aEl.DocDate;
ТЗ:="PeriodT From КонДата to КонДата;
|зД:=Storage.РезервыТМЦ.Договор;
|зН:=Storage.РезервыТМЦ.Номенклатура;
|зСк:=Storage.РезервыТМЦ.Склад;
|зКл:=EndTotals(Количество);
|зСм:=EndTotals(Сумма);
|Condition(зСк=aEl.Склад);
|Group зСк,зД,зН;";
  
З:=Query.Create();
З.Execute(ТЗ);

//Запрос выполнен, произведем обход результата по всем трем вложенным группировкам, используемым здесь для сортировки таблицы
aTab.ClearLines();
While З.Next(1) Do
  While З.Next(2) Do
    While З.Next(3) Do
      If (З.зКл<>0)or(З.зСм<>0) Then
        //Добавим в таблицу одну строку З.зКл и З.зСм -- переменные агрегации, остальные переменные являются переменными группировок
        aTab.AddLine("Номенклатура,Договор,Склад,Количество,Сумма",З.зН,З.зД,З.зСк,З.зКл,З.зСм);
      EndIf;
    EndDo;
  EndDo;
EndDo;