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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.02.2010, 10:26   #1  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Помогите при запросе ...
Здраствуйте ,

Есть стандартная аналитика и станд. query в рапорте : InventDim -> InventSum -> InventTable ... Дело в том что хочу немножко поправить запрос , но неполучаеться .
Мое желание :
PHP код:
      while select inventSum index hint LocateItemIdx where
      inventSum
.InventLocationId == cInvLoc
      exists join firstonly invTrn index hint ItemIdx where
      invTrn
.ItemId       == inventSum.ItemId      &&
      
invTrn.inventDimId  == inventSum.InventDimId &&
      
invTrn.DatePhysical >= dBgn 
Я пробывал вот так ...
PHP код:
   qr = new QueryRunelement.query() );
   
qbds1 qr.query().dataSourceName"InventSum" ).addDataSourcetableNumInventTrans ) );
   
qbds1.fetchModejoinMode::ExistsJoin );
   
// qbds1.relations( false );
   
qbds1.firstOnlytrue );
   
qbds1.sortIndexindexnumInventTransItemIdx ) );
   
qbds1.addLinkfieldnumInventSumItemId ), fieldnumInventTransItemId ) );
   
qbds1.addLinkfieldnumInventSumInventDimId ), fieldnumInventTransInventDimId ) );
   
qbds1.addRangefieldnumInventTransDatePhysical ) ).value'invTrn.DatePhysical >= dBgn' ); 
Но пока выбрасывает ошибку , что какая то 4 стрелка неправильна ... :-( . Что я здесь плохо делаю ?

Спасибо заранее ! С уважением , Римантас
Старый 25.02.2010, 10:38   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Вы знакомы с http://www.axaptapedia.com/index.php...ultiple_tables?

Хотя, сейчас присмотрелся к запросу. Расширенный синтаксис там вообще не нужен. Вам же просто нужно коректно записать условие '>=' http://axapta.mazzy.ru/lib/search/

Последний раз редактировалось S.Kuskov; 25.02.2010 в 11:05.
Старый 25.02.2010, 11:33   #3  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
А таблицы слинкованы правильно?
В смысле без наложения условия по DatePhysical запрос работает?
X++:
   qr = new QueryRun( element.query() );
   qbds1 = qr.query().dataSourceName( "InventSum" ).addDataSource( tableNum( InventTrans ) );
   qbds1.fetchMode( joinMode::ExistsJoin );
   // qbds1.relations( false );
   qbds1.firstOnly( true );
   qbds1.sortIndex( indexnum( InventTrans, ItemIdx ) );
   qbds1.addLink( fieldnum( InventSum, ItemId ), fieldnum( InventTrans, ItemId ) );
   qbds1.addLink( fieldnum( InventSum, InventDimId ), fieldnum( InventTrans, InventDimId ) );
//   qbds1.addRange( fieldnum( InventTrans, DatePhysical ) ).value( 'invTrn.DatePhysical >= dBgn' );
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 25.02.2010, 11:51   #4  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
меня смущает вот эта строка:
X++:
qbds1.addRange( fieldnum( InventTrans, DatePhysical ) ).value( 'invTrn.DatePhysical >= dBgn' );
получается в value вы сравниваете дату со строковым значением dBgn... , более того, условие по умолчанию так не пишется вроде.
может там должно быть что то типа
X++:
qbds1.addRange( fieldnum( InventTrans, DatePhysical ) ).value(strFmt('%1..', dBgn ));
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 25.02.2010, 11:56   #5  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
ещё немного подумал, и решил что совсем красиво будет так:
X++:
qbds1.addRange( fieldnum( InventTrans, DatePhysical ) ).value(SysQuery::range(dBgn, dateMax()));
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 25.02.2010, 15:30   #6  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от lev Посмотреть сообщение
ещё немного подумал, и решил что совсем красиво будет так:
X++:
qbds1.addRange( fieldnum( InventTrans, DatePhysical ) ).value(SysQuery::range(dBgn, dateMax()));
Спасибо за советы . Попробывал такое собрать :

PHP код:
element.query();
qr = new QueryRun);

qbds1 query.dataSourceTabletableNumInventSum ) );
qrn4  qbds1.addRangefieldNuminventSumInventLocationId ) );
qrn4.valuecInvLoc );

qbds2 query.addDataSourcetableNumInventTrans ), "InventTrans" );
qbds2.joinModeJoinMode::ExistsJoin );
qbds2.firstOnlytrue );

qrn1 qbds2.addRangefieldNumInventTransItemId ) );
qrn1.valuestrFmt'inventTrans.ItemId == inventSum.ItemId' ) );

qrn2 qbds2.addRangefieldNumInventTransInventDimId ) );
qrn2.valuestrFmt'inventTrans.InventDimId == inventSum.InventDimId' ) );

qrn3 qbds2.addRangefieldNumInventTransDatePhysical ) );
qrn3.valueSysQuery::rangedBgndateMax() ) ); 
Ето возвращяет такие селекты :

SELECT * FROM InventSum WHERE InventDim.inventDimId = InventSum.InventDimId AND ((ItemId = 1062A)) AND ((InventLocationId = LS nukain.50)) JOIN * FROM InventTable WHERE InventSum.ItemId = InventTable.ItemId

SELECT FIRSTONLY * FROM InventTrans WHERE ((ItemId = inventTrans.ItemId == inventSum.ItemId)) AND ((inventDimId = inventTrans.InventDimId == inventSum.InventDimId)) AND ((DatePhysical>=2010.01.01 AND DatePhysical<=2153.12.31))

Но - while ( qr.next() ) - пустой ... А по простому селекту ( в первом сообщении while select ... ) - все работает ... Чего ещё нехватает ?
Старый 25.02.2010, 15:48   #7  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
просто немного не правильный ситаксис.
во первых QueryRun надо инициализировать после того как собрали Query...
предполагаю что Ваш запрос должен выглядеть так (это пример):
X++:
Query                   query;
    QueryBuildDataSource    qbdsInventSum, qbdsInventTrans;
    QueryBuildRange         qbr;
    QueryRun                qr;
    InventLocationId        cInvLoc;
    TransDate               dBgn;
    ;

    query = element.Query();

    qbdsInventSum = query.dataSourceTable(tableNum(InventSum));
    qbr = qbdsInventSum.addRange(fieldNum(InventSum, InventLocationId));
    qbr.value(QueryValue(cInvLoc));

    qbdsInventTrans = qbdsInventSum.addDataSource(tableNum(InventTrans));
    qbdsInventTrans.addLink(fieldNum(InventSum, ItemId), fieldNum(InventTrans, ItemId));
    qbdsInventTrans.addLink(fieldNum(InventSum, InventDimId), fieldNum(InventTrans, InventDimId));
    qbdsInventTrans.joinMode(JoinMode::ExistsJoin);
    qbdsInventTrans.firstOnly(true);

    qbr = qbdsInventTrans.addRange(fieldNum(InventTrans, DatePhysical));
    qbr.value(SysQuery::range(dBgn, dateMax()));

    qr = new QueryRun(query);
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 25.02.2010, 16:35   #8  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от lev Посмотреть сообщение
просто немного не правильный ситаксис.
во первых QueryRun надо инициализировать после того как собрали Query...
предполагаю что Ваш запрос должен выглядеть так (это пример):
X++:
Query                   query;
    query = element.Query();

    qbdsInventSum = query.dataSourceTable(tableNum(InventSum));
    qbr = qbdsInventSum.addRange(fieldNum(InventSum, InventLocationId));
    qbr.value(QueryValue(cInvLoc));

    qbdsInventTrans = qbdsInventSum.addDataSource(tableNum(InventTrans));
    qbdsInventTrans.addLink(fieldNum(InventSum, ItemId), fieldNum(InventTrans, ItemId));
    qbdsInventTrans.addLink(fieldNum(InventSum, InventDimId), fieldNum(InventTrans, InventDimId));
    qbdsInventTrans.joinMode(JoinMode::ExistsJoin);
    qbdsInventTrans.firstOnly(true);

    qbr = qbdsInventTrans.addRange(fieldNum(InventTrans, DatePhysical));
    qbr.value(SysQuery::range(dBgn, dateMax()));
    qr = new QueryRun(query);
Спасибо за помочь . Скопировал , обработал - но всё таки ещё пусто ... Но направление как и ясно , буду искать дальше ...

С уважением , Римантас
Старый 25.02.2010, 16:45   #9  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от lev Посмотреть сообщение
просто немного не правильный ситаксис.
во первых QueryRun надо инициализировать после того как собрали Query...
предполагаю что Ваш запрос должен выглядеть так (это пример):
X++:
Query                   query;
    QueryBuildDataSource    qbdsInventSum, qbdsInventTrans;
    QueryBuildRange         qbr;
    QueryRun                qr;
    InventLocationId        cInvLoc;
    TransDate               dBgn;
    ;

    query = element.Query();

    qbdsInventSum = query.dataSourceTable(tableNum(InventSum));
    qbr = qbdsInventSum.addRange(fieldNum(InventSum, InventLocationId));
    qbr.value(QueryValue(cInvLoc));

    qbdsInventTrans = qbdsInventSum.addDataSource(tableNum(InventTrans));
    qbdsInventTrans.addLink(fieldNum(InventSum, ItemId), fieldNum(InventTrans, ItemId));
    qbdsInventTrans.addLink(fieldNum(InventSum, InventDimId), fieldNum(InventTrans, InventDimId));
    qbdsInventTrans.joinMode(JoinMode::ExistsJoin);
    qbdsInventTrans.firstOnly(true);

    qbr = qbdsInventTrans.addRange(fieldNum(InventTrans, DatePhysical));
    qbr.value(SysQuery::range(dBgn, dateMax()));

    qr = new QueryRun(query);
Лев , БОЛЬШОЕ СПАСИБО ! Всё работает . Просто я забыл поставит после next :
InventSum = qr.get( tableNum( InventSum ) ); ... :-)
Старый 25.02.2010, 16:57   #10  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
бывает
на здоровье
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Теги
query, range

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Перебор N критериев в SQL запросе berlioz DAX: Программирование 6 22.08.2007 11:33
Условие в запросе по отбору чисел cherv DAX: Программирование 6 05.07.2006 14:11
Помогите поймать глюк :) db DAX: Программирование 3 02.03.2005 16:09
Ввод начислений (RPaySumEmpl) - помогите оптимизировать расчет итогов z_av DAX: Программирование 3 22.02.2005 15:15
Сортировка в запросе "В Наличии" linney DAX: Программирование 16 20.01.2005 20:01

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

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

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