Difference between revisions of "DB.Compute"
m (1 revision imported) |
|
(No difference)
|
Latest revision as of 07:43, 7 February 2021
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