Цитата:
Сообщение от
user_ax
Уважаемый maldini , если бы там было 3 таблицы, было бы более наглядно, с двумя у меня замечательно выходит и так.
Вот пример из 3 таблиц, так же можно ещё добавить таблицы
X++:
void main_query(boolean _count_query = false)
{
VendInvoiceJour VendInvoiceJour;
VendInvoiceTrans VendInvoiceTrans;
InventTable inventTable;
QueryRun QueryRun;
Query query = new Query();
QueryBuildDataSource qbds;
QueryBuildRange qbr;
;
qbds = query.addDataSource(tablenum(VendInvoiceJour));
qbds.addSortField(fieldnum(VendInvoiceJour,purchId));
qbds.addSelectionField(fieldnum(VendInvoiceJour,Qty), SelectionField::Sum);
qbds.orderMode(OrderMode::GroupBy);
qbds.addRange(fieldnum(VendInvoiceJour,purchId)).value('ЗП-000006');
qbds = qbds.addDataSource(tablenum(VendInvoiceTrans));
qbds.addSortField(fieldnum(VendInvoiceTrans,purchId));
qbds.orderMode(OrderMode::GroupBy);
qbds.addLink(fieldnum(VendInvoiceJour,purchId),fieldnum(VendInvoiceTrans,purchId));
qbds = qbds.addDataSource(tablenum(InventTable));
qbds.addSortField(fieldnum(InventTable,ItemId));
qbds.orderMode(OrderMode::GroupBy);
qbds.addLink(fieldnum(InventTable,ItemId),fieldnum(VendInvoiceTrans,ItemId));
qbds.relations(true);
QueryRun = new QueryRun(query);
while (queryRun.next())
{
VendInvoiceJour = QueryRun.get(tablenum(VendInvoiceJour));
VendInvoiceTrans = QueryRun.get(tablenum(VendInvoiceTrans));
inventTable = QueryRun.get(tablenum(InventTable));
info(strFmt("%1 %2",VendInvoiceJour.PurchId,VendInvoiceJour.Qty));
info(strFmt("%1",VendInvoiceTrans.PurchId));
info(strFmt("%1",InventTable.itemId));
}
}
Если в запросе есть группировка то доступными будут только сгруппированные данные. Так работает любой sql. Выводится только то что присутствует в группировке, например InventTable.ItemGroup будет пустым так как его нет в группировке