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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.06.2006, 13:26   #21  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Запутался...
Может во временную таблицу склад запихать?
Старый 05.06.2006, 13:42   #22  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от sparur
таблицу отсортировать по укзанным полям, то было бы замечательно и дальше ваш метод бы подошел, НО я не знаю такой стандартной функции!!
Можно поменять запрос пользователся добавив туда при помощи \System Documentation\Classes\QueryBuildDataSource\addSortField свою сортировку

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

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

Не понял, почему нельзя было сразу заджойнить InventTable к двум другим. это раз.
Второе - почему группировка по inventDimId - вы же получите совсем другую информацию. Хотя, конечно, если потом суммировать по временной таблице, может и сработает. Это 2.

Совет: Посмотрите, как работает запрос "В наличии" (InventOnHandItem - Управление запасами\запросы\в наличии) - там запрос уж до боли похож на тот, который вам нужно бы построить.
И макрос InventDimJoin - там идет связь с указанной таблицей (в вашем случае, InventSum) по номеру аналитики и фильтрация по складским аналитикам при указанных вами значениях - то есть то, что вам надо бы сделать.

И хорошо бы для пользоватлей привентить стандартную форму Выбора Аналитики, как в запросе в Наличии (InventDimParm форма, вроде бы)
Старый 05.06.2006, 16:32   #25  
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, 09:06   #26  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от kashperuk
Даа, код у вас мягко говоря, плохо будет работать.

Не понял, почему нельзя было сразу заджойнить InventTable к двум другим. это раз.
потому что Аксапта не дает сделать так!! при попытки заджойнить 2-ую таблицу к InventSum этот join тупо замещает предыдущий!! Получалось только сделать лесенку: InventSum->InventDim->InventTable а сделать связь вида : InventSum->InventDim и InventSum->InventTable никак не дает
Старый 06.06.2006, 11:54   #27  
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:56   #28  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от kashperuk
Даа, код у вас мягко говоря, плохо будет работать.
Кстати, не расстроюсь если предложите свой вариант запроса и последующего способа обработки полученных данных
Старый 06.06.2006, 11:58   #29  
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, 11:59   #30  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
qbdsITable.fetchMode(QueryFetchMode::One2One);
Это и есть чтото типа JOIN'ов.
Попробуйте - может получится.
Старый 06.06.2006, 12:02   #31  
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, 12:03   #32  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от Sada
qbdsITable.fetchMode(QueryFetchMode::One2One);
Это и есть чтото типа JOIN'ов.
Попробуйте - может получится.
очень даже похоже на правду , спасибо братьям из далекой Украины!!
Старый 06.06.2006, 12:10   #33  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Напоминаем про зеленые квадратики по аватарой (не сочтите за флуд )
Старый 06.06.2006, 12:20   #34  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от Sada
Напоминаем про зеленые квадратики по аватарой (не сочтите за флуд )
точно, ща добавлю респект для Ивана
Старый 06.06.2006, 15:43   #35  
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   #36  
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   #37  
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   #38  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от belugin
yне надо группировать по InventSum.InventDimId - лучше выберите maxOf(InventSum.RecID)
а почему не надо то?? и что нам даст Selection по RecID ??
Старый 08.06.2006, 12:43   #39  
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   #40  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
>>>а почему не надо то

а зачем надо

>>> Selection по RecID

в данном случае не нужен.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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, время: 18:18.