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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.02.2007, 11:17   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
следуя за российским кодом вы плохому учитесь.
Т.е. вместо того, чтобы делать по аналогии, скажем, с RLedgerSheetEngine_Turnover*, надо делать два идентичных класса и два идентичных Query на поставщиков/покупателей?.. Зачем же тогда те же Map'ы для таблиц придумали?.. Или учиться плохому - это именно использовать подстановки кодов полей, а использовать Map'ы - это нормально (видел кучу классов в SYS-слое, которые так делают)? Или же надо делать два идентичных Query и один класс, который выбирает их в зависимости от ситуации и обрабатывает через Map'ы CustVend*?..
Мне просто интересно: как обычно поступают в случае обработки данных по покупателям/поставщикам: ограничиваются только использованием Map CustVend*, а Query строят отдельно в AOT, или же позволяют себе параметрическое задание таблиц/полей для программно создаваемого Query вместо жесткого прописывания их в коде?
Цитата:
Я же написал:
Цитата:
В Query вы прицепили две таблицы к одной ведущей. Порядок обхода будет другим. См. Руководство разработчика. Раздел по ключевому слову "Sequencing of retrieved records".
Посмотрим, что написано в руководстве:
PHP код:
??????????????
?
DataSource A?
??????????????
      ?  ??????????????
      ????
DataSource B?
      ?  ??????????????
      ?  ??????????????
      ????
DataSource C?
         ??????????????
In an inner jointhe records to be fetched in following sequence:
A1B1C1A2B2C3..... AnBnCn
In an exist join
the records to be fetched in following sequence:
A1A2A3A4..... An 
Из этого можно сделать вывод, что в моем случае, поскольку GatewayOrg* цепляется к VendTrans через NonExistsJoin, то записи VendTable и ExtCodeValueTable вообще не будут выбраны...
Впрочем, это натолкнуло на кое-какие мысли, в результате чего запрос-таки заработал, как надо Я просто прицепил GatewayOrgRef не к VendTrans, а к VendTable:
PHP код:
VendTrans
?ij?VendTable
    
?ij??ExtCodeValueTable
    
?nej?GatewayOrgRef
         
?ij?GatewayOrganization 
X++:
static void testJoins(Args _args)
{
    VendTrans               vt;
    VendTable               vtbl;
    ExtCodeValueTable       extcvt;
    QueryRun                qr;
    Query                   query = new Query();
    QueryBuildDataSource    qbds, qbdsT;
    ExtCodeId   extCodeId;
    ;
    extCodeId = (select firstonly ExtCodeId from ExtCodeTable
               where ExtCodeTable.ExtCodeTableId == tablenum(VendTable)).extcodeId;
    info(strfmt(@"For table '%1' ExtCodeId = '%2'", tablestr(VendTable), extCodeId));
    qbds = query.addDataSource(tablenum(VendTrans));
    qbds.addSortField(fieldnum(VendTrans, AccountNum));
    qbds.addSortField(fieldnum(VendTrans, TransDate));
    qbdsT = qbds.addDataSource(tablenum(VendTable));
    qbdsT.fetchMode(QueryFetchMode::One2One);
    qbdsT.relations(false);
    qbdsT.addLink(fieldnum(VendTrans, AccountNum),     
                  fieldnum(VendTable, AccountNum));
    qbds = qbdsT.addDataSource(tablenum(ExtCodeValueTable));
    qbds.fetchMode(QueryFetchMode::One2One);
    qbds.addLink(fieldnum(VendTable, RecId),           
                 fieldnum(ExtCodeValueTable, ExtCodeRelationRecId));
    qbds.addRange(fieldnum(ExtCodeValueTable, ExtCodeRelationTableId)).value(queryValue(tablenum(VendTable)));
    qbds.addRange(fieldnum(ExtCodeValueTable, ExtCodeId)).value(extCodeId);
    // filter out intercompany contragents
    qbds = qbdsT.addDataSource(tablenum(GatewayOrgRef));
    qbds.joinMode(JoinMode::NoExistsJoin);
    qbds.fetchMode(QueryFetchMode::One2One);
    qbds.addLink(fieldnum(VendTrans, AccountNum),      
                 fieldnum(GatewayOrgRef, RefId));
    qbds.addRange(fieldnum(GatewayOrgRef, RefType)).value(queryValue(SysActionRefTypes::Vend));
    qbds = qbds.addDataSource(tablenum(GatewayOrganization));
    qbds.fetchMode(QueryFetchMode::One2One);
    qbds.addLink(fieldnum(GatewayOrgRef, GatewayOrgId),
                 fieldnum(GatewayOrganization, GatewayOrgId));
    qbds.addRange(fieldnum(GatewayOrganization, InterCompanyOrg)).value(queryValue(NoYes::Yes));
    qbds.addRange(fieldnum(GatewayOrganization, Active)).value(queryValue(NoYes::Yes));

    qr = new QueryRun(query);
    while(qr.next())
    {
        vt      = qr.get(tablenum(VendTrans));
        vtbl    = qr.get(tablenum(VendTable));
        extcvt  = qr.get(tablenum(ExtCodeValueTable));
        info(strfmt(@"%1 %2 name='%3', extCode='%4' %5", vt.TransDate, vt.AccountNum, vtbl.Name,
                    extcvt.ExtCodeValue, (vt.Invoice ? vt.Invoice : vt.Txt)));
    }
}

Последний раз редактировалось gl00mie; 13.02.2007 в 11:20. Причина: typo
Теги
ax3.0, шаблон

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Двойной Outer Join в Query LTA DAX: Программирование 2 21.01.2020 09:28
Как сдлеать join по одной таблице, а курсор по другой cerbo DAX: Программирование 9 03.10.2008 09:29
Join в Query konopello DAX: Программирование 2 19.04.2007 13:52
Вопрос по query и join tischenko DAX: Программирование 2 20.07.2005 13:05
Join трех таблиц (две к одной) ATimTim DAX: Программирование 25 03.02.2005 11:31

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

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

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