Показать сообщение отдельно
Старый 24.07.2013, 14:32   #9  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
Я так понимаю нам надо получить типа:
X++:
SELECT WITH SELECT_ORDER, NESTED_LOOP, FORCE_PLACEHOLDERS INDEXISHINT
        SUM(PostedQty), SUM(PostedValue), SUM(PhysicalValue), SUM(Deducted), SUM(Registered),
        SUM(Received), SUM(Picked), SUM(ReservPhysical), SUM(ReservOrdered), SUM(OnOrder),
        SUM(Ordered), SUM(Arrived), SUM(QuotationReceipt), SUM(QuotationIssue), SUM(PhysicalInvent),
        SUM(PostedValueSecCur_RU), SUM(PhysicalValueSecCur_RU), SUM(AvailPhysical), SUM(AvailOrdered)
FROM InventSum
    USING INDEX ClosedItemDimIdx
    WHERE ((Closed = ))
JOIN INDEXISHINT *
FROM InventDim
    GROUP BY InventDim.InventLocationId ASC
    USING INDEX DimIdIdx
    WHERE InventSum.InventDimId = InventDim.inventDimId

JOIN ItemId, SotrOrder
FROM X_table
GROUP BY X_table.SotrOrder, X_table.ItemId ASC
WHERE X_table.ItemId = InventSum.ItemId
При этом в форме ItemId (itemName()) придется брать с X_table...
Добиться подобного запроса можно добавив X_table datasource в форму с inner join к InventSum...
Далее придеться переписать init X_table datasource как-то примерно так:

X++:
void init()
{
    Query q;
    QueryBuildDatasource qbds;
    ;
    super();

    q = this.Query();
    qbds = q.dataSourceTable(tableNum(InventSum));

    qbds.orderMode(OrderMode::GroupBy);
    qbds.fetchMode(QueryFetchMode::One2One);
    qbds.sortClear(); // долой ItemId
    qbds.addSortField(fieldNum(InventSum, dataAreaId)); // наверное можно и без этого

    qbds = q.dataSourceTable(tableNum(InventDim));
    qbds.orderMode(OrderMode::GroupBy);
    qbds.fetchMode(QueryFetchMode::One2One);
    qbds.sortClear(); // долой сортировку/группировку...
    qbds.addSelectionField(fieldNum(InventDim, InventLocationId));
    qbds.addSortField(fieldNum(InventDim, InventLocationId));

    qbds = q.dataSourceTable(tableNum(X_Table));
    qbds.orderMode(OrderMode::GroupBy);
    qbds.fetchMode(QueryFetchMode::One2One);
    qbds.addSelectionField(fieldNum(X_Table, SortOrder));
    qbds.addSelectionField(fieldNum(X_Table, ItemId));
    qbds.addSortField(fieldNum(X_Table, SortOrder));
    qbds.addSortField(fieldNum(X_Table, ItemId));
    
    // sql:
    /*
    qbds = q.dataSourceTable(tableNum(InventSum));
    box::info(qbds.toString());
    */
}
Беда только в том, что группировки могут меняться настройкой отображения аналитик...
Соот-но... по-правильному этот метод необходимо перестраивать с учетом настройки, поэтому
лучше свою форму или...


Фактически совет EVGL
Цитата:
- модифицировать класс, который применяет группировку к источнику данных в форме InventOnhand

Последний раз редактировалось ansoft; 24.07.2013 в 15:32.