24.05.2013, 17:18 | #21 |
Участник
|
|
|
24.05.2013, 17:26 | #22 |
Участник
|
Если джойнить 2 таблицы - всё замечательно, когда пытаюсь приджойнить третью - qbds валится в null.
X++: Queryrun main_query(boolean _count_query = false) { Query query = new Query(); QueryBuildDataSource qbds; ; qbds = query.addDataSource(tablenum(VendInvoiceTrans)); qbds.addSortField(fieldnum(VendInvoiceTrans,ItemId)); qbds.addSortField(fieldnum(VendInvoiceTrans,InternalSp)); qbds.addSelectionField(fieldnum(VendInvoiceTrans,Qty), SelectionField::Sum); qbds.orderMode(OrderMode::GroupBy); qbds = qbds.addDataSource(tablenum(VendSpListTrans)); qbds.addLink(fieldnum(VendSpListTrans,InternalSp),fieldnum(VendInvoiceTrans,InternalSp)); qbds.joinMode(JoinMode::InnerJoin); qbds = query.dataSourceTable(tableNum(VendSpListJour)); qbds.addLink(fieldnum(VendSpListTrans,InternalSp),fieldnum(VendSpListJour,InternalSP)); qbds.joinMode(JoinMode::InnerJoin); if (datefromstr && datetostr) { qbds.addRange(fieldnum(VendSpListJour,SpDate)).value(SysQuery::range(datefrom.value(),dateto.value())); } if (vendaccountstr) { qbds.addRange(fieldnum(VendSpListJour,OrderAccount)).value(SysQuery::value(vendaccountstr)); } //если введён регистранионный номер договора if (rcontractaccountstr) { qbds.addRange(fieldnum(VendSpListJour, RcontractAccount)).value(SysQuery::value(rcontractaccount.value())); } //если введён Владелец if (emplidstr) { qbds.addRange(fieldnum(VendSpListJour, Emplid)).value(SysQuery::value(emplid.value())); } switch(spclosedstr) { case (AllOpenPosted::All): qbds.addRange(fieldnum(VendSpListJour,SpClosed)); break; case (AllOpenPosted::Open): qbds.addRange(fieldnum(VendSpListJour,SpClosed)).value('1'); break; case (AllOpenPosted::Posted): qbds.addRange(fieldnum(VendSpListJour,SpClosed)).value('0'); break; default: break; } qbds = query.dataSourceTable(tablenum(VendInvoiceTrans)); if (_count_query) { qbds.addSelectionField(fieldnum(VendinvoiceTrans,RecId), SelectionField::Count); } qbds = query.dataSourceTable(tablenum(VendSpListTrans)); return (new QueryRun(query)); } qbds.addLink(fieldnum(VendSpListTrans,InternalSp),fieldnum(VendSpListJour,InternalSP)); Если заккоментировать весь кусок от qbds = query.dataSourceTable(tableNum(VendSpListJour)); и до конца switch - всё замечательно работает. Уважаемый maldini, не знаете, в чём причина? |
|
24.05.2013, 17:29 | #23 |
Участник
|
А, я понял, я не добавляю датасорс, я пытаюсь узнать его id
|
|
24.05.2013, 17:36 | #24 |
Участник
|
|
|
24.05.2013, 17:39 | #25 |
Участник
|
если я вас правильно понял, то вам не сделать это одним запросом. делайте while select по двум таблицам, и в цикле группировку по VendInvoiceTrans
|
|
24.05.2013, 17:40 | #26 |
Участник
|
Цитата:
Скажите, пожалуйста, а каким образом их добавить в группировку? К какому Qbds их цеплять ? Сейчас опять запрос валится с ошибкой что Источник данных не входит в состав родительского источника данных. |
|
24.05.2013, 17:42 | #27 |
Участник
|
|
|
24.05.2013, 17:53 | #28 |
Участник
|
Уважаемый maldini , если бы там было 3 таблицы, было бы более наглядно, с двумя у меня замечательно выходит и так.
|
|
24.05.2013, 18:13 | #29 |
Участник
|
Цитата:
X++: qbds = query.addDataSource(tablenum(VendInvoiceTrans)); qbds.addSortField(fieldnumVendInvoiceTrans,ItemId)); qbds.addSortField(fieldnum(VendInvoiceTrans,InternalSp)); qbds.addSelectionField(fieldnumVendInvoiceTrans,Qty), SelectionField::Sum qbds.orderMode(OrderMode::GroupBy); qbds = qbds.addDataSource(tablenum(VendSpListTrans)); qbds.addLink(fieldnum(VendSpListTrans,InternalSp),fieldnum(VendInvoiceTrans,InternalSp)); qbds.addSortField(fieldnum(VendSpListTrans,InternalSp)); qbds.orderMode(OrderMode::GroupBy); qbds.joinMode(JoinMode::InnerJoin); Последний раз редактировалось maldini; 24.05.2013 в 18:16. |
|
24.05.2013, 18:35 | #30 |
Участник
|
Цитата:
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)); } } Последний раз редактировалось maldini; 24.05.2013 в 19:18. |
|
Теги |
group by, query, группировка |
|
|