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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.06.2015, 17:54   #1  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Помощь с QUERY
Добрый день!
Делаю Query:
X++:
static void _201_HTC_Query_fromCustJour(Args _args)
{
    Query                   query;
    QueryRun                qr;
    QueryBuildDataSource    qbds, qbdsinvent;
    QueryBuildRange         qbr;

    CustInvoiceJour  custInvoiceJour;
    CustInvoiceTrans custInvoiceTrans;
    CustTable        custTable;
    InventBatchid           inventBatchId = "141110-PO014116";
    ;

    query = new Query();

    qbds = query.addDataSource(tableNum(CustInvoiceJour));
    qbds.addSortField(fieldNum(CustInvoiceJour, SalesId));


    qbds = query.dataSourceTable(tableNum(CustInvoiceJour)).addDataSource(tableNum(CustTable));
    qbds.relations(true);
        qbds.fetchMode(QueryFetchMode::One2One);



    qbds = query.dataSourceTable(tableNum(CustInvoiceJour)).addDataSource(tableNum(CustInvoiceTrans));
    qbds.addRange(fieldNum(CustInvoiceTrans,ItemId)).value("P35080");
    qbds.relations(true);
    qbds.fetchMode(QueryFetchMode::One2One);

    qbds = query.dataSourceTable(tableNum(CustInvoiceTrans)).addDataSource(tableNum(InventTrans));
    qbds.addRange(fieldNum(InventTrans,InventTransId)).value("001720288");
    qbds.relations(true);
    qbds.fetchMode(QueryFetchMode::One2One;
    

    qr = new QueryRun(query);

    info(query.dataSourceTable(tableNum(CustInvoiceJour)).toString());

    while (qr.next())
    {
        custInvoiceJour = qr.get(tablenum(CustInvoiceJour));
        custInvoiceTrans = qr.get(tablenum(CustInvoiceTrans));
        custTable = qr.get(tablenum(CustTable));

        info(strfmt("%1 | %2 | %3 | %4", custInvoiceJour.SalesId, custTable.Name, custInvoiceTrans.ItemId, custInvoiceTrans.Qty));

    }
}
На выходе получаю правильную агрегированную запись но дважды. Вопрос как сделать чтобы один раз а не два?
Старый 17.06.2015, 18:12   #2  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Разобрался. Однако проблема - вот такая ошибка.

Суммарный внутренний размер записей в вашем объединенном операторе SELECT равен 25016 байтам, но система Microsoft Dynamics по умолчанию настроена так, что он не должен превосходить 24576 байтов.

Приходится исключать одну из таблиц в данном случае CustTable. Что разумеется не очень круто. Подскажите можно ли это исправить??
Старый 17.06.2015, 18:16   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
У Вас группировка только по первому датасорсу.Плюс явно не весь запрос приведен, ибо видны "следы" от CustTable, который не участвует в приведенном примере кода.

Ну т.е. сделайте так:
1. Сделайте группировку и Query только с одним датасорсом.
2. Как только получите результат - то подсоединяйте второй датасорс и т.д.

Те датасорсы, которые в выборке не нужны - присоединяйте по (Not) Exists Join

В Вашем случае скорее всего группировка наложилась неверно и поля из других датасорсов также участвуют в группировке, в то время, как отображается только то поле, по которому Вы наложили группировку.
__________________
Возможно сделать все. Вопрос времени
Старый 17.06.2015, 18:21   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Поставьте Maximum buffer size, большее, чем 24 (в Вашем случае можно 25-26, т.е. 25016 / 1024) в конфигурационной утилите аоса и рестартаните его
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 507
Размер:	14.6 Кб
ID:	9304
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: Art_Tanis (1).
Старый 17.06.2015, 18:31   #5  
A_BAS is offline
A_BAS
Участник
Аватар для A_BAS
 
77 / 48 (2) +++
Регистрация: 19.04.2012
Или ограничивайте количество выбираемых полей в запросе qbds.selectedField(). Оставьте только те, которые вы реально будете использовать.
Старый 17.06.2015, 18:45   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от A_BAS Посмотреть сообщение
Или ограничивайте количество выбираемых полей в запросе qbds.selectedField(). Оставьте только те, которые вы реально будете использовать.
Не поможет. Пробовал...

Предположительно в Ax2009 при анализе размера буфера суммирует размер всех полей записи вне зависимости от настроек qbds.selectedField(). По крайней мере мне в аналогичной ситуации пришлось делать вложенные циклы...
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: A_BAS (1).
Старый 17.06.2015, 18:54   #7  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Бааальшущее спасибо за ответы! Все получилось.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: Microsoft Dynamics AX general performance analysis scripts page 5 Blog bot DAX Blogs 0 01.09.2014 14:11
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

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

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

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