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