Difference between revisions of "Query.Next"
(No difference)
|
Revision as of 19:40, 4 November 2019
| 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;