|
![]() |
#1 |
Administrator
|
Где-то нарыл пример (сейчас не могу найти ссылку). Здесь код таблицы определяется по номеру датасорса, который содержится в поле unionAllBranchId. Важный момент - если у вас конструкция не UNOIN ALL - то определить источник записи невозможно, т.к. без ALL БД отсекает дублирующиеся записи и т.о. выводимая запись имеет неизвестный источник данных.
X++: static void union(Args _args) { Query query; QueryBuildDataSource qbdsCustTable; QueryBuildDataSource qbdsVendTable; QueryRun queryRun; CustVendTable custVendTable; TableName tableName; ; query = new Query(); query.queryType(QueryType::Union); query.allowCrossCompany(true); query.addCompanyRange('ceu'); query.addCompanyRange('cee'); qbdsCustTable = query.addDataSource(tableNum(CustTable)); qbdsCustTable.unionType(UnionType::UnionAll); // Include duplicate records qbdsCustTable.fields().dynamic(false); qbdsCustTable.fields().clearFieldList(); qbdsCustTable.fields().addField(fieldNum(CustTable, AccountNum)); qbdsCustTable.fields().addField(fieldNum(CustTable, Name)); qbdsCustTable.fields().addField(fieldNum(CustTable, DataAreaId)); qbdsVendTable = query.addDataSource(tableNum(Vendtable)); qbdsVendTable.unionType(UnionType::UnionAll); // Include duplicate records qbdsVendTable.fields().dynamic(false); qbdsVendTable.fields().clearFieldList(); qbdsVendTable.fields().addField(fieldNum(VendTable, AccountNum)); qbdsVendTable.fields().addField(fieldNum(VendTable, Name)); qbdsVendTable.fields().addField(fieldNum(VendTable, DataAreaId)); queryRun = new QueryRun(query); if (!queryRun.prompt()) { return; } while (queryRun.next()) { custVendTable = queryRun.getNo(1); tableName = tableid2name(queryRun.getNo(custVendTable.unionAllBranchId).TableId); info (strFmt("%1 %2 (%3, %4)", custVendTable.AccountNum, custVendTable.Name, tableName, custVendTable.dataAreaId)); } }
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: Logger (3), uchenik (1), Товарищ ♂uatr (1). |
|
|