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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.01.2004, 13:12   #1  
xshaman is offline
xshaman
Участник
 
36 / 11 (1) +
Регистрация: 17.12.2003
Адрес: Санкт-Петербург
QBDS проблема с тремя датасоурсами
Суть задачи
сделать запрос в рантайме
Select * FROM InventTrans JOIN * FROM InventDim ON InventTrans.InventDimID = InventDim.InventDimId JOIN * FROM InventTable ON InventTrans.ItemId = InventTable.ItemId

пишу код
PHP код:
void initQuery()
{
    
Query   query;
    
int i;
    
str s;
    
QueryBuildDataSource qbdsqbdsInventDimqbdsInventTableqbdsInventBatch;
    
QueryBuildRange      qbr;
    
QueryBuildLink       qbl;
;
    
query = new Query();
    
qbds  query.addDataSource(tablenum(InventTrans));
    
qbr   qbds.addRange(FieldNum(InventTransItemId));
    
qbr   qbds.addRange(FieldNum(InventTransStatusReceipt));
    
qbr.value(Int2str(StatusReceipt::Ordered));
    
qbr.status(RangeStatus::Hidden);
    
// первый подчиненный главному дс добавляется бенз проблем вне зависимости 
    // InventDim сюда сунуть или InventTable
    
qbdsInventTable qbds.addDataSource(tableNum(InventTable));
    
qbdsInventTable.joinMode(SQLBuilderJoinType::InnerJoin);
    
qbl qbdsInventTable.addLink(FieldNum(InventTransItemId), FieldNum(InventTableItemId));
    
// А вот когда добавляю второй qdbs берет и выкидывает предыдущий джойн
    
qbdsInventDim qbds.addDataSource(tableNum(InventDim));
    
qbl   qbdsInventDim.addLink(FieldNum(InventTransInventDimId), FieldNum(InventDimInventDimId));
    
qbr   qbdsInventDim.addRange(FieldNum(InventDimInventLocationId));



    
reportQuery = new sysqueryrun(query);

Вопрос, как это можно решить, и что я делаю неправильно? Axapta 3.0
Старый 22.01.2004, 13:44   #2  
wavetrain is offline
wavetrain
Участник
 
11 / 10 (1) +
Регистрация: 15.08.2003
Адрес: Москва
Привет !

У меня возникала похожая проблема. Решил ее следующим образом:

1. 3-й datasource присоединяем ко 2-му, а не к первому.
2. Заменяем addLink в третьем datasource на соответствующий addRange.

Не очень красиво, но работает.
Старый 22.01.2004, 14:19   #3  
xshaman is offline
xshaman
Участник
 
36 / 11 (1) +
Регистрация: 17.12.2003
Адрес: Санкт-Петербург
Привет,

а можно поподробнее, что значит на соотв. addRange? Точнее как в рейндж передавать значение соотв поля из мастер дата соурса?
PHP код:
    query = new Query();
    
qbds  query.addDataSource(tablenum(InventTrans));
    
qbr   qbds.addRange(FieldNum(InventTransItemId));
    
qbr   qbds.addRange(FieldNum(InventTransStatusReceipt));
    
qbr.value(Int2str(StatusReceipt::Ordered));
    
qbr.status(RangeStatus::Hidden);

    
qbdsInventBatch qbds.addDataSource(tableNum(InventBatch));
    
qbl qbdsInventBatch.addLink(FieldNum(InventTransItemId), FieldNum(InventBatchItemId));

    
qbdsInventDim qbdsInventBatch.addDataSource(tableNum(InventDim));
    
qbr           qbdsInventDim.addRange(FieldNum(InventDimInventDimId)); 
Старый 22.01.2004, 14:29   #4  
wavetrain is offline
wavetrain
Участник
 
11 / 10 (1) +
Регистрация: 15.08.2003
Адрес: Москва
Например так :

PHP код:
qbr.value(strfmt("%1 = %2.%3"fieldStr(InventDimInventDimId), qbds.name(), fieldStr(InventTransInventDimId)); 
Старый 22.01.2004, 14:49   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: QBDS проблема с тремя датасоурсами
Цитата:
Изначально опубликовано xshaman
Суть задачи сделать запрос в рантайме
Возможно я опять скажу не совсем то, что ожидалось.

Но я снова не понимаю, зачем вы так упорно программируете.
Сделайте query в AOT, назовите его myQuery, протестируйте.

Затем в коде напишите

PHP код:
query = new Query(querystr(MyQuery)); 
И все! Ну почему такая тяга к созданию кода?
Может я чего не понимаю?

И еще... вы выводите наименования товара в складские проводки?
не забудте, что наименования есть и в комбинациях складских аналитик. Наименование может быть разным для разных языков. Наименование может быть разным для разных клиентов/поставщиков.

Обратите внимание на метод InventTable::name(). В свете этого метода линковать inventTable не совсем правильно... Поскольку в ВАШЕМ запросе пользователь получит совсем не то наименование, которое будет выдано в документах.
За это сообщение автора поблагодарили: jeky (1).
Старый 22.01.2004, 15:00   #6  
xshaman is offline
xshaman
Участник
 
36 / 11 (1) +
Регистрация: 17.12.2003
Адрес: Санкт-Петербург
Огромное спасибо !
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с единицей измерения longson DAX: Программирование 4 16.07.2007 14:35
Проблема с созданием объекта Lelya DAX: Администрирование 33 27.06.2005 16:38
проблема отрицаний в QueryBuildRange kgksoft DAX: Программирование 2 21.06.2004 17:02
Проблема с Datasource Vpooh DAX: Программирование 0 25.05.2004 13:37
Проблема: русские шрифты в отчетах, формируемых на сервере. Anais DAX: Администрирование 3 17.11.2003 13:20

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

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

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