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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.02.2004, 15:08   #1  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
Вопрос по QueryBuildDataSource, QueryBuildRange и QueryRun
Всем кто меня слышит!

Честно говоря, несколько запутался с разбором примером работы с такими классами как QueryBuildDataSource, QueryBuildRange и QueryRun.

Сначала задача:
1) Есть таблица, есть форма с единственным датасорсом (по этомй таблице).
2) Скажем хочется на форме в гриде иметь поле таблицы (ключевое) и второе поле - которое рассчитывается по первому - но НЕ через display-метод.
формула расчёта - связь через первое поле с другой таблицей и там суммирование по некоторому числовому полю в некотором временном интервале.

Есть подозрение, что это можно устроить через QueryBuildDataSource. Но как?
Или как решить эту задачу иным способом?

И ещё такой вопрос - может ли кто-нибудь разложить по полочкам принципы работу с
QueryBuildDataSource, QueryBuildRange и QueryRun?

Буду очень признателен!
__________________
Paul_ST
Старый 11.02.2004, 15:43   #2  
wavetrain is offline
wavetrain
Участник
 
11 / 10 (1) +
Регистрация: 15.08.2003
Адрес: Москва
Привет !

Есть альтернативный вариант. Если данных не очень много, то можно форму повесить на временную таблицу. При открытии формы будете начитывать данные в эту таблицу. Тогда и все поля можно сразу рассчитать, и поиск/фильтрация будут работать.
Старый 11.02.2004, 15:45   #3  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
Спасибо! НО я конечно же забыл написать, что вариантом с временной таблицей хотелось бы воспользоваться только в самом крайнем случае.
Не очень-то это по-Axapt'овски
__________________
Paul_ST
Старый 11.02.2004, 16:24   #4  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,250 / 980 (37) +++++++
Регистрация: 03.04.2002
2 Paul_ST, ну сколько можно!? Сегодня уже обсуждалось:
http://www.axforum.info/forums/showt...7958#post27958
Старый 11.02.2004, 16:27   #5  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
Если честно, то Ваш ответ там для меня непонятен и слишком краток. Можно прокомментировать более подробно про:
qbDS.addSelectionField(fieldId , SelectionField::Sum )

Буду очень признателен!
__________________
Paul_ST
Старый 11.02.2004, 16:28   #6  
DMA is offline
DMA
Участник
 
109 / 19 (1) ++
Регистрация: 30.09.2003
Цитата:
Изначально опубликовано Paul_ST
Спасибо! НО я конечно же забыл написать, что вариантом с временной таблицей хотелось бы воспользоваться только в самом крайнем случае.
Не очень-то это по-Axapt'овски
Смелое утверждение. Обратите внимание на количество временных таблиц в стандартной Аксапте.

Цитата:
2) Скажем хочется на форме в гриде иметь поле таблицы (ключевое) и второе поле - которое рассчитывается по первому - но НЕ через display-метод.
Так это самое поле, которое расчитывается по первому это поле таблицы?
То есть данные в таблице пересчитываются когда пользователь откравает форму?
Подход прямо скажем выглядит не вполне адекватно.
Старый 11.02.2004, 16:34   #7  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
для DMA:

для таблицы A, состоящей из одного поля a1 хочется рассчитать ещё одно поле a2, которое рассчитывается (используюя значение первого поля a1) суммированием по диапазону поля b1 в другой таблице B.

Неужели только подход через временные таблицы возможен?
__________________
Paul_ST
Старый 11.02.2004, 16:45   #8  
DMA is offline
DMA
Участник
 
109 / 19 (1) ++
Регистрация: 30.09.2003
Цитата:
Изначально опубликовано Paul_ST
для DMA:

для таблицы A, состоящей из одного поля a1 хочется рассчитать ещё одно поле a2, которое рассчитывается (используюя значение первого поля a1) суммированием по диапазону поля b1 в другой таблице B.

Неужели только подход через временные таблицы возможен?
Повторю вопрос:
поле а2 это поле хранимое в таблице A?
В противном случае мне не вполне понятно, как вы собираетесь отображать его в гриде, не используя display метод.
Старый 11.02.2004, 17:06   #9  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Немного теории
Query - класс, который содержит всю структуру запроса
QueryBuildDataSоurce - источник данных (таблица), то что содержится в FROM. Сколько таблиц, столько и QBDS должно быть в Query. QBDS содержит также список полей, сортировок, ограничений (QueryBuildRange), связей с др. таблицами.
QueryRun - класс, который позволяет исполнить запрос и получить результат.

Простой пример:
PHP код:
static void Job43(Args _args)
{
    
Query           q = new Query();
    
QueryRun        qr;
    
InventTable     inventTable;
    
InventItemGroup inventItemGroup;

    
QueryBuildDataSource    qbDS;
    
QueryBuildRange         qbRange;
    ;

    
qbDS q.addDataSource(tableNum(InventItemGroup));
    
qbDS.orderMode(OrderMode::GROUPBY);
    
qbDS.addSortField(fieldNum(InventItemGroupName));

    
qbDS qbDS.addDataSource(tableNum(InventTable));
    
qbDS.addLink(fieldNum(InventItemGroupItemGroupId), fieldNum(InventTableItemGroupId));

    
qbDS.orderMode(OrderMode::GROUPBY);
    
qbDS.addSortField(fieldNum(InventTableItemGroupId));

    
qbDS.addSelectionField(fieldNum(InventTableRecId), SelectionField::COUNT);

    
qbRange qbDS.addRange(fieldNum(InventTableItemId));
    
qbRange.value("*0");

    
qr = new QueryRun(q);
    while(
qr.next())
    {
        
inventTable qr.get(tableNum(InventTable));
        
inventItemGroup qr.get(tableNum(InventItemGroup));

        print 
inventItemGroup.Name " : " int2str(inventTable.RecId);
    }

    
pause;

И почитайте System Documentation \ Classes
Старый 11.02.2004, 17:13   #10  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,250 / 980 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Изначально опубликовано Paul_ST
Если честно, то Ваш ответ там для меня непонятен и слишком краток. Можно прокомментировать более подробно про:
qbDS.addSelectionField(fieldId , SelectionField::Sum )
Дальнейшие пояснения излишни, т.к. это будет пересказ аксаптовского руководства разработчика. Если вам лень читать документацию или воспользоваться функцией поиска по форуму, лучше сразу сходить на курсы.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Простой QueryRun не работает miklenew DAX: Программирование 13 20.01.2009 14:17
OZKA's DAX Journal: Join между временной и постоянной таблицей через QueryRun. Blog bot DAX Blogs 12 14.01.2009 17:34
Вопрос про QueryRun Silphidae DAX: Программирование 9 02.12.2008 11:08
Использование "like" при работе с классом "QueryBuildRange" poul DAX: Программирование 18 11.08.2006 12:20
Еще по поводу QueryBuildRange() RVS DAX: Программирование 4 10.07.2003 12:57

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

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

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