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 |
|