|
25.03.2010, 17:14 | #1 |
Участник
|
Сортировка в 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 |
Участник
|
Новое поля для сортировки всегда добавляется в конец списка полей. Добавить в начало можно единственным способом - удалить все, создать заново.
Т.е. порядок действий такой: 1. Сканируются все указанные поля сортировки (QueryBuildDataSource.sortFieldCount() + QueryBuildDataSource.sortField()). Этот список ID полей записывается в какое-то хранилище (например, контейнер) и из него исключается ID склада. ID склада добавляется первым в этот список 2. Очищаются все настроенные сортировки (QueryBuildDataSource.sortClear()) 3. Заново настраиваются сортировки по списку, сохраненному в контейнере |
|
|
За это сообщение автора поблагодарили: Zlojbarsuk (1). |
26.03.2010, 13:54 | #3 |
Участник
|
Владимир, а Вы не подскажете, возможно ли получить из QueryBuildDataSource помимо самого поля сортировки, ещё и направление сортировки?
|
|
26.03.2010, 14:10 | #4 |
Участник
|
С помощью свойства QueryBuildDataSource.SortDirection(FieldId _fieldId)
__________________
Axapta v.3.0 sp5 kr2 |
|
26.03.2010, 16:11 | #5 |
Участник
|
Да вот я так и пытался сделать... но почему-то вываливается ошибка: "Номер поля сортировки .... не найдено" Хотя по этому номеру поля я затем сортирую...
|
|
26.03.2010, 16:36 | #6 |
Участник
|
Вот так вот всё работает:
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 |
Участник
|
Параметр для QBDS.SortDirection() - не идентификатор поля, а порядковый номер поля в списке полей для сортировки. Т.е. в данном случае надо так
X++: for (i=1; i <=QBDS.SortFieldCount(); i++)
{
SortFieldId = QBDS.SortField(i);
SortOrder = QBDS.sortDirection(i);
Con = conins(Con,i,SortFieldId);
} |
|
27.03.2010, 00:18 | #8 |
Участник
|
Хм... но в качестве параметра в методе sortDirection(), тип параметра fieldId, что меня и сбило с толку.
Владимир, спасибо большое за помощь! |
|