AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.06.2006, 13:50   #1  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
To sparur
Ответ на Ваш изначальный вопрос.

Я для группировки данных использую класс RHolderData и его наследников. Для примера можно использовать любую из ОСВ, разработынные локализаторами.
Старый 05.06.2006, 16:32   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Плюс необходимая вам сортировка по складу, т.д. появится автоматически при группировке по этим полям на inventDim (правда, если до этого нет группировки по ItemId)
Старый 06.06.2006, 11:54   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Все дело в fetchMode

Попробуйте вот так

static void Job1(Args _args)
{
Query q;
QueryBuildDataSource qbdsISum;
QueryBuildDataSource qbdsITable;
QueryBuildDataSource qbdsIDim;

;
q = new Query();
qbdsISum = q.addDataSource(tableNum(InventSum));
qbdsITable = qbdsISum.addDataSource(tableNum(InventTable));
qbdsITable.fetchMode(QueryFetchMode::One2One);
qbdsITable.relations(true);
qbdsIDim = qbdsISum.addDataSource(tableNum(InventDim));
qbdsIDim.fetchMode(QueryFetchMode::One2One);
qbdsIDim.relations(true);


box::info(q.dataSourceNo(1).toString());
}
За это сообщение автора поблагодарили: sparur (1).
Старый 06.06.2006, 11:58   #4  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от kashperuk
Все дело в fetchMode

Попробуйте вот так

static void Job1(Args _args)
{
Query q;
QueryBuildDataSource qbdsISum;
QueryBuildDataSource qbdsITable;
QueryBuildDataSource qbdsIDim;

;
q = new Query();
qbdsISum = q.addDataSource(tableNum(InventSum));
qbdsITable = qbdsISum.addDataSource(tableNum(InventTable));
qbdsITable.fetchMode(QueryFetchMode::One2One);
qbdsITable.relations(true);
qbdsIDim = qbdsISum.addDataSource(tableNum(InventDim));
qbdsIDim.fetchMode(QueryFetchMode::One2One);
qbdsIDim.relations(true);


box::info(q.dataSourceNo(1).toString());
}
хм, интересно, а где JOIN'ы, или я то-то не понимаю??
Старый 06.06.2006, 12:02   #5  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от kashperuk
Все дело в fetchMode

Попробуйте вот так

static void Job1(Args _args)
{
Query q;
QueryBuildDataSource qbdsISum;
QueryBuildDataSource qbdsITable;
QueryBuildDataSource qbdsIDim;

;
q = new Query();
qbdsISum = q.addDataSource(tableNum(InventSum));
qbdsITable = qbdsISum.addDataSource(tableNum(InventTable));
qbdsITable.fetchMode(QueryFetchMode::One2One);
qbdsITable.relations(true);
qbdsIDim = qbdsISum.addDataSource(tableNum(InventDim));
qbdsIDim.fetchMode(QueryFetchMode::One2One);
qbdsIDim.relations(true);


box::info(q.dataSourceNo(1).toString());
}
хм, по структуре вроде оно самое, осталось добавить ограничения, группировку и сортировки
Старый 06.06.2006, 11:59   #6  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
qbdsITable.fetchMode(QueryFetchMode::One2One);
Это и есть чтото типа JOIN'ов.
Попробуйте - может получится.
Старый 06.06.2006, 12:03   #7  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от Sada
qbdsITable.fetchMode(QueryFetchMode::One2One);
Это и есть чтото типа JOIN'ов.
Попробуйте - может получится.
очень даже похоже на правду , спасибо братьям из далекой Украины!!
Старый 06.06.2006, 12:10   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Напоминаем про зеленые квадратики по аватарой (не сочтите за флуд )
Старый 06.06.2006, 12:20   #9  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от Sada
Напоминаем про зеленые квадратики по аватарой (не сочтите за флуд )
точно, ща добавлю респект для Ивана
Старый 06.06.2006, 15:43   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Thumbs up
Ну, вообще, fetchMode - это не join - это то, как таблицы будут соединяться. Один ко многим или один к одному.

А вот само соединение происходит при указании relations(true) - при этом условие соединения подтягивается из сведений о таблицах и их полях. См. узел relations на таблицах и таблицы, указанные на EDT. (Типа ItemId ссылается на inventTable)
Это аналогично написанию addLink() по этим полям.
Старый 08.06.2006, 12:18   #11  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
теперь, однако, встала проблема с группировкой и сортировкой данных в запросе... код мой громоздкий поэтому приводить не буду, скажу лишь следующее:

допустим надо мне сгруппировать по складу, в результате выполнения моего кода получается запрос вида:

SELECT SUM(PostedQty), SUM(Received), SUM(Deducted), SUM(Picked), SUM(Registered), SUM(PostedValue) FROM InventSum GROUP BY InventSum.ItemId ASC, InventSum.InventDimId ASC WHERE ((LastUpdDatePhysical<=08.06.2006)) JOIN * FROM InventTable WHERE InventSum.ItemId = InventTable.ItemId JOIN * FROM InventDim GROUP BY InventDim.InventLocationId ASC WHERE InventSum.InventDimId = InventDim.inventDimId

в результате которого у мну не получается никакой группировки...и тем более сортировки данных

подскажите в чем трабл...
Старый 08.06.2006, 12:27   #12  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
yне надо группировать по InventSum.InventDimId - лучше выберите maxOf(InventSum.RecID)
Старый 08.06.2006, 12:30   #13  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от belugin
yне надо группировать по InventSum.InventDimId - лучше выберите maxOf(InventSum.RecID)
а почему не надо то?? и что нам даст Selection по RecID ??
Старый 08.06.2006, 12:43   #14  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
после поправок с Вашей подсказки:
а именно добавления строки: qbdsISum.addSelectionField(fieldnum(InventSum,RecID),SelectionField::Max); и удаления группировки по InventDimID

получил запрос вида:

SELECT SUM(PostedQty), SUM(Received), SUM(Deducted), SUM(Picked), SUM(Registered), SUM(PostedValue) FROM InventSum GROUP BY InventSum.ItemId ASC WHERE ((LastUpdDatePhysical<=08.06.2006)) JOIN * FROM InventTable WHERE InventSum.ItemId = InventTable.ItemId AND ((ItemId = 10002000111)) JOIN * FROM InventDim GROUP BY InventDim.InventLocationId ASC WHERE InventSum.InventDimId = InventDim.inventDimId

не пойму почему в запросе не появилось поле с RecID
Старый 08.06.2006, 13:03   #15  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
>>>а почему не надо то

а зачем надо

>>> Selection по RecID

в данном случае не нужен.
Старый 08.06.2006, 13:09   #16  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от belugin
>>>а почему не надо то

а зачем надо
а как добираться до полей из таблицы InventDim ?? то есть если не делать эту группировку, то в полученной (в результате запроса строке) из Таблицы InventSum поля из таблицы InventDim будут пустые!!

Цитата:
Сообщение от belugin
>>> Selection по RecID

в данном случае не нужен.
а зачем тогда советовали??
Старый 08.06.2006, 13:28   #17  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Покажите ваш ужасный запрос (если конечно это не секрет). А мы посмотрим, что там не так или так
Старый 08.06.2006, 13:45   #18  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от Sada
Покажите ваш ужасный запрос (если конечно это не секрет). А мы посмотрим, что там не так или так
ну раз Вы так просите то получите:

q = new Query();
qbdsISum = q.addDataSource(tableNum(InventSum));
qbdsITable = qbdsISum.addDataSource(tableNum(InventTable));
qbdsITable.fetchMode(QueryFetchMode::One2One);
qbdsITable.relations(true);
qbdsIDim = qbdsISum.addDataSource(tableNum(InventDim));
qbdsIDim.fetchMode(QueryFetchMode::One2One);
qbdsIDim.relations(true);

//указываем поля, необходимые нам в результате запроса
qbdsISum.addSelectionField(fieldnum(InventSum,LastUpdDatePhysical),SelectionField::Max);
qbdsISum.addSelectionField(fieldnum(InventSum,InventDimId),SelectionField:database);
qbdsISum.addSelectionField(fieldnum(InventSum,ItemId),SelectionField:database);
qbdsISum.addSelectionField(fieldnum(InventSum,PostedQty),SelectionField::Sum);
qbdsISum.addSelectionField(fieldnum(InventSum,Received),SelectionField::Sum);
qbdsISum.addSelectionField(fieldnum(InventSum,Deducted),SelectionField::Sum);
qbdsISum.addSelectionField(fieldnum(InventSum,Picked),SelectionField::Sum);
qbdsISum.addSelectionField(fieldnum(InventSum,Registered),SelectionField::Sum);
qbdsISum.addSelectionField(fieldnum(InventSum,PostedValue),SelectionField::Sum);
//добавляем ограничение по таблице InventSum
qbdsISum.addRange(fieldnum(InventSum,LastUpdDatePhysical)).value(".."+Fdate.valueStr());
//добавляем ограничение по таблице InventTable
qbdsITable.addRange(fieldnum(InventTable,ItemId));
qbdsITable.addRange(fieldnum(InventTable,ItemGroupId));
//добавляем ограничение по таблице InventDim
qbdsIDim.addRange(fieldnum(Inventdim, InventLocationId));
qbdsIDim.addRange(fieldnum(Inventdim, InventMOLId));
qbdsIDim.addRange(fieldnum(Inventdim, InventBatchId));
//забиваем значение ограничений(фильтров)
if (TMC.valueStr()!="")
qbdsITable.FindRange(fieldnum(InventTable,ItemId)).value(TMC.valueStr());
if (GroupTMC.valueStr()!="")
qbdsITable.FindRange(fieldnum(InventTable,ItemGroupId)).value(GroupTMC.valueStr());
if (Sklad.valueStr()!="")
qbdsIDim.FindRange(fieldnum(InventDim,InventLocationId)).value(Sklad.valueStr());
if (MOL.valueStr()!="")
qbdsIDim.FindRange(fieldnum(InventDim,InventMOLId)).value(MOL.valueStr());
if (Batch.valueStr()!="")
qbdsIDim.FindRange(fieldnum(InventDim,InventBatchId)).value(Batch.valueStr());
qbdsISum.addSortField(fieldnum(InventSum,ItemId));
qbdsISum.orderMode(OrderMode::GroupBy);
//делаем группировку
for (i=LevelСount-1;i>=0;i--)
//for (i=0;i<LevelСount;i++)
{
level=SelList.getItem(i).data();
[tableid,fieldid]=conpeek(groupfields,level);
switch (tableid)
{
case tableNum(InventTable):
switch (fieldid)
{
case fieldNum(InventTable,ItemId):
qbdsITable.addSortField(fieldid);
qbdsITable.orderMode(OrderMode::GroupBy);
//qbdsITable.addSortIndex(indexnum(InventTable,ItemIdx));
break;
case fieldNum(InventTable,ItemGroupId):
qbdsITable.addSortField(fieldid);
qbdsITable.orderMode(OrderMode::GroupBy);
//qbdsITable.addSortIndex(indexnum(InventTable,GroupItemIdx));
break;
}
break;
case tablenum(InventDim) :
qbdsISum.addSortField(fieldNum(InventSum,InventDimId));
qbdsISum.orderMode(OrderMode::GroupBy);
switch (fieldId)
{
case fieldNum(InventDim,InventLocationId):
qbdsIDim.addSortField(fieldid);
qbdsIDim.orderMode(OrderMode::GroupBy);
//qbdsIDim.addSortIndex(indexnum(InventDim,LocationIdIdx));
break;
case fieldNum(InventDim,InventMOLId):
qbdsIDim.addSortField(fieldid);
qbdsIDim.orderMode(OrderMode::GroupBy);
//qbdsIDim.addSortIndex(indexnum(InventDim,InventMOLIdIdx));
break;
case fieldNum(InventDim,InventBatchId):
qbdsIDim.addSortField(fieldid);
qbdsIDim.orderMode(OrderMode::GroupBy);
//qbdsIDim.addSortIndex(indexnum(InventDim,BatchIdIdx));
break;
}
break;
}
}

здесь ситуация следующая: есть список (ListView) в котором хранятся поля, по которым надо группировать, в каждом элементе ListView в поле data хранится контейнер с идентификатором Таблицы и идентификатором поля. Собственно конструкции switch и обеспечивают вытягивание из data этого контейнера и точно определяют по каким полям и из каких таблиц надо делать группировки!!
вот такие пироги... смотрите
Старый 08.06.2006, 14:10   #19  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от Sada
Покажите ваш ужасный запрос (если конечно это не секрет). А мы посмотрим, что там не так или так
ну что довольны ??
Старый 08.06.2006, 13:36   #20  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
надо группировать InventDim по складу - это уже есть. А вот как вы собираетесь одновременно группировать по складу и читать зругие поля???

>>>а зачем тогда советовали??

это нужно былобы если бы InventSum был не 1 таблицей в запросе
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Excel, группировки: как программно изменить расположение итоговых данных? CDan DAX: Программирование 5 29.08.2008 18:14
Невозможно выполнить команду языка определения данных в () iHomer13 DAX: Программирование 8 18.07.2008 10:56
Источники данных в отчетах Valia DAX: Программирование 1 24.07.2003 05:10
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:27.