DB.Compute

From SunFlurry wiki
Revision as of 14:59, 18 September 2019 by Admin (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
  Compute (Выполнение агрегации для объектов)
Объект:Объект базы данных
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Сервер и БД
Исключения:Невозможно превратить в строку, неверные реквизиты, неверные операции, ошибка в фильтрах
Визуальность:Нет

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

  • Столбцы реквизитов группировки, наименования совпадают с наименованиями реквизитов.
  • Столбцы агрегации. Наименования эти столбцов создаются в виде _<Тип операции агрегации>_<Наименование реквизита агрегации>. К примеру, для реквизита агрегации Сумма:SUM будет создан столбец _SUM_Сумма.

Синтаксис

DB.Compute(<Список реквизитов группировки (STRING)>,<Список реквизитов агрегации с типами операций (STRING)>,<Стандарные фильтры>...):<Результат вычисления (TAB)>

Аргументы

  • <Список реквизитов группировки (STRING)> - Аргумент перечисляет наименования реквизитов группировки, разделенных запятыми. Каждый из реквизитов должен присутствовать в оригинальном объекте.
  • <Список реквизитов агрегации с типами операций (STRING)> - Аргумент перечисляет наименования реквизитов агрегации с типами операций агрегации, разделенных запятыми. Каждая запись выполняется в виде <Наименование реквизита>[:<Вид операции агрегации>]. По умолчанию выполняется операция SUM. Допустимые виды операции агрегации:
    • SUM (по умолчанию) -- найти суммы реквизита агрегации в требуемых разрезах
    • COUNT -- подсчитать количество записей, участвовавших в агрегации записи-результата
    • AVG -- найти средние значения реквизита агрегации в требуемых разрезах
    • MAX -- найти максимальное значения реквизита агрегации в требуемых разрезах
    • MIN -- найти минимальное значения реквизита агрегации в требуемых разрезах
  • <Стандартные фильтры поиска> - (необязательный аргумент) Стандартные фильтры позиционирования описаны в статье Стандартные фильтры.

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

Возвращается таблица, результат запроса по агрегации.

Примеры

//Фрагмент находит максимальное значение реквизита Идентификатор документа Задание и создает новое уникальное значение в текущем документе aEl
//Для уверенности в уникальности нового значения, до его создания будет осуществлена блокировка серверного семафора "СозданиеИдентификатораЗадания"
While not DBLockStringMutex("СозданиеИдентификатораЗадания") Do
  Sleep(10);
EndDo;
Try
  Ном:=0;
  аДок:=Doc.Задание;
  aTab:=аДок.Compute("","Идентификатор:MAX","<DocDate,>=DocDate",BegOfDay(aEl.DocDate+1),BegOfDay(aEl.DocDate));
  If aTab.Size()>0 Then
    //Получаем текущее максимальное значение реквизита
    Ном:=Number(aTab.Get(1,"_MAX_Идентификатор"));
  EndIf;
  //Увеличиваем значение и сохраняем в текущем документе
  aEl.Идентификатор:=Min(Ном+1,9999);
  aEl.Save();
Finally
  DBUnlockStringMutex("СозданиеИдентификатораЗадания");
EndTry