Показать сообщение отдельно
Старый 18.11.2008, 18:09   #1  
Peppi is offline
Peppi
Участник
 
31 / 11 (1) +
Регистрация: 22.10.2008
Вложенный датасорс с QueryRun
Есть такой код:

X++:
static void Test_Query(Args _args)
{
    CustTable            custTable;
    AddressState        addressState;
    Query                query      = new Query();
    QueryRun             qr         = new queryRun(query);
    QueryBuildDataSource qbds       = qr.query().addDataSource(tableNum(CustTable));
    QueryBuildDataSource qbdsJoin;
    int i;
    ;
 
    qbds.addSelectionField(fieldnum(CustTable,RecId),SelectionField::Count);
    qbds.addSortField(fieldnum(CustTable,CashDisc));
    qbds.addSortField(fieldnum(CustTable,CountryRegionId));
    qbds.addSortField(fieldnum(CustTable,State));
    qbds.orderMode(OrderMode::GroupBy);
 
    qbdsJoin = qbds.addDataSource(tablenum(AddressState));
    qbdsJoin.relations(false);
    qbdsJoin.orderMode(OrderMode::OrderBy);
    qbdsJoin.joinMode(JoinMode::OuterJoin);
    qbdsJoin.addlink(fieldnum(CustTable,CountryRegionId),fieldnum(AddressState,CountryRegionId));
    qbdsJoin.addlink(fieldnum(CustTable,State),fieldnum(AddressState,StateId));
    qbdsJoin.addSelectionField(fieldnum(AddressState,Name));
 
   if (qr.prompt())
    {
        i=0;
        while (qr.next())
        {
            custTable = qr.get(tableNum(CustTable));
            addressState = /* ЧТО ЗДЕСЬ ДОЛЖНО БЫТЬ*/ 
            print strfmt("%1 %2 (%3 records)",addressState.Name, custTable.CashDisc ,custTable.RecId);
           i+=custTable.RecId;
         }
 
    }
 
    pause;
}
Как получить значение позиции addressState? Если делать по аналогии
X++:
addressState = qr.get(tableNum(ddressState ));
то получаем пусто, как добраться до значений во вложенном датасорсе?
Или вообще релейшн неправильно построен? То тогда как верно это сделать?