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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.05.2013, 17:02   #1  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от maldini Посмотреть сообщение
Странно! Каким способом ты получаешь данные из запроса.
Вот такой пример работает без проблем
X++:
Queryrun main_query(boolean _count_query = false)
{
    VendInvoiceJour     VendInvoiceJour;
    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  = qbds.addDataSource(tablenum(VendInvoiceTrans));
    qbds.addLink(fieldnum(VendInvoiceJour,purchId),fieldnum(VendInvoiceTrans,purchId));
    qbds.joinMode(JoinMode::InnerJoin);
    qbds = query.dataSourceTable(tableNum(VendInvoiceJour));

    QueryRun = new QueryRun(query);
    while (queryRun.next())
    {
        VendInvoiceJour = QueryRun.get(tablenum(VendInvoiceJour));
        info(strFmt("%1  %2",VendInvoiceJour.PurchId,VendInvoiceJour.Qty);
    }
}
В вашем запросе вы к одному Qbds цепляете разные таблицы, а у меня к каждому свою.
Как всё-таки правильно?
У меня связи таблиц немного другие

ListJour => ListTrans - один ко многим
ListTrans => VendInvoiceTrans - много ко многим.
Может быть из-за этого проблема?
Старый 24.05.2013, 17:07   #2  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от user_ax Посмотреть сообщение
В вашем запросе вы к одному Qbds цепляете разные таблицы, а у меня к каждому свою.
Как всё-таки правильно?
У меня связи таблиц немного другие

ListJour => ListTrans - один ко многим
ListTrans => VendInvoiceTrans - много ко многим.
Может быть из-за этого проблема?
QDBS тут совсем не причем. Всеравно все от query идет. Просто в вашем случае можно в любое место добавить какое либо условия, а в моем придется в переменную qdbs предварительно получить datasource того запроса куда буду добовлять фильтр, вот так
X++:
qdbs = query.dataSourceTable(tableNum(VendInvoiceJour));
Условия соединений я думаю тут не причем, если из моего примера убрать
X++:
qbds.joinMode(JoinMode::InnerJoin);
все так же будет работать проблема где то близко. )))

Последний раз редактировалось maldini; 24.05.2013 в 17:12.
Старый 24.05.2013, 17:11   #3  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от maldini Посмотреть сообщение
QDBS тут совсем не причем. Всеравно все от query идет. Просто в вашем случае можно в любое место добавить какое либо условия, а в моем придется в переменную qdbs предварительно получить datasource того запроса куда буду добовлять фильтр, вот так
X++:
qdbs = query.dataSourceTable(tableNum(VendInvoiceJour));
Сейчас попробую переписать по вашему примеру, спасибо. Посмотрим как будет.
Старый 24.05.2013, 17:14   #4  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от user_ax Посмотреть сообщение
Сейчас попробую переписать по вашему примеру, спасибо. Посмотрим как будет.
По твоему примеру мне кажется тоже все работает, пришли пример как ты вынимаешь значения из query
Старый 24.05.2013, 17:16   #5  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от maldini Посмотреть сообщение
По твоему примеру мне кажется тоже все работает, пришли пример как ты вынимаешь значения из query
В теле отчёта делаю
X++:
 queryRun = this.main_query();

    while(queryRun.next())
    {
        vendsp = queryRun.get(tablenum(VendSpListJour));
        vendsplist = queryRun.get(tablenum(VendSpListTrans));
        vendinvoice = queryRun.get(tablenum(VendInvoiceTrans));
Если вы это имели ввиду.
Старый 24.05.2013, 17:17   #6  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от user_ax Посмотреть сообщение
В теле отчёта делаю
X++:
 queryRun = this.main_query();
 
    while(queryRun.next())
    {
        vendsp = queryRun.get(tablenum(VendSpListJour));
        vendsplist = queryRun.get(tablenum(VendSpListTrans));
        vendinvoice = queryRun.get(tablenum(VendInvoiceTrans));
Если вы это имели ввиду.
А зачем так много таблиц, ведь данные, если я не ошибаюсь будут только в VendInvoiceTrans. Для того что бы получить значения полей из других таблиц их надо тоже включать в группировку. Вот пример как получить значение закупки из другой таблицы, если группировку не делать то она будет пустой.
X++:
void main_query(boolean _count_query = false)
{
    VendInvoiceJour     VendInvoiceJour;
    VendInvoiceTrans    VendInvoiceTrans;
    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('Номер закупки');
    qbds  = qbds.addDataSource(tablenum(VendInvoiceTrans));
    qbds.addSortField(fieldnum(VendInvoiceTrans,purchId));
    qbds.orderMode(OrderMode::GroupBy);
    qbds.addLink(fieldnum(VendInvoiceJour,purchId),fieldnum(VendInvoiceTrans,purchId));

    QueryRun = new QueryRun(query);
    while (queryRun.next())
    {
        VendInvoiceJour = QueryRun.get(tablenum(VendInvoiceJour));
        VendInvoiceTrans    = QueryRun.get(tablenum(VendInvoiceTrans));
        info(strFmt("%1  %2",VendInvoiceJour.PurchId,VendInvoiceJour.Qty));
        info(strFmt("%1",VendInvoiceTrans.PurchId));
    }
}

Последний раз редактировалось maldini; 24.05.2013 в 17:44.
Старый 24.05.2013, 17:18   #7  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от maldini Посмотреть сообщение
Странно все это. Ещё раз все аккуратно проверь, все должно получится.
Сейчас переписываю по вашему примеру, буду надеяться, что получиться
Старый 24.05.2013, 17:36   #8  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от maldini Посмотреть сообщение
А зачем так много таблиц, ведь данные, если я не ошибаюсь будут только в VendInvoiceTrans
Нет, данные будут из всех таблиц, которые я джойню.
Старый 24.05.2013, 17:40   #9  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от maldini Посмотреть сообщение
Для того что бы получить значения полей из других таблиц их надо тоже включать в группировку.

Скажите, пожалуйста, а каким образом их добавить в группировку?

К какому Qbds их цеплять ?

Сейчас опять запрос валится с ошибкой что Источник данных не входит в состав родительского источника данных.
Теги
group by, query, группировка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX 2012 Наследование таблиц. Краткое описание механизма sukhanchik DAX: Программирование 32 21.09.2018 17:56
emeadaxsupport: Calling the Query Service Blog bot DAX Blogs 0 18.02.2012 01:13
AIF: OData Query Service Blog bot DAX Blogs 0 24.08.2011 09:11
jinx: Dynamics AX – Query-Ranges und Filtereinstellungen des Benutzers Blog bot DAX auf Deutsch 0 04.02.2010 00:05
Dynamics AX Geek: Using query() Blog bot DAX Blogs 0 04.05.2009 14:05

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:12.