12.11.2003, 15:54 | #1 |
Участник
|
Как посчитать итог для Query
На форме есть запрос Query q;
Запрос ссылается на таблицу T: T.sum1; Как посчитать итог по столбцу sum1, используя Query q ? |
|
12.11.2003, 16:24 | #2 |
Участник
|
Попробуй сделать так.
Один query у тебя привязан к датасорсу table_ds.query(query); после инициализации query сделай его точную такую же инициализацию второго query2, за исключением того что там будет строка типа: addSelectionField(поле sum1 , selectionField::sum); и где нибудь внизу на форме сделай контрольчик на основе дисплей метода а в дисплей-методе c помощью queryRun подсчитай итог. Я обычно всегда в таких случаях завожу на форме метод calcTotals, который и подсчитываем итоги по нужным мне полям, а вызов этого метода ставлю в executeQuery после super(); Это гарантирует автопересчет итогов при любом изменении выборки, например : найти или фильтрации. Если ты это хочешь сделать это в один присест, то у тебя вряд ли получится, поскольку то что ты хочешь это фактически имитация SQL-оператора HAVING, насколько я знаю в аксапте средствами queryBuildDataSource просто невозможная. |
|
12.11.2003, 16:37 | #3 |
Участник
|
А можно обнародовать пример инициализации запроса query2 и метод CalcTotals?
Заранее благодарен. |
|
12.11.2003, 16:54 | #4 |
Участник
|
насчет query2 вряд ли, тут все зависит от конкретного случая, а
с calcTotals все примитивно. Вешаешь вызов в executeQuery после super(). И сам метод: Допустим нам нужно подсчитать итог по полю costAmountPosted (чистая себестоимость) в таблице InventTrans public void calcTotals() { common saved = inventTrans.data(); costAmountPosted value; ; element. lockWindowUpdate(true); inventTrans_ds.first(); do { value += inventTrans.costAmountPosted; } while (inventTrans_ds.next()); control.realValue(value); inventTrans_ds.findRecord(saved); element. lockWindowUpdate(false); } findRecord - это чтобы курсор вернулся на ту запись где пользователь стоял lockWindowUpdate - чтобы пользователь не видел пробега курсора по датасорсу |
|
12.11.2003, 18:05 | #5 |
Участник
|
А где же тут использование query2 ??
Это пробежка по датасоурсу. Если записей в текущей выборке много, то такая выборка вряд ли будет эффективной (( |
|
12.11.2003, 18:16 | #6 |
Banned
|
Да, жутко неэффективный код. Я такой видел у лишь у некоторых австрийских мастеров Джоба и Морфикса. Хороший же пример подает \Classes\SysQuery\countPrim.
|
|
13.11.2003, 09:46 | #7 |
Участник
|
Про этот класс я знаю.
Он возвращает некий контейнер однако при применении conpeek у меня всегда получается 0. Может ты подскажешь как его задействовать по уму. А то я пока только countLoops пользовался для подсчета количества записей на датасорсе - работает прекрасно. |
|