AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.06.2013, 20:53   #1  
uchenik is offline
uchenik
Участник
 
119 / 20 (1) +++
Регистрация: 15.12.2008
Query UNION Ax2009 - идентификация строки
Объединяю в query с типом union две таблицы, к примеру PurchTable, SalesTable.
Нужен какой-то признак, для определения к какой из таблиц относится строка.
Добавлять столбец с tableid в таблицу не хочется.
Какие есть варианты решения?
__________________
Ax2009

Последний раз редактировалось uchenik; 10.06.2013 в 20:59.
Старый 11.06.2013, 01:13   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вряд ли это возможно.
По сути, когда выполняется такой запрос, уже не существует PurchTable и SalesTable, есть только одна таблица - OrderTable, в которой есть пару идентичных/схожих полей.
Соответственно, если нужно знать, из какой таблицы пришла запись, нужно это иметь в поле этой новой таблицы, выбирая туда данные.

В SQL это можно было бы сделать через выборку константы, в АХ это не поддерживается, поэтому скорее всего нужно именнодобавлять в запрос еще одно идентифицируещее поле.


Но вообще - возможно стоит задуматься, а может это два отдельных запроса, если вас с результатами надо разные вещи делать в зависимости от таблицы?
Старый 11.06.2013, 03:21   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 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).
Старый 11.06.2013, 03:32   #4  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
http://daxline.blogspot.com/2010/05/...eries-and.html
За это сообщение автора поблагодарили: uchenik (1).
Старый 11.06.2013, 07:42   #5  
uchenik is offline
uchenik
Участник
 
119 / 20 (1) +++
Регистрация: 15.12.2008
Спасибо, так действительно лучше!
Порадовало расположение свойства UnionType.

Цитата:
Сообщение от kashperuk Посмотреть сообщение
Но вообще - возможно стоит задуматься, а может это два отдельных запроса, если вас с результатами надо разные вещи делать в зависимости от таблицы?
Запросы-то разные, но отобразить нужно в одной таблице, а вот переходить к основной таблицы по полю SalesPurchId нужно на правильную форму
__________________
Ax2009
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ax2009 Не дает редактировать строки периодического журнала Arahnid DAX: Администрирование 5 02.11.2011 11:33
Ax2009 Вопрос про строки фактуры поставщиков Arahnid DAX: Программирование 4 01.07.2011 20:38
jinx: Dynamics AX – Query-Ranges und Filtereinstellungen des Benutzers Blog bot DAX auf Deutsch 0 04.02.2010 00:05
AX2009: Как создать Query со сложним условием t1.f1 = str(t2.f2) ? andriy_s DAX: Программирование 5 01.09.2009 16:23
palleagermark: Sample union query from AX 2009 Blog bot DAX Blogs 0 11.07.2008 20:05

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:36.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.