AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.11.2003, 15:54   #1  
chuf is offline
chuf
Участник
 
33 / 10 (1) +
Регистрация: 20.12.2002
Как посчитать итог для Query
На форме есть запрос Query q;
Запрос ссылается на таблицу T: T.sum1;

Как посчитать итог по столбцу sum1, используя Query q ?
Старый 12.11.2003, 16:24   #2  
andreynikolai is offline
andreynikolai
Участник
 
133 / 10 (1) +
Регистрация: 11.04.2002
Попробуй сделать так.
Один 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  
chuf is offline
chuf
Участник
 
33 / 10 (1) +
Регистрация: 20.12.2002
А можно обнародовать пример инициализации запроса query2 и метод CalcTotals?

Заранее благодарен.
Старый 12.11.2003, 16:54   #4  
andreynikolai is offline
andreynikolai
Участник
 
133 / 10 (1) +
Регистрация: 11.04.2002
насчет 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  
chuf is offline
chuf
Участник
 
33 / 10 (1) +
Регистрация: 20.12.2002
А где же тут использование query2 ??

Это пробежка по датасоурсу. Если записей в текущей выборке много,
то такая выборка вряд ли будет эффективной ((
Старый 12.11.2003, 18:16   #6  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Да, жутко неэффективный код. Я такой видел у лишь у некоторых австрийских мастеров Джоба и Морфикса. Хороший же пример подает \Classes\SysQuery\countPrim.
Старый 13.11.2003, 09:46   #7  
andreynikolai is offline
andreynikolai
Участник
 
133 / 10 (1) +
Регистрация: 11.04.2002
Про этот класс я знаю.
Он возвращает некий контейнер однако при применении conpeek
у меня всегда получается 0.
Может ты подскажешь как его задействовать по уму.
А то я пока только countLoops пользовался для подсчета количества записей на
датасорсе - работает прекрасно.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
palleagermark: Sample union query from AX 2009 Blog bot DAX Blogs 0 11.07.2008 20:05
Dynamics AX Geek: Using query() Blog bot DAX Blogs 0 28.10.2006 16:40
Установка условия ИЛИ (OR) в Query Zeratul DAX: Программирование 3 22.06.2006 14:28
Проблема с составлением Query axaLearner DAX: Программирование 10 01.12.2005 15:00

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:28.