![]() |
#22 |
Участник
|
Цитата:
Сообщение от mazzy
![]() итак, предлагаю код метода SysQuery::countPrim для 3.0
Код: private server static container countPrim(container _queryPack) { ... ; countQueryRun = new QueryRun(_queryPack); countQuery = countQueryRun.query(); for (k = 1; k <= countQuery.dataSourceCount();k++) { qbds = countQuery.dataSourceNo(k); qbds.update(false); qbfl = qbds.fields(); qbfl.dynamic(false); qbfl.clearFieldList(); qbfl.addField(FieldNum(Common,recId),SelectionField::COUNT); } ... } Цитата:
Сообщение от Maxim Gorbunov
![]() Более правильный метод подсчета записей, возвращаемых Query см. в методе webTableLookup.run() Там есть вложенный метод computeRecordCount, который все и делает. Вкратце, суть метода такова. Сначала создается копия исходного Query. Для всех DataSource в Query отменяется динамическое создание списка выбираемых полей и добавляется только поле TableId (чтобы хоть что-то выбиралось). Далее, в самый главный DataSource добавляется Selection Field RecId с функцией агрегации COUNT
Код: for (k = 1; k <= countQuery.dataSourceCount();k++) { qbds = countQuery.dataSourceNo(k); qbds.update(false); qbfl = qbds.fields(); qbfl.dynamic(false); qbfl.clearFieldList(); if (k == 1) qbfl.addField(fieldnum(Common, RecId), SelectionField::Count); else qbfl.addField(fieldnum(Common, TableId)); } |
|