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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.03.2016, 14:45   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
хм... уточню. интересует не столько "почему CustTable первая", сколько "почему вторая CustTransOpen"

вроде естественный логический порядок: CustTable - CustTrans - CustTransOpen но здесь порядок неестественно вывернут.
Так gl00mie сделал вполне логичное предположение. Автор запроса, предположительно, думал, что механизм SQL-запросов работает по принципу вложенных циклов (а может, первые версии Damgaard так и работали ).

Тогда все логично. В рамках одного клиента количество записей в CustTransOpen должно быть существенно меньше, чем количество записей в CustTrans.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: mazzy (2).
Старый 10.03.2016, 14:56   #2  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
В поддержку моей теории попробуйте выполнить следующий джоб.
Видно, что если таблица CustTrans непоследняя, и к ней приджойнить другие таблицы, то Аксапта генерирует неправильный запрос.
X++:
static void Job782(Args _args)
{
    Query                   query = new Query();
    QueryRun                queryRun;
    QueryBuildDatasource    qbdsCustTable;
    QueryBuildDatasource    qbdsCustTrans;
    QueryBuildDatasource    qbdsCustTransOpen;
    QueryBuildDatasource    qbdsLedgerTrans;
    QueryBuildDatasource    qbdsLedgerTable;

    ;
    //-->правильно работает
    query = new Query();
    qbdsCustTable = query.addDataSource(tableNum(CustTable));
    qbdsCustTransOpen = qbdsCustTable.addDataSource(tableNum(CustTransOpen));
    qbdsCustTrans = qbdsCustTransOpen.addDataSource(tableNum(CustTrans));
    qbdsLedgerTrans = qbdsCustTrans.addDataSource(tableNum(LedgerTrans));
    qbdsLedgerTable = qbdsLedgerTrans.addDataSource(tableNum(LedgerTable));

    queryRun = new QueryRun(query);
    info(queryRun.query().dataSourceNo(1).toString());
    //<--правильно работает
    
    
    //-->неправильно работает
    query = new Query();
    qbdsCustTable = query.addDataSource(tableNum(CustTable));
    qbdsCustTrans = qbdsCustTable.addDataSource(tableNum(CustTrans));
    qbdsCustTransOpen = qbdsCustTrans.addDataSource(tableNum(CustTransOpen));
    qbdsLedgerTrans = qbdsCustTrans.addDataSource(tableNum(LedgerTrans));
    qbdsLedgerTable = qbdsLedgerTrans.addDataSource(tableNum(LedgerTable));

    queryRun = new QueryRun(query);
    info(queryRun.query().dataSourceNo(1).toString());
    //<--неправильно работает
}

Последний раз редактировалось Ace of Database; 10.03.2016 в 15:04.
За это сообщение автора поблагодарили: mazzy (2), Ruff (2).
Старый 10.03.2016, 14:59   #3  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Авторы запроса специально оставили удобную "розетку", через которую можно подключать новые таблицы к запросу.
Запросы в Аксапте - это как поезд, в котором таблицы выполняют роль вагонов. Последним ставят самый красивый вагон, чтобы было приятно к нему прицеплять новые вагоны
А таблица CustTransOpen - это аппендикс, к нему мало что подцепишь, и поэтому ее не оставили в самом конце.

Последний раз редактировалось Ace of Database; 10.03.2016 в 15:03.
Старый 10.03.2016, 15:11   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,984 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
В поддержку моей теории попробуйте выполнить следующий джоб.
А если поставить fetchMode(fetchMode::one2one) ?

Последний раз редактировалось mazzy; 10.03.2016 в 15:18. Причина: исправил смайлик
За это сообщение автора поблагодарили: Ace of Database (5).
Старый 10.03.2016, 15:21   #5  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
One2One правильно работает.
Но на формах вроде бы нельзя в свойствах датасурса изменить FetchMode.
На query можно, на формах - нельзя.
Старый 10.03.2016, 15:26   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
Но на формах вроде бы нельзя в свойствах датасурса изменить FetchMode. На query можно, на формах - нельзя.
На формах добавляемые источники цепляются через ExistsJoin
Старый 10.03.2016, 15:29   #7  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
На формах добавляемые источники цепляются через ExistsJoin
А как же тогда из них выводить данные в контролы на форме?
Старый 10.03.2016, 15:33   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
А как же тогда из них выводить данные в контролы на форме?
Я думал вы о пользовательских фильтрах Ctrl+F3
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как класс->запрос->форма. Как такое создать? kitty DAX: Программирование 16 09.09.2014 12:52
Почему не работает запрос? vikuss2006 DAX: Программирование 4 07.04.2014 17:43
Вложенный запрос SQL с помощью великого Query user_ax DAX: Программирование 9 07.10.2013 14:00
Вставка queryRun-а в запрос sql user_ax DAX: Программирование 8 04.10.2013 17:21
Возможен ли такой Query kalex DAX: Программирование 4 07.05.2007 13:13

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

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

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