Где-то нарыл пример (сейчас не могу найти ссылку). Здесь код таблицы определяется по номеру датасорса, который содержится в поле 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));
}
}