Я так понимаю нам надо получить типа:
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