|  28.11.2007, 10:41 | #1 | 
| Участник | while select ... group by dimension[i] 
			
			Подскажите, как реализовать такой код? Если вводить просто цифру - все нормально. Если вводишь переменную типа int - ошибка. Нужно сделать селект по сгруппированным значениям в каждом виде аналитик.  Через поиск нашла кучу тем про аналитики, но к моей проблеме ничего близкого (ИМХО)   
				__________________ MBS-Axapta 3.0 CIS SP3 | 
|  | 
|  28.11.2007, 11:25 | #2 | 
| Участник | 
			
			навскидку - использовать QueryRun
		 | 
|  | 
|  28.11.2007, 11:26 | #3 | 
| Участник | 
			
			То же на вскидку   А может указывать не int а EDT? 
				__________________ Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) | 
|  | 
|  28.11.2007, 11:29 | #4 | 
| Участник | 
			
			Например писать dimension(SysDimension::...)
		 
				__________________ Существует 10 типов людей: одни понимают двоичную систему, другие - нет. | 
|  | 
|  28.11.2007, 11:34 | #5 | 
| Moderator | 
			
			С QueryRun точно работает. Вот джоб: X++: static void Job10(Args _args) { InventTable inventTable; Query query = new Query(); QueryRun queryRun; QueryBuildDataSource qbds; int i = 2; ; qbds = query.addDataSource(tableNum(InventTable)); qbds.orderMode(OrderMode::GroupBy); qbds.addSortField(fieldId2ext(fieldNum(InventTable, Dimension), i)); qbds.addSelectionField(fieldNum(InventTable, RecId), SelectionField::Count); queryRun = new QueryRun(query); while (queryRun.next()) { inventTable = queryRun.getNo(1); info(strFmt("%1 %2", inventTable.Dimension[i], inventTable.RecId)); } } 
				__________________ Андрей. | 
|  | |
| За это сообщение автора поблагодарили: Gustav (10), Tiruvileijadal' (1). | |
|  28.11.2007, 11:38 | #6 | 
| Участник | 
			
			Так тоже не работает. Надо использовать QueryRun + fieldId2ext как описал Dron AKA andy.
		 
				__________________ AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 | 
|  | 
|  28.11.2007, 12:07 | #7 | 
| Участник | 
			
			Да, прошу прощения, написал не проверив..
		 
				__________________ Существует 10 типов людей: одни понимают двоичную систему, другие - нет. | 
|  | 
|  28.11.2007, 15:49 | #8 | 
| Участник | 
			
			Объясните почему всегда i = 2?
		 
				__________________ MBS-Axapta 3.0 CIS SP3 | 
|  | 
|  28.11.2007, 16:17 | #9 | 
| Участник | 
			
			Dron AKA andy, спасибо, работает    
				__________________ MBS-Axapta 3.0 CIS SP3 | 
|  | 
|  28.11.2007, 16:35 | #10 | 
| Участник | 
			
			Tiruvileijadal' Ну и выдумала имя себе  Итак, вы делаете распространенную ошибку, предполагая, что while select - это обычный себе цикл, в котором вы что-то можете менять. Это не так! while select - это ОДИН запрос, который возвращает набор записей. Но запрос выполняется лишь единажды (отсылается на сервер). Видимо в первый раз значение вашей переменной == 2. Но потом, пытаясь изменять ее в цикле, вы не получите "ожидаемого" результата. Потому как запрос уже исполнился. Я правильно выразил вашу ошибку? | 
|  | 
|  30.11.2007, 20:22 | #11 | 
| Участник | 
			
			Нет, Иван   Но это не от того, что вы неверно что-то объяснили, это от того, что я так неопределенно написала  Я спрашивала про i, который пишут в примерах-кодах на тему Dimension умные люди этого форума. Эта переменная всегда изначально = 2. Простите, это был риторический вопрос   У меня i меняется в цикле for в другом методе, и в этом цикле уже вызывается метод с обработкой запроса. И все здорово работает, кроме одной вещи: я не могу вытащить Description ;( select description from dim where dim.num == mytable.dimension[i] && dim.DimensionCode == i; Не работает  Не подскажите, почему? Сразу скажу - код написала по-памяти, поэтому если перепутала поля - это память подводит. 
				__________________ MBS-Axapta 3.0 CIS SP3 | 
|  | 
|  30.11.2007, 23:36 | #12 | 
| Участник | 
			
			часть выделена сюда Имя Tiruvileijadal'
		 | 
|  | 
|  03.12.2007, 09:56 | #13 | 
| Участник | Цитата: 
		
			Сообщение от Tiruvileijadal'
			   Нет, Иван   Но это не от того, что вы неверно что-то объяснили, это от того, что я так неопределенно написала  Я спрашивала про i, который пишут в примерах-кодах на тему Dimension умные люди этого форума. Эта переменная всегда изначально = 2. Простите, это был риторический вопрос   У меня i меняется в цикле for в другом методе, и в этом цикле уже вызывается метод с обработкой запроса. И все здорово работает, кроме одной вещи: я не могу вытащить Description ;( select description from dim where dim.num == mytable.dimension[i] && dim.DimensionCode == i; Не работает  Не подскажите, почему? Сразу скажу - код написала по-памяти, поэтому если перепутала поля - это память подводит. X++: select description from dim where dim.num == mytable.dimension[i] && dim.DimensionCode == i - 1; | 
|  | |
| За это сообщение автора поблагодарили: Tiruvileijadal' (1). | |
|  03.12.2007, 11:41 | #14 | 
| Участник | 
			
			Ура!!! Заработало!!! Знаете, Peter Savintsev, я и сама до этого дошла (но Вам спасибо за образный тычок в лоб), но у нас к таблице Dimensions был написан другими программистами метод как раз для поиска описания. И вот, когда я в этот метод вставляла эти данные - ну нифига!!! А вот сделала простым селектом (это как раз тычок в лоб) - ВСЕ ЗДОРОВО!!! Туплю...
		 
				__________________ MBS-Axapta 3.0 CIS SP3 | 
|  | 
|  04.12.2007, 12:08 | #15 | 
| Участник | 
			
			А сейчас такая проблема (может кто сталкивался): нужно сделать выборку типа MyTable t1, t2, t3, t4, ..., t14; while select t1 group by dim[x] { while select t2 group by dim[y] where t2.dim[x] == t1.dim[x] { while select t3 group by dim[z] where t3.dim[x] == t1.dim[x] && t3.dim[y] == t2.dim[y] { ... } } } сколько таких циклов заранее не известно (это зависит от того, возле скольких аналитик пользователь поставит галочки). У меня такое ощущение, что это невыполнимо. Пока никаких вариантов не вижу. 
				__________________ MBS-Axapta 3.0 CIS SP3 Последний раз редактировалось Tiruvileijadal'; 04.12.2007 в 12:09. Причина: орфография | 
|  | 
|  04.12.2007, 12:24 | #16 | 
| Участник | Цитата: 
		
			Сообщение от Tiruvileijadal'
			   А сейчас такая проблема (может кто сталкивался): нужно сделать выборку типа MyTable t1, t2, t3, t4, ..., t14; while select t1 group by dim[x] { while select t2 group by dim[y] where t2.dim[x] == t1.dim[x] { while select t3 group by dim[z] where t3.dim[x] == t1.dim[x] && t3.dim[y] == t2.dim[y] { ... } } } сколько таких циклов заранее не известно (это зависит от того, возле скольких аналитик пользователь поставит галочки). У меня такое ощущение, что это невыполнимо. Пока никаких вариантов не вижу. И в условия их. Выполняется условие генериться QueryBuildDataSource. Ренжи так же. ЗЫ.Только код получится страшный   
				__________________ Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) | 
|  | 
|  04.12.2007, 12:51 | #17 | 
| Участник | 
			
			Используйте рекурсивный метод, который будет строить запрос с помощью Query и выполнять его с помощью QueryRun. Тогда код будет не очень страшным.
		 | 
|  | 
|  04.12.2007, 13:16 | #18 | 
| Участник | Цитата: Нда, поспешил. Не подумал   
				__________________ Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) | 
|  | 
|  04.12.2007, 13:27 | #19 | 
| Участник | 
			
			Я, конечно же, попрошу мёд да ещё и ложкой... А примерно как это может выглядеть не подскажете? Вообще ничего в голову не приходит    
				__________________ MBS-Axapta 3.0 CIS SP3 | 
|  | 
|  04.12.2007, 13:47 | #20 | 
| Участник | 
			
			Возможно, как то так: X++: void method(QueryBuildDataSource _qbds, common _table, QueryBuildRange _qbr) { ; _qbds.addDataSource(_table); ... ... ... if (bla-bla-bla) { ... ... this.method(_qbds, Table, Range); } }  Там наверняка будет косяк с "_table", "TableNum" наверное не пройдет, но смысл таков  ЗЫ. Полезно! 
				__________________ Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) Последний раз редактировалось Silence; 04.12.2007 в 13:50. | 
|  | 
|  | 
|  Похожие темы | ||||
| Тема | Ответов | |||
| Разница NotInTTS и Found | 6 | |||
| Фильтр по пустому Dimension[x] в select | 3 | |||
| Вопрос про Demand Planner | 4 | |||
| select group by | 10 | |||
| group , но не by | 9 | |||
| 
 |