Difference between revisions of "Query.Prev"
m (1 revision imported) |
|
(No difference)
|
Latest revision as of 07:52, 7 February 2021
Prev (Обход результата запроса) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция выполняет шаг внутри указанной группировки запроса при обходе таблицы запроса в обратном направлении. Если следующая запись найдена, функция возвращает 1, иначе возвращает 0, и курсор переносится в начало текущего уровня, как при выполнении функции <Запрос>.Last(<Уровень>-1)
(после чего текущий уровень можно обойти еще раз, получая те же самые записи), таким образом группировочные строки, при выводе в печатную форму или таблицу, можно добавлять как до, так и после строк нижнего уровня. Функция работает как для обычных, так и для линейных запросов. Внимание: индекс группировки, используемый в этой функции, противоположен индексам, записанным в столбец @LEVEL таблицы результата запроса (пример, для запроса с тремя группировками, индекс этой функции 1 соответствует значению столбца @LEVEL, равному 3)! Изменение позиции текущей записи в таблице результата запроса при вызове функции можно показать на примере ниже:
//Картина исходных уровней таблицы для запроса в обычном режиме Группировка 1 Группировка 2 Группировка 3 Группировка 1 <--- Положение курсора обхода до вызова функции Группировка 2 Группировка 3 Группировка 3 Группировка 2 Группировка 3 Группировка 2 Группировка 3 Группировка 3 Группировка 3 Группировка 1 ... //5 последовательных вызовов функции Prev(2) Группировка 1 Группировка 2 Группировка 3 Группировка 1 <--- 4-ый вызов Prev(2), функция возвратила 0 Группировка 2 <--- 3-ий вызов Prev(2) Группировка 3 Группировка 3 Группировка 2 <--- 2-ой вызов Prev(2) Группировка 3 Группировка 2 <--- 1-ый вызов Prev(2) <--- 5-тый вызов Prev(2) Группировка 3 Группировка 3 Группировка 3 Группировка 1 ...
Синтаксис
Query.Prev(<Индекс или наименование группировки запроса (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 З.Prev(1) Do While З.Prev(2) Do While З.Prev(3) Do If (З.зКл<>0)or(З.зСм<>0) Then //Добавим в таблицу одну строку З.зКл и З.зСм -- переменные агрегации, остальные переменные являются переменными группировок aTab.AddLine("Номенклатура,Договор,Склад,Количество,Сумма",З.зН,З.зД,З.зСк,З.зКл,З.зСм); EndIf; EndDo; EndDo; EndDo;