![]() |
#1 |
Участник
|
while select ... group by dimension[i]
Подскажите, как реализовать такой код? Если вводить просто цифру - все нормально. Если вводишь переменную типа int - ошибка. Нужно сделать селект по сгруппированным значениям в каждом виде аналитик.
Через поиск нашла кучу тем про аналитики, но к моей проблеме ничего близкого (ИМХО) ![]()
__________________
MBS-Axapta 3.0 CIS SP3 |
|
![]() |
#2 |
Участник
|
навскидку - использовать QueryRun
|
|
![]() |
#3 |
Участник
|
То же на вскидку
![]() А может указывать не int а EDT?
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
![]() |
#4 |
Участник
|
Например писать dimension(SysDimension::...)
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
![]() |
#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). |
![]() |
#6 |
Участник
|
Так тоже не работает. Надо использовать QueryRun + fieldId2ext как описал Dron AKA andy.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
![]() |
#7 |
Участник
|
Да, прошу прощения, написал не проверив..
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
![]() |
#8 |
Участник
|
Объясните почему всегда i = 2?
__________________
MBS-Axapta 3.0 CIS SP3 |
|
![]() |
#9 |
Участник
|
Dron AKA andy, спасибо, работает
![]()
__________________
MBS-Axapta 3.0 CIS SP3 |
|
![]() |
#10 |
Участник
|
Tiruvileijadal'
Ну и выдумала имя себе ![]() Итак, вы делаете распространенную ошибку, предполагая, что while select - это обычный себе цикл, в котором вы что-то можете менять. Это не так! while select - это ОДИН запрос, который возвращает набор записей. Но запрос выполняется лишь единажды (отсылается на сервер). Видимо в первый раз значение вашей переменной == 2. Но потом, пытаясь изменять ее в цикле, вы не получите "ожидаемого" результата. Потому как запрос уже исполнился. Я правильно выразил вашу ошибку? |
|
![]() |
#11 |
Участник
|
Нет, Иван
![]() ![]() ![]() У меня i меняется в цикле for в другом методе, и в этом цикле уже вызывается метод с обработкой запроса. И все здорово работает, кроме одной вещи: я не могу вытащить Description ;( select description from dim where dim.num == mytable.dimension[i] && dim.DimensionCode == i; Не работает ![]()
__________________
MBS-Axapta 3.0 CIS SP3 |
|
![]() |
#12 |
Участник
|
часть выделена сюда Имя Tiruvileijadal'
|
|
![]() |
#13 |
Участник
|
Цитата:
Сообщение от Tiruvileijadal'
![]() Нет, Иван
![]() ![]() ![]() У меня 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). |
![]() |
#14 |
Участник
|
Ура!!! Заработало!!! Знаете, Peter Savintsev, я и сама до этого дошла (но Вам спасибо за образный тычок в лоб), но у нас к таблице Dimensions был написан другими программистами метод как раз для поиска описания. И вот, когда я в этот метод вставляла эти данные - ну нифига!!! А вот сделала простым селектом (это как раз тычок в лоб) - ВСЕ ЗДОРОВО!!! Туплю...
__________________
MBS-Axapta 3.0 CIS SP3 |
|
![]() |
#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. Причина: орфография |
|
![]() |
#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. Ренжи так же. ЗЫ.Только код получится страшный ![]()
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
![]() |
#17 |
Участник
|
Используйте рекурсивный метод, который будет строить запрос с помощью Query и выполнять его с помощью QueryRun. Тогда код будет не очень страшным.
|
|
![]() |
#18 |
Участник
|
Цитата:
Нда, поспешил. Не подумал ![]()
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
![]() |
#19 |
Участник
|
Я, конечно же, попрошу мёд да ещё и ложкой... А примерно как это может выглядеть не подскажете? Вообще ничего в голову не приходит
![]()
__________________
MBS-Axapta 3.0 CIS SP3 |
|
![]() |
#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 |
|