Query.BegTotals

From SunFlurry wiki
Jump to: navigation, search
  BegTotals (Вычисление значений)
Объект:Запрос базы данных
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в строку, неверное наименование, ошибка запроса
Визуальность:Нет

Функция позволяет получить значение столбца агрегации для запроса в линейном режиме (однако, функция может выполняться и для запроса в обычном режиме, к примеру, для нахождения итого по всей таблице запроса). Агрегация выполняется в режиме начальных остатков для текущего уровня группировки таблицы, т.е. находится сумма всех записей уровня ноль, связанных с первой записью текущего уровня группировки в текущей строке таблицы. Функция делает поправку на внутренние группировки по временным значениям (к примеру, по месяцам или дням), так как в случае начального сальдо необходимо использовать только первое из значений таких группировок.

Синтаксис

Query.BegTotals(<Наименование переменной запроса (STRING)>):<Результат вычисления (NUMBER)>

Аргументы

  • <Наименование переменной запроса (STRING)> - Задает наименование переменной (столбца) запроса для агрегации значения суммы оригинальных строк для первого значения текущего уровня обхода таблицы запроса. Переменная может не быть переменной агрегации в оригинальном запросе, но должна содержать числовые значения.

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

Возвращает числовое значение-результат вычисления.

Примеры

Var З Export;

  //Функция обхода группировок на основе рекурсии
  Function ОбходГруппировок(Уровень)
    If Уровень>З.GroupCount Then
      Exit;
    EndIf;
    
    While З.Next(Уровень) Do
      //Получить значение текущей группировки
      зЭл:=З.Get(З.Groups(Уровень));

      //Получить сальдо агрегации для текущей строки
      зНачОст:=З.зНачОст;
      зКонОст:=З.зКонОст;
      зПриход:=З.зПриход;
      зРасход:=З.зРасход;

      //Вывод информации в печатную форму отчета
      ...

      //Перейти к следующей группировке
      ОбходГруппировок(Уровень+1);
    EndDo;
  EndFunction

//Выполним запрос с произвольным количеством группировок
ТЗ:=...

З:=Query.Create();
З.Execute(ТЗ);

//Вывести заголовок в печатную форму отчета
...

//Вывод строк группировок
ОбходГруппировок(1);

//Вывод строки итого, работает как линейных, так и для обычных запросов
зНачОст:=З.BegTotals("зНачОст");
зКонОст:=З.EndTotals("зКонОст");
зПриход:=З.Compute("зПриход");
зРасход:=З.Compute("зРасход");

...