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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.03.2010, 17:14   #1  
Zlojbarsuk is offline
Zlojbarsuk
Участник
 
26 / 12 (1) ++
Регистрация: 08.08.2007
Сортировка в Query в отчете
Добрый день!
Может кто нибудь подскажет как решить следующую проблему:

Передаю query из формы в отчёт, чтобы в отчете отобразить фильтры, применённые пользователем. При этом важно, чтобы в отчете всегда были итоги в разрезе по складам.
Если, например, пользователь отсортировал грид по коду цвета, то сортировка по складу у меня становится вторичной. А мне необходимо, чтобы независимо от того, как пользователь отфильтрует грид, сортировка по складу всегда была первичной. Возможно ли так сделать?

Делаю так:
X++:
void clicked()
{
QueryBuildDataSource    QBDS;    
 ;
 super();

QBDS = TmpTableLine_ds.queryRun().query().dataSourceNo(1);
QBDS.addSortField(fieldNum(TmpTableLine, InventLocationId));

inventOnHand.parmQuery(TmpTableLine_ds.queryRun().query());
    
inventOnHand.BuildReport();

}

Последний раз редактировалось Zlojbarsuk; 25.03.2010 в 17:17. Причина: уведомление
Старый 25.03.2010, 19:00   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Новое поля для сортировки всегда добавляется в конец списка полей. Добавить в начало можно единственным способом - удалить все, создать заново.

Т.е. порядок действий такой:

1. Сканируются все указанные поля сортировки (QueryBuildDataSource.sortFieldCount() + QueryBuildDataSource.sortField()). Этот список ID полей записывается в какое-то хранилище (например, контейнер) и из него исключается ID склада. ID склада добавляется первым в этот список

2. Очищаются все настроенные сортировки (QueryBuildDataSource.sortClear())

3. Заново настраиваются сортировки по списку, сохраненному в контейнере
За это сообщение автора поблагодарили: Zlojbarsuk (1).
Старый 26.03.2010, 13:54   #3  
Zlojbarsuk is offline
Zlojbarsuk
Участник
 
26 / 12 (1) ++
Регистрация: 08.08.2007
Владимир, а Вы не подскажете, возможно ли получить из QueryBuildDataSource помимо самого поля сортировки, ещё и направление сортировки?
Старый 26.03.2010, 14:10   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
С помощью свойства QueryBuildDataSource.SortDirection(FieldId _fieldId)
__________________
Axapta v.3.0 sp5 kr2
Старый 26.03.2010, 16:11   #5  
Zlojbarsuk is offline
Zlojbarsuk
Участник
 
26 / 12 (1) ++
Регистрация: 08.08.2007
Да вот я так и пытался сделать... но почему-то вываливается ошибка: "Номер поля сортировки .... не найдено" Хотя по этому номеру поля я затем сортирую...
Старый 26.03.2010, 16:36   #6  
Zlojbarsuk is offline
Zlojbarsuk
Участник
 
26 / 12 (1) ++
Регистрация: 08.08.2007
Вот так вот всё работает:
X++:
static void Job78(Args _args)
{
    QueryBuildDataSource    QBDS;
    Query                   Query = new Query();
    FieldId                 SortFieldId;
    int                        i;
    Container               Con;
    SortOrder               SortOrder;
    ;

    QBDS =  Query.addDataSource(tablenum(InventTable));

    QBDS.addSortField(fieldnum(InventTable,ItemId),SortOrder::Descending);
    QBDS.addSortField(fieldnum(InventTable,ItemGroupId));
    QBDS.addSortField(fieldnum(InventTable,ItemType));
    QBDS.addSortField(fieldnum(InventTable,ItemName));


    for (i=1; i <=QBDS.SortFieldCount(); i++)
    {
        SortFieldId = QBDS.SortField(i);
        SortOrder = QBDS.sortDirection(SortFieldId);
        Con = conins(Con,i,SortFieldId);
    }

    QBDS.sortClear();

}
А вот если я делаю так:
X++:
QBDS = TmpInventTransferAddLine_ds.queryRun().query().dataSourceNo(1);
, то возникает вышеуказанная ошибка
Старый 26.03.2010, 20:29   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Параметр для QBDS.SortDirection() - не идентификатор поля, а порядковый номер поля в списке полей для сортировки. Т.е. в данном случае надо так

X++:
for (i=1; i <=QBDS.SortFieldCount(); i++)
{
        SortFieldId = QBDS.SortField(i);
        SortOrder = QBDS.sortDirection(i);
        Con = conins(Con,i,SortFieldId);
}
Для InventTable в данном случае просто совпали идентификаторы полей и их порядковые номера.
Старый 27.03.2010, 00:18   #8  
Zlojbarsuk is offline
Zlojbarsuk
Участник
 
26 / 12 (1) ++
Регистрация: 08.08.2007
Хм... но в качестве параметра в методе sortDirection(), тип параметра fieldId, что меня и сбило с толку.
Владимир, спасибо большое за помощь!
Теги
query, сортировка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
jinx: Dynamics AX &ndash; Query-Ranges und Filtereinstellungen des Benutzers Blog bot DAX auf Deutsch 0 04.02.2010 00:05
palleagermark: Sample union query from AX 2009 Blog bot DAX Blogs 0 11.07.2008 20:05
Сортировка в Query!!! Zlojbarsuk DAX: Программирование 5 08.07.2008 19:02
Dynamics AX Geek: Using query() Blog bot DAX Blogs 0 28.10.2006 16:40
Программная сортировка в отчёте AxDude DAX: Программирование 3 18.11.2005 09:27
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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