Показать сообщение отдельно
Старый 14.10.2009, 11:02   #17  
dynamax is offline
dynamax
Участник
 
62 / 11 (1) +
Регистрация: 28.09.2009
вернулся вчера опять к теме, переменил методу executeQuery(). Теперь выглядит вот-так:

X++:
public void executeQuery()
{
    Query query                                                 = new Query();
    QueryRun                queryRun;
    QueryBuildDatasource    dsForInventTrans                    = query.addDataSource(tablenum(InventTrans));
    QueryBuildDatasource    dsForInventTransPosting             = dsForInventTrans.addDataSource(tablenum(InventTransPosting));

    QueryBuildRange         rangeForItemId                      = dsForInventTrans.addRange(fieldnum(InventTrans,ItemId));
    QueryBuildRange         rangeForPeriod                      = dsForInventTransPosting.addRange(fieldnum(InventTransPosting, TransDate));
    ;

    dsForInventTransPosting.relations(true);
    dsForInventTransPosting.joinMode(JoinMode::InnerJoin);
    
    rangeForItemId.enabled(true);
    rangeForPeriod.enabled(true);
    rangeForItemId.value(itemIdFilter);
    rangeForPeriod.value(SysQuery::range(StartDate, EndDate));
        
        
    //ItemId
    dsForInventTrans.addSortField(fieldnum(inventTrans, itemId));
    dsForInventTrans.addSelectionField(fieldnum(InventTrans, Qty), SelectionField::Sum);
    dsForInventTrans.addSelectionField(fieldnum(InventTrans, CostAmountPosted), SelectionField::Sum);
    dsForInventTrans.orderMode(OrderMode::GroupBy);
        
    //Dimension
    dsForInventTransPosting.addSortField(fieldId2Ext(fieldnum(InventTransPosting, Dimension), 1));
    dsForInventTransPosting.addSelectionField(fieldId2Ext(fieldnum(InventTransPosting, Dimension), 1));
    dsForInventTransPosting.orderMode(OrderMode::GroupBy);
    
    this.query(query);
    super();

}
Это SQL-запрос:

X++:
SELECT SUM(Qty), SUM(CostAmountPosted) FROM InventTrans GROUP BY InventTrans.ItemId ASC WHERE ((ItemId = N'M0003')) JOIN Dimension[1] FROM InventTransPosting GROUP BY InventTransPosting.Dimension[1] ASC WHERE InventTrans.InventTransId = InventTransPosting.InventTransId AND ((TransDate>={ts '2008-10-01 00:00:00.000'} AND TransDate<={ts '2009-10-14 00:00:00.000'}))
Вроде все правильно, но подразделение остается пустым. Если делаю refresh - F5, то показываются подразделения. Вернее, то одно на все строки, то другое, хотя их несколько. Где я ошибаюсь?