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

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

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

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

в данном случае не нужен.
а зачем тогда советовали??
Старый 08.06.2006, 13:28   #42  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Покажите ваш ужасный запрос (если конечно это не секрет). А мы посмотрим, что там не так или так
Старый 08.06.2006, 13:36   #43  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
надо группировать InventDim по складу - это уже есть. А вот как вы собираетесь одновременно группировать по складу и читать зругие поля???

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

это нужно былобы если бы InventSum был не 1 таблицей в запросе
Старый 08.06.2006, 13:45   #44  
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, 13:48   #45  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от belugin
надо группировать InventDim по складу - это уже есть. А вот как вы собираетесь одновременно группировать по складу и читать зругие поля???
qr = new QueryRun(q);
qr.init();
i=3;
while (qr.next())
{
rec=qr.get(tablenum(Inventsum));
qty = rec.PostedQty + rec.Received + rec.Registered - rec.Deducted - rec.Picked;
kolvo = rec.PostedValue;
TB.appendText(InventTable::find(rec.ItemId).ItemName+'\t'+InventDim::find(rec.InventDimId).InventLocationId+'\t'+int2str(kolvo)+'\t'+int2str(qty));
TB.toClipboard();
TB.delete(1,strlen(tb.getText()));
Rng = sheet.range('A'+int2str(i));
Rng.pasteSpecial(1);
i++;
}

если е делать группировку в запросе по InventDimId, то вместо InventLocationId будет пустота!! а как только добавляем эту группировку - сразу имеем доступ к др. полям таблицы InventDim
Старый 08.06.2006, 13:51   #46  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
InventDim::find(rec.InventDimId).InventLocationId
-->
inventDim=qr.get(tablenum(InventDim);
inventDim.InventLocationID
Старый 08.06.2006, 14:01   #47  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от belugin
InventDim::find(rec.InventDimId).InventLocationId
-->
inventDim=qr.get(tablenum(InventDim);
inventDim.InventLocationID
согласен, результат будет аналогичным...
Старый 08.06.2006, 14:10   #48  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от Sada
Покажите ваш ужасный запрос (если конечно это не секрет). А мы посмотрим, что там не так или так
ну что довольны ??
Старый 08.06.2006, 14:11   #49  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Посмотрел...доволен
Старый 08.06.2006, 14:15   #50  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от Sada
Посмотрел...доволен
чем именно?? есть замечания и дополнения??
Старый 08.06.2006, 14:32   #51  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
уже разобрался спасибо... осталось выяснить вопрос с сортировкой...будет ли автоматическая сортировка по тем же полям, что выбраны в группировке
Старый 08.06.2006, 14:36   #52  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
да. посмотрите запросы которые посылаются на сервер
Старый 08.06.2006, 14:45   #53  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от belugin
да. посмотрите запросы которые посылаются на сервер
спасибо, но дело в том, что ВСЯ сортировка будет проводиться на основе Id-шников, что не всегда удобно для пользователя!! для конечного юзера читабельнее будет делать сортировку по наименованиям а не по Id-шникам, что есть 2 большие разницы!!

вопрос как придти к такой сортировке
Старый 08.06.2006, 15:31   #54  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от belugin
да. посмотрите запросы которые посылаются на сервер
кстати, все равно немного неправильно группирует/сортирует!!
В связи с тем что группировка/СОРТИРОВКА по ItemID всегда идет первая, то в результате запроса неполучается добиться например той же группировки по складам, в которых будет группировка по номенклатуре!!

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

Я, когда нужна была сортировка по аналитиками складским прежде, чем по номенклатуре, менял порядок добавления запросов - то есть ставил первым InventDim, а потом уже другие.
Когда нужно сортировать было по наименованию номенклатуры, первым делал InventTable

Потом мы от этого отказались
Добавили только наименование - и я имею в виду - именно добавили - в InventSum
И пользователи довольны, и реляционные формы не очень много нарушили Вообще, много, но это уже менее важно.
Старый 08.06.2006, 17:19   #56  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вот, посмотрите еще след. пост:
Сортировка в запросе "В Наличии"
Старый 08.06.2006, 18:30   #57  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от kashperuk
Добавили только наименование - и я имею в виду - именно добавили - в InventSum
И пользователи довольны, и реляционные формы не очень много нарушили Вообще, много, но это уже менее важно.
То есть?? не понял что Вы имеете ввиду под этими словами??
Старый 08.06.2006, 18:32   #58  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от kashperuk
Вот, посмотрите еще след. пост:
Сортировка в запросе "В Наличии"
А что касается этого обсуждения, то что мешает загнать результаты запроса во временную таблицу и там уже сортировать как душе угодно.??
Старый 08.06.2006, 20:55   #59  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Thumbs down
Цитата:
Сообщение от sparur
То есть?? не понял что Вы имеете ввиду под этими словами??
В смысле добавили поле ItemName в InventSum и синхронизируем когда надо.
Старый 09.06.2006, 07:13   #60  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от kashperuk
В смысле добавили поле ItemName в InventSum и синхронизируем когда надо.
Вон оно че... не такие кардинальные меры пока не будем внедрять придется использовать временную таблицу... и уже в ней сортировать
 

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