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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.06.2008, 17:25   #1  
radya is offline
radya
Участник
 
16 / 10 (1) +
Регистрация: 07.05.2007
Адрес: Москва
Отображение AOT_Query на форме часть 2
Уж не пинайте - обошел весь форум , ответа на свой вопрос не нашел. Задача - на форме (в Grid) отобразить отфильтрованную по определенному признаку номенклатуру с колонкой наличия на складе. Имею AOT_Query с группировкой на подчиненной таблице(InventSum, группировка по ItemId). В принципе , этот AOT_QUERY содержит весь необходимый набор данных. На Init DS пишу
X++:
q = new Query(querystr(MySuperAotQuery));
;
this.query(q);
На форме присутствуют 2 датасурса (InventSum,InventTable), колонки в Грид перетащил из датасурса. При запуске формы все записи пустые. Может нужно переопределить свойства DataSource и DataField на гриде ?
Не хотелось бы использовать дисплейные методы. Или это единственный вариант ?
Спасибо.
Старый 04.06.2008, 17:49   #2  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Нет, так просто кверю на форме не подменишь
Проще всего написать дисплей методы. В них, для вычисления колличества на складе можно использовать класс InventOnhand, который очень просто использутся. Ещё эти дисплей методы не мешало бы закэшировать, иначе скорее всего будет формочка тормозить
Старый 04.06.2008, 17:59   #3  
radya is offline
radya
Участник
 
16 / 10 (1) +
Регистрация: 07.05.2007
Адрес: Москва
Что все не так просто , я уже понял : ))
Уже несколько раз возвращаюсь к этой теме , до сих пор откладывал. Если существует рашение , хотелось бы его знать.
Старый 04.06.2008, 18:18   #4  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
1. Если на форме в качестве датасорса InventTable, то в методе init() датасорса пишете
X++:
InventTable_ds.query().datasourceTabe(tablenum(Inventtable)).addRange(fieldnum(InventTable, ItemId)).value(SysQuery::Value("нужные айтемы"))
- это фильтр по нужным ItemId
2. Дисплей методы пишите на таблице InventTable
X++:
inventOnhand    = InventOnhand::newParameters(
                                              this.ItemId,
                                              inventDim,
                                              inventdimParm);
Где inventDim, inventDimParm - аналитики, если нужны
Затем возвращаете нужное вам значение, например inventOnhand.availPhysical()

Есть ещё вариант: использования методов таблицы InventSum, если у вас получится её приджоинить. Но это если не хотите использовать класс + будет по-быстрее.
Старый 05.06.2008, 10:01   #5  
radya is offline
radya
Участник
 
16 / 10 (1) +
Регистрация: 07.05.2007
Адрес: Москва
DSPIC , спасибо за совет, но в нашей компании не разрешена модификация стандартных обьектов , в том числе и добавление дисплейных методов на InventTable без дополнительного утверждения. Именно поэтому я решил отказаться от них , о чем указал в своей шапке. Кроме того хотелось бы все таки прикрутить AOT_query к своей форме , так как этот вопрос все равно рано или поздно придется решать. Если query не содержит агрегатных полей , то все решается на ура, и проблем не возникает. Как добавить агрегатное поле на грид(из AOT_query) ?
Старый 05.06.2008, 15:59   #6  
radya is offline
radya
Участник
 
16 / 10 (1) +
Регистрация: 07.05.2007
Адрес: Москва
Вот здесь http://forum.mazzy.ru/index.php?show...90&#entry24890 нашел обсуждение как раз моего случая , но тот момент , который меня интересует более всего , затронут вскользь. У нас в компании Ах 3.0, и я не знаю как создать тот самый контрол , о котором упомянул Mazzy. Если кому то удалось создать на гриде агригирующую колонку из AOT_QUERY , поделитесь пожалуйста ...
Старый 05.06.2008, 16:26   #7  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Цитата:
Как добавить агрегатное поле на грид(из AOT_query) ?
Тренировался на запросе InventSum (InventSum->InventDim)
Создал форму с двумя ds InventSum и InventDim

В ините InventSum датасорса прописал следующее

X++:
public void init()
{
    Query query = new Query(queryStr(InventSum));
    ;

    query.dataSourceNo(1).addRange(fieldNum(InventSum, ItemId)).value('0_Frog');
    query.dataSourceNo(1).addSelectionField(fieldNum(InventSum, PostedQty), SelectionField::Sum);

    query.dataSourceNo(1).addSortField(fieldNum(InventSum, ItemId));
    query.dataSourceNo(1).orderMode(OrderMode::GroupBy);
    
    InventSum_ds.query(query);

    super();
}
Суммирование по полю PostedQty
Изображения
 
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
За это сообщение автора поблагодарили: radya (1).
Старый 05.06.2008, 17:33   #8  
radya is offline
radya
Участник
 
16 / 10 (1) +
Регистрация: 07.05.2007
Адрес: Москва
На всякий случай , может кому пригодится.. Не пытаться прикрутить AOT_query на форме. Лучше прописать все связи , группировки и фильтры на самой форме. Что я сделал : на ExecuteQuery родительского датасорса :
X++:
    Query query = new Query();
    QueryRun qr ;
    QueryBuildDataSource qbds1,qbds2;
    ;
    if (InventTable_ds.queryRun())
        query = InventTable_ds.queryRun().query();
    else
        query = InventTable_ds.query();
    qbds1 = query.dataSourceTable(tablenum(InventTable));
    if (Query.dataSourceCount() < 2)
        qbds1.addDynalink(fieldnum(InventTable,ItemId),InventSum,fieldnum(InventSum,ItemId));
    qbds2 = query.dataSourceTable(tablenum(InventSum));
    qbds1.addRange(fieldnum(InventTable,A_LineCode)).value("ACM");
    qbds2.addRange(fieldnum(InventSum,Closed)).value("0");
    qbds1.addSortField(fieldnum(InventTable,A_PartNumber));
    qbds1.addSortField(fieldnum(InventTable,NameAlias));
    qbds1.addSortField(fieldnum(InventTable,ItemId));
    qbds1.orderMode(orderMode::GroupBy);
    qbds2.addSelectionField(fieldnum(InventSum,AvailPhysical),SelectionField::Sum);
    qbds2.addSortField(fieldnum(InventSum,ItemId));
    qbds2.orderMode(orderMode::GroupBy);
    super();
Форма показывает наличие товара на складе с определенными параметрами (в моем случае A_LineCode = ACM на InventTable)
Повторюсь , это только для Ах 3.0, с четверкой надеюсь все проще.
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Использование семейства InventDimCtrl_Frm_* - 2 DS InventDim на одной форме Pavlo AKA Panok DAX: База знаний и проекты 5 22.12.2008 17:15
отображение значений query на форме fialka DAX: Программирование 13 31.07.2007 14:31
Название полей в форме запроса PavelSR DAX: Программирование 4 11.07.2007 17:19
Отличия в строках ReqPO, почему одна строка появляется в форме а другая нет (Master Planning, Planned Orders) rkorchagin DAX: Программирование 8 21.02.2007 16:27
Подскажите где настроивается отображение аналитики в печатной форме отгрузочной накла wb DAX: Функционал 7 15.07.2004 09:49

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

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

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