Difference between revisions of "DB.Compute"
(No difference)
|
Revision as of 13:59, 18 September 2019
| 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