Axapta 查询对象未按预期工作?

Axapta 查询对象未按预期工作?,axapta,dynamics-ax-2009,x++,Axapta,Dynamics Ax 2009,X++,此代码应该能够在任何AX系统上运行(更改项目和仓库)。问题是有时不会返回CustInvoiceJour。奇怪的是,如果我用相同的关系做一个“selectcustinovicejour”,它会找到它吗?这怎么可能 static void Job59(Args _args) { CustInvoiceTrans custInvoiceTrans; CustInvoiceJour custInvoiceJour; InventTab

此代码应该能够在任何AX系统上运行(更改项目和仓库)。问题是有时不会返回CustInvoiceJour。奇怪的是,如果我用相同的关系做一个“selectcustinovicejour”,它会找到它吗?这怎么可能

static void Job59(Args _args)
{
    CustInvoiceTrans            custInvoiceTrans;
    CustInvoiceJour             custInvoiceJour;
    InventTable             inventTable;
    QueryBuildRange             rangeItem;
    Query                       query;
    QueryBuildDataSource        qbds1;
    QueryBuildDataSource        qbds2;
    QueryBuildDataSource        qbds3;
    QueryRun                    qr;
    ;

    query = new Query();
    qbds1 = query.addDataSource(tablenum(CustInvoiceTrans));
    qbds2 = qbds1.addDataSource(tablenum(CustInvoiceJour));
    qbds2.relations(true);

    qbds2.addRange(fieldnum(CustInvoiceJour, SalesType)).value('!' + enum2str(SalesType::ReturnItem));
    rangeItem = qbds1.addRange(fieldnum(CustInvoiceTrans, ItemId));
    qbds1.addRange(fieldnum(CustInvoiceTrans, InvoiceDate)).value(queryRange(@'8/1/2011', @'8/31/2011'));
    qbds2.orderMode(OrderMode::OrderBy);
    qbds2.addOrderByField(fieldnum(CustInvoiceJour, DlvCountryRegionId));
    qbds2.addOrderByField(fieldnum(CustInvoiceJour, DlvState));
    qbds3 = qbds1.addDataSource(tablenum(InventDim));
    qbds3.relations(true);
    qbds3.joinMode(JoinMode::ExistsJoin);
    qbds3.addRange(fieldnum(InventDim, InventLocationId)).value(SysQuery::value('FG'));


    select firstonly inventTable
        where inventTable.ItemId    == '44831';

    info (strfmt("%1", inventTable.ItemId));
    rangeItem.value(inventTable.ItemId);

    qr = new QueryRun(query);
    while (qr.next())
    {
        custInvoiceTrans    = qr.get(tablenum(CustInvoiceTrans));
        custInvoiceJour     = qr.get(tablenum(CustInvoiceJour));

        if (!custInvoiceJour)
        {
            info ("Not found");
            select firstonly custInvoiceJour
                where custInvoiceJour.SalesId               == custInvoiceTrans.SalesId     &&
                      custInvoiceJour.InvoiceId             == custInvoiceTrans.InvoiceId   &&
                      custInvoiceJour.InvoiceDate           == custInvoiceTrans.InvoiceDate &&
                      custInvoiceJour.numberSequenceGroup   == custInvoiceTrans.numberSequenceGroup;
            if (custInvoiceJour)
                info("Found it");
        }
    }
}
调试器将这些显示为查询:

NAME:
    qbds1
VALUE:
    SELECT * FROM CustInvoiceTrans ORDER BY CustInvoiceJour.DlvCountryRegionId ASC, CustInvoiceJour.DlvState ASC WHERE ((ItemId = N'44831')) AND ((InvoiceDate>={ts '2011-08-01 00:00:00.000'} AND InvoiceDate<={ts '2011-08-31 00:00:00.000'})) EXISTS JOIN * FROM InventDim WHERE CustInvoiceTrans.InventDimId = InventDim.inventDimId AND ((InventLocationId = N'FG'))

NAME:
    qbds2
VALUE:
    SELECT * FROM CustInvoiceJour WHERE CustInvoiceTrans.SalesId = CustInvoiceJour.SalesId AND CustInvoiceTrans.InvoiceId = CustInvoiceJour.InvoiceId AND CustInvoiceTrans.InvoiceDate = CustInvoiceJour.InvoiceDate AND CustInvoiceTrans.numberSequenceGroup = CustInvoiceJour.numberSequenceGroup AND ((NOT (SalesType = 4)))


NAME:
    qbds3
VALUE:
    SELECT * FROM InventDim WHERE CustInvoiceTrans.InventDimId = InventDim.inventDimId AND ((InventLocationId = N'FG'))
名称:
qbds1
价值:

按CustInvoiceJour.DlvCountryRegionId ASC从CustInvoiceTrans订单中选择*,CustInvoiceJour.DlvState ASC其中((ItemId=N'44831'))和((InvoiceDate>={ts'2011-08-01 00:00:00.000')和InvoiceDate您的qbds1值不显示从CustInvoiceJour加入的
JOIN*,其中…
(加入qbds2)

qbds2.fetchMode(QueryFetchMode::One2One);
添加到代码中,一切都应该正常


另外,我建议采用另一种方式:qbds1中的CustInvoiceJour和qbds2中的CustInvoiceTrans(默认获取模式),那么您就不会有这个问题。

我实际上正在修复/调试一些预先存在的代码。我认为逻辑是,因为我们正在搜索行中的项目,所以从行开始。奇怪的是,CustInvoiceJour有一半的时间被返回。谢谢!