Показать сообщение отдельно
Старый 11.06.2013, 03:21   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Где-то нарыл пример (сейчас не могу найти ссылку). Здесь код таблицы определяется по номеру датасорса, который содержится в поле 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).