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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.09.2008, 20:53   #1  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
? SUM по Amount в Query. С динамическими фильтрами по Grid
На форме есть Grid получающий данные из DS таблички.
Есть столбец Amount - сумма.

Под Гридом есть контрол RealEdit- "Сумма всего". Как в него скидывать сумма по столбцу "Сумма" в зависимости от Фильтров, которые накладывает пользователь при работе с гридом. Какие пользователь наложет фильтры загадка.

Понятно что надо сделать:
1) Создать Query, добавить addDataSource с такой же табличкой.
2) Скопировать Range у единственного DataSource формы, значение динамически меняющиеся от воли пользователя.
3) По полю Amount сделать addSelectionField с SelectionField::Sum
4) query.next() и взять результат по get
и вывести это значение в RealEdit.

Как лучше отслеживать измение в Range у DS формы и вовремя пересчитывать значение SUM? Какой правильный способ взять Range у DS?
Вызываю собственный метод для расчета сумма из executeQuery() у DS формы.

P.S. Grid должен так же отображать строки как и раньше..
Старый 24.09.2008, 21:53   #2  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Сообщение от Poleax Посмотреть сообщение
Как в него скидывать сумма по столбцу "Сумма" в зависимости от Фильтров, которые накладывает пользователь при работе с гридом. Какие пользователь наложет фильтры загадка.
Фильтрация

А про остальное Вы вроде сами все написали
Старый 24.09.2008, 22:48   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Посмотрите, как реализован метод SysQuery::countPrim() и его вызов в SysQuery::countTotal().
Фактически, вам надо будет организовать только передачу идентификатора поля, по которому будет считаться сумма и задавать для него SelectionField с типом SUM.
Обратите внимание, что в этом методе учитывается кол-во датасорсов в Query и если их больше единицы, то подсчет кол-ва идет путем пробега в цикле по всем записям датасорса.
Что бы избежать этого, можно проверить наличие датасорсов, присоединенных по inner или outer join и для них так же сделать сброс настроек, а так же добавить в SelectionFields подсчет кол-ва по recId (или, вместо этого, добавить tableID)
Еще, остается возможное наличие группировок, которые так же необходимо будет отключать

Ну и сам подсчет будет заключаться в передаче в такой метод QueryRun().Query() вашего датасорса с формы, а его вызов вставить в QueryExecute() после super()
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 24.09.2008 в 22:54.
Старый 25.09.2008, 13:49   #4  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
что то как то не совсем получается задачка
X++:
display real mSumAll()
{
  CashflowFactTrans_MCFR CFT;
  TransDate dateF,dateT;
  Query     q =new Query();
  QueryBuildDataSource qbds=q.addDataSource(tableNum(CashflowFactTrans_MCFR)), qbdsCopy;
  QueryRun qr;
   ;

 qbds=cashflowFactTrans_ds.queryRun().query().dataSourceNo(1);
 qbdsCopy=qbds;

  if(cashflowFactTrans_ds.queryRun().query().dataSourceNo(1).findRange(fieldnum(CashflowFactTrans_MCFR, recId)))
     {
       qbds.addRange(fieldnum(CashflowFactTrans_MCFR, recId)).value(
       cashflowFactTrans_ds.queryRun().query().dataSourceNo(1).findRange(fieldnum(CashflowFactTrans_MCFR, recId)).value());
     }


 qbds.addSelectionField(fieldNum(CashflowFactTrans_MCFR, Amount), SelectionField::Sum);

 qr= new QueryRun(q);
 qr.next();
 CFT = qr.get(tableNum(CashflowFactTrans_MCFR));

// qbds=qbdsCopy;
 //qr.next();


return   CFT.Amount;
}
как все таки махом получить все Range по единственной табличке cashflowFactTrans_ds.queryRun().query().dataSourceNo(1)
X++:
public void executeQuery()
{
    super();
    SumAll.realValue(element.mSumAll());
}
Старый 25.09.2008, 13:57   #5  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Сообщение от Poleax Посмотреть сообщение
как все таки махом получить все Range по единственной табличке cashflowFactTrans_ds.queryRun().query().dataSourceNo(1)
Получение текущего списка Range'ей
Старый 25.09.2008, 14:19   #6  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
X++:
display real mSumAll()
{
  CashflowFactTrans_MCFR CFT;
  Query     q =new Query(cashflowFactTrans_ds.queryRun().query());
  ;
  qbds=q.dataSourceNo(1);

  qbds.addSelectionField(fieldNum(CashflowFactTrans_MCFR, Amount), SelectionField::Sum);

  qr= new QueryRun(q);
  qr.next();
  CFT = qr.get(tableNum(CashflowFactTrans_MCFR));

  return   CFT.Amount;
}
Старый 25.09.2008, 15:33   #7  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Проблемка то скорее не в том что считается. А в том что Grid сворачивается.
Считает то все отлично. И моим способом. Просто мне надо обойти проблему, чтоб и DS формы для Grida не суммировался
X++:
display real mSumAll2()
{
  CashflowFactTrans_MCFR CFT;
  Query     q =new Query(cashflowFactTrans_ds.queryRun().query());
  QueryBuildDataSource qbds;
  QueryRun qr;
  ;

  qbds=q.dataSourceNo(1);

  qbds.addSelectionField(fieldNum(CashflowFactTrans_MCFR, Amount), SelectionField::Sum);

  qr= new QueryRun(q);
  qr.next();
  CFT = qr.get(tableNum(CashflowFactTrans_MCFR));

  return   CFT.Amount;
}
Миниатюры
Нажмите на изображение для увеличения
Название: SumAll.PNG
Просмотров: 418
Размер:	28.3 Кб
ID:	3753  
Старый 25.09.2008, 15:42   #8  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Сообщение от Poleax Посмотреть сообщение
Проблемка то скорее не в том что считается. А в том что Grid сворачивается.
Считает то все отлично. И моим способом. Просто мне надо обойти проблему, чтоб и DS формы для Grida не суммировался
X++:
//Query     q =new Query(cashflowFactTrans_ds.queryRun().query());

    Query       q = new Query(cashflowFactTrans_ds.queryRun().query().pack());
    ;
Вашу строку, которую я закоментил в примере выше замените на следующую и не должно свернуться.
За это сообщение автора поблагодарили: Poleax (1).
Старый 25.09.2008, 16:04   #9  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Да да да.. именно .pack()
Респект Lemming
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
select sum(amount) Eldar9x DAX: Программирование 33 01.02.2007 16:41
select sum(amount) from временная таблица ATimTim DAX: Программирование 6 11.06.2004 14:16
query grid ald DAX: Программирование 16 07.05.2004 15:35
query->DataSource->grid ald DAX: Программирование 2 06.02.2004 09:24
Query to Grid ? Mack DAX: Программирование 4 10.11.2002 14:09
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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