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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.09.2007, 12:51   #1  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
Расширение запроса на форме InventOnHand
Нам понадобилось ставить фильтр по свойствам номенклатуры на форму InventOnHand.
Нахожу, что в executequery вызывается метод для модификации запроса. переписываю executequery:
X++:
void executeQuery()
{
// > добавленный мной кусок  -->

QueryBuildDataSource BR;
Query q;
str s='';

QueryBuildRange findOrAddRange(int fNum){
 QueryBuildRange ret;
 ret=BR.findRange(fNum);
 if(!ret) ret=BR.addRange(fNum);
 return ret;
 }
// > добавленный мной кусок  <--

    ;
    element.inventDimSetupObject().modifyQuery(inventSum_DS,inventDim_DS);
// > добавленный мной кусок  -->

    q=InventSum_ds.query();
    BR=q.dataSourceNo(1).addDataSource(tablenum(InventTable));
    BR.relations(true);

    fItemGroupId     =findOrAddRange(fieldnum(InventTable,ItemGroupId));
    fModelGroupId    =findOrAddRange(fieldnum(InventTable,ModelGroupId));
    fDimGroupId      =findOrAddRange(fieldnum(InventTable,DimGroupId));
    fItemBuyerGroupId=findOrAddRange(fieldnum(InventTable,ItemBuyerGroupId));

    InventSum_ds.query(q); // пробовал     InventSum_ds.queryrun(new sysqueryrun(q)); - тот же эффект

info(inventsum_ds.query().dataSourceNo(1).toString());

    fItemGroupId.value(ItemGroupId.valueStr());
    fModelGroupId.value(ModelGroupId.valueStr());
    fDimGroupId.value(DimGroupId.valueStr());
    fItemBuyerGroupId.value(ItemBuyerGroupId.valueStr());



// > добавленный мной кусок  <--

    super();
здесь fXXXXXXXX наименования объявленых в ClassDeclaration QueryBuildRange's,
соответствующие XXXXXX - элементы управления для выбора значений фильтра.

фильтрации не происходит, и в info данного метода выводится запрос без прикрепленого InventTable.
Кто-нидь подскажет, что не так делаем?

Последний раз редактировалось gefr; 19.09.2007 в 13:03.
Старый 19.09.2007, 14:09   #2  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Как вариант, fetchMode ручками явно выставить. Мне как то помогло

Последний раз редактировалось Sada; 19.09.2007 в 14:13.
Старый 19.09.2007, 14:39   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
+1

Еще я бы попобдробнее на запрос посмотрел, кажись там группировки были, надо либо делать
Exists join и перемещать его в кнонец, либо группировать Как-то InventTable
Старый 19.09.2007, 15:25   #4  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
fetchmode не помогает. также в запрос просто не добавляется InventTable - и все тут
попробовал добавить InventTable на форму - вылетает ошибка при попытке выставить фильтр - недопустимый диапазон. при попытке выставить ordermode в groupby и добавить поля сортировки сразу на itemid вылетает с ошибкой - недопустимое полу для сортировки
Старый 19.09.2007, 15:41   #5  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
SELECT WITH SELECT_ORDER, NESTED_LOOP, FORCE_PLACEHOLDERS INDEXISHINT SUM(PostedQty), SUM(PostedValue), SUM(PhysicalValue), SUM(Deducted), SUM(Registered), SUM(Received), SUM(Picked), SUM(ReservPhysical), SUM(ReservOrdered), SUM(OnOrder), SUM(Ordered), SUM(Arrived), SUM(QuotationReceipt), SUM(QuotationIssue), SUM(PhysicalInvent), SUM(PostedValueSecCur_RU), SUM(PhysicalValueSecCur_RU), SUM(AvailPhysical), SUM(AvailOrdered) FROM InventSum GROUP BY InventSum.ItemId ASC USING INDEX ClosedItemDimIdx WHERE ((Closed = ???)) AND InventTable.ItemId=InventSum.ItemId AND InventTable.ItemId=InventSum.ItemId JOIN INDEXISHINT * FROM InventDim GROUP BY InventDim.InventLocationId ASC USING INDEX DimIdIdx WHERE InventSum.InventDimId = InventDim.inventDimId
Это запрос с таким кодом
X++:
 void executeQuery()
{
// > добавленный мной кусок  -->

QueryBuildDataSource BR;
Query q;
str s='';

QueryBuildRange findOrAddRange(int fNum){
 QueryBuildRange ret;
 ret=BR.findRange(fNum);
 if(!ret) ret=BR.addRange(fNum);
 return ret;
 }
// > добавленный мной кусок  <--

    ;
    element.inventDimSetupObject().modifyQuery(inventSum_DS,inventDim_DS);
// > добавленный мной кусок  -->

    q=InventSum_ds.query();
    BR=q.dataSourceNo(1).addDataSource(tablenum(InventTable));
    BR.relations(true);

    /*fItemGroupId     =findOrAddRange(fieldnum(InventTable,ItemGroupId));
    fModelGroupId    =findOrAddRange(fieldnum(InventTable,ModelGroupId));
    fDimGroupId      =findOrAddRange(fieldnum(InventTable,DimGroupId));
    fItemBuyerGroupId=findOrAddRange(fieldnum(InventTable,ItemBuyerGroupId));
    */
    InventSum_ds.query(q); // пробовал     InventSum_ds.queryrun(new sysqueryrun(q)); - тот же эффект

info(inventsum_ds.query().dataSourceNo(1).toString());

    /*fItemGroupId.value(ItemGroupId.valueStr());
    fModelGroupId.value(ModelGroupId.valueStr());
    fDimGroupId.value(DimGroupId.valueStr());
    fItemBuyerGroupId.value(ItemBuyerGroupId.valueStr());
    */


// > добавленный мной кусок  <--

    super();
    }
Как видно, InventTable в запросе есть
Старый 19.09.2007, 16:05   #6  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
спасибо за предложения. в конце концов срослось след. образом:
добавил датасорс InventTable на форму, непосредственно в методе
X++:
   element.inventDimSetupObject().modifyQuery(inventSum_DS,inventDim_DS,InventTable_DS);

void modifyQuery(
    FormDataSource inventSum_DS,
    FormDataSource inventDim_DS,
    FormDataSource InventTable_DS=null // georg, добавление фильтров
    ){
...
// georg, добавление фильтров --->
    QueryBuildDataSource    qBSItem;
    QueryBuildRange         fItemGroupId;
    QueryBuildRange         fModelGroupId;
    QueryBuildRange         fDimGroupId;
    QueryBuildRange         fItemBuyerGroupId;
// georg, добавление фильтров <---
...
// georg, добавление фильтров --->

   if(InventTable_DS){
    qBSItem=inventTable_DS.query().dataSourceName(inventTable_DS.name());
    qBSItem.sortClear();

    fItemGroupId=qBSItem.findRange(fieldnum(InventTable,ItemGroupId));
    if(!fItemGroupId)
     fItemGroupId=qBSItem.addRange(fieldnum(InventTable,ItemGroupId));

    fModelGroupId    =qBSItem.findRange(fieldnum(InventTable,ModelGroupId));
    if(!fModelGroupId)
     fModelGroupId=qBSItem.addRange(fieldnum(InventTable,ModelGroupId));

    fDimGroupId    =qBSItem.findRange(fieldnum(InventTable,DimGroupId));
    if(!fDimGroupId)
     fDimGroupId=qBSItem.addRange(fieldnum(InventTable,DimGroupId));

    fItemBuyerGroupId    =qBSItem.findRange(fieldnum(InventTable,ItemBuyerGroupId));
    if(!fItemBuyerGroupId)
     fItemBuyerGroupId=qBSItem.addRange(fieldnum(InventTable,ItemBuyerGroupId));
    }
// georg, добавление фильтров <---

}
добавил фильтры, а в форме просто подбирал фильтры посредством findrange:

X++:
void executeQuery()
{
    ;
    element.inventDimSetupObject().modifyQuery(inventSum_DS,inventDim_DS,

// > georg, 19-09-2007, фильтр,  -->
    InventTable_DS);


    fItemGroupId=InventTable_DS.query().dataSourceName(inventTable_DS.name()).findRange(fieldnum(InventTable,ItemGroupId));
    fModelGroupId    =InventTable_DS.query().dataSourceName(inventTable_DS.name()).findRange(fieldnum(InventTable,ModelGroupId));
    fDimGroupId    =InventTable_DS.query().dataSourceName(inventTable_DS.name()).findRange(fieldnum(InventTable,DimGroupId));
    fItemBuyerGroupId    =InventTable_DS.query().dataSourceName(inventTable_DS.name()).findRange(fieldnum(InventTable,ItemBuyerGroupId));


    fItemGroupId.value(ItemGroupId.valueStr());
    fModelGroupId.value(ModelGroupId.valueStr());
    fDimGroupId.value(DimGroupId.valueStr());
    fItemBuyerGroupId.value(ItemBuyerGroupId.valueStr());



// > georg, 19-09-2007, ,  <--

    super();
}
и уже с ними работаю. Так срослось. Правда, если бы про fetchMode не посоветовали, тот метод внимательно бы не вычитал. Так что - спасибо
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Использование семейства InventDimCtrl_Frm_* - 2 DS InventDim на одной форме Pavlo AKA Panok DAX: База знаний и проекты 5 22.12.2008 17:15
Название полей в форме запроса PavelSR DAX: Программирование 4 11.07.2007 17:19
Добавление источника к запросу на форме Lucky13 DAX: Программирование 1 21.05.2007 17:12
Пользовательские настройки: не отвязать таблицу в форме параметров запроса Gustav DAX: Функционал 6 23.06.2006 12:17
Значение пользовательского фильтра на форме vpa DAX: Программирование 7 27.10.2004 17:14

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

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

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