AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 02.09.2003, 18:02   #1  
raz ist offline
raz
NavAx
Benutzerbild von raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1.500 / 1098 (40) ++++++++
Registriert seit: 22.07.2003
Ort: МО
Помогите разобраться с QueryBuildDataSource
Создаю Lookup метод, для выбора из InventTrans токого TransRefId, который соответсвует таблицам: SalesTable или PurchTable. Т.е. необходимо показать записи, только по этим двум таблицам, остальные не нужны.

В форме один датасорс ссылающийся на таблицу InventTrans.

У него я перекрыл метод Init.
PHP-Code:
public void init()
{
    
Query                   query;
    
QueryBuildDataSource    qbds_InventTrans;
    
QueryBuildDataSource    qbds_SalesTable;
    
QueryBuildDataSource    qbds_PurchTable;
    
QueryBuildDataSource    qbds_InventJournalTable;
    ;

    
super();

    
Query = new Query();

    
qbds_InventTrans Query.addDataSource(tablenum(InventTrans));

    
qbds_SalesTable qbds_InventTrans.addDataSource(tablenum(SalesTable));
    
qbds_SalesTable.joinMode(JoinMode::ExistsJoin);
    
qbds_SalesTable.fetchMode(0);

    
qbds_PurchTable qbds_InventTrans.addDataSource(tablenum(PurchTable));
    
qbds_PurchTable.joinMode(JoinMode::ExistsJoin);
    
qbds_PurchTable.fetchMode(0);

    
qbds_PurchTable.addLink(FieldNum(InventTrans,TransRefId),fieldNum(PurchTable,PurchId));
    
qbds_SalesTable.addLink(FieldNum(InventTrans,TransRefId),fieldNum(SalesTable,SalesId));

    
this.query(Query);

В результате пустой грид, если оставить один присоединенный датасорс, то видно только относящиеся к нему записи.

Что я делаю не правильно?
Alt 03.09.2003, 06:38   #2  
Andrew Besedin ist offline
Andrew Besedin
Участник
 
121 / 15 (1) ++
Registriert seit: 25.01.2002
Привет!
Вот твой SQL - запрос:
PHP-Code:
SELECT FROM InventTrans 
           EXISTS JOIN 
FROM SalesTable WHERE InventTrans.TransRefId SalesTable.SalesId 
           EXISTS JOIN 
FROM PurchTable WHERE InventTrans.TransRefId PurchTable.PurchId 
Если его написать на Х++, то вернется пустое множество.

А правильный запрос будет такой (на Х++). На TransType внимание не обращай - это не суть:
PHP-Code:
while select InventTrans
    exists join salesTable
        exists join purchTable
                where 
(InventTrans.TransRefId == salesTable.SalesId && InventTrans.TransType == InventTransType::Sales)
                 ||   ( 
InventTrans.TransRefId  == purchTable.PurchId && InventTrans.TransType == InventTransType::Purch)
    print 
InventTrans.ItemId
...Но как "выразить" этот селект на языке QBDS - я затрудняюсь...
__________________
С уважением,
Андрей Беседин
Alt 03.09.2003, 09:12   #3  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
Проще надо быть
для выбора из InventTrans токого TransRefId, который соответсвует таблицам хватит такого запроса
PHP-Code:
select InventTrans 
  where InventTrans
.TransType == InventTransType::Sales ||
              
InventTrans.TransType == InventTransType::Purch

// или 
qbds.addRange(fieldNum(InventTransTransType)).value(queryValue(InventTransType::Sales) + "," queryValue(InventTransType::Purch)); 
но тормоза обеспечены
Alt 03.09.2003, 10:00   #4  
raz ist offline
raz
NavAx
Benutzerbild von raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1.500 / 1098 (40) ++++++++
Registriert seit: 22.07.2003
Ort: МО
2 Wamr

Спасибо, но интересует именно мой вопрос.

Т.к. таблица InventTrans общая для нескольких компаний, и меня интересуют записи только текущей компании.
Alt 03.09.2003, 14:56   #5  
raz ist offline
raz
NavAx
Benutzerbild von raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1.500 / 1098 (40) ++++++++
Registriert seit: 22.07.2003
Ort: МО
Вижу идей больше нет.

Тогда может кто нибудь подскажет, как у датасорса подменить курсор?
Alt 04.09.2003, 08:02   #6  
Andrew Besedin ist offline
Andrew Besedin
Участник
 
121 / 15 (1) ++
Registriert seit: 25.01.2002
Привет raz!

Вот работающий код:
PHP-Code:
public void init()
{
    
Query                   query;
    
QueryBuildDataSource    qbds_InventTrans;
    
QueryBuildDataSource    qbds_SalesTable;
    
QueryBuildDataSource    qbds_PurchTable;
    
QueryBuildDataSource    qbds_InventJournalTable;
    
SalesTable SalesTable;
    ;
    
super();
    
Query = new Query();
    
qbds_InventTrans Query.addDataSource(tablenum(InventTrans),"it");

    
qbds_PurchTable qbds_InventTrans.addDataSource(tablenum(PurchTable),"_pt");
    
qbds_PurchTable.joinMode(JoinMode::ExistsJoin);
    
qbds_PurchTable.fetchMode(0);
    
qbds_PurchTable.relations(false);

    
qbds_SalesTable qbds_InventTrans.addDataSource(tablenum(SalesTable),"st");
    
qbds_SalesTable.joinMode(JoinMode::ExistsJoin);
    
qbds_SalesTable.fetchMode(0);
    
qbds_InventTrans.relations(false);

    
qbds_SalesTable.addRange(fieldnum(SalesTable,salesID)).value("( (iT.transRefID == sT.salesID) || (iT.transRefID == _pT.purchID) )");

    
this.query(Query);
    
Info(this.query().dataSourceNo(1).tostring());

Идею подсказал Денис Федотенко, когда делился "стратегическим знанием"
вот ссылка на его постинг:http://www.axforum.info/forums/showt...=1634#post1634

Вопрос по ходу: что за волшебный идентификатор такой "pt" - из-за него не работало нифига...
__________________
С уважением,
Андрей Беседин
This post has been rated by: raz (3).
Alt 04.09.2003, 09:02   #7  
raz ist offline
raz
NavAx
Benutzerbild von raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1.500 / 1098 (40) ++++++++
Registriert seit: 22.07.2003
Ort: МО
2 Andrew Besedin

Спасибо!!!
Все работает!!!

А я уже хотел делать с дополнительным контролом ComboBox, для предварительного выбора Заказ, Закупка, Журнал.
Alt 04.09.2003, 09:43   #8  
raz ist offline
raz
NavAx
Benutzerbild von raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1.500 / 1098 (40) ++++++++
Registriert seit: 22.07.2003
Ort: МО
Странное дело, немного модифицировал метод inti, что бы добавить выбор складских журналов и ...

Именно журналы не показываются, а закупки и заказы видны.

Не пойму в чем дело.

PHP-Code:
public void init()
{
    
Query                   query;
    
QueryBuildDataSource    qbds_InventTrans;
    
QueryBuildDataSource    qbds_SalesTable;
    
QueryBuildDataSource    qbds_PurchTable;
    
QueryBuildDataSource    qbds_InventJournalTable;
    ;
    
super();
    
Query = new Query();
    
qbds_InventTrans Query.addDataSource(tablenum(InventTrans),"_InventTrans");

    
qbds_PurchTable qbds_InventTrans.addDataSource(tablenum(PurchTable),"_PurchTable");
    
qbds_PurchTable.joinMode(JoinMode::ExistsJoin);
    
qbds_PurchTable.fetchMode(0);
    
qbds_PurchTable.relations(false);

    
qbds_SalesTable qbds_InventTrans.addDataSource(tablenum(SalesTable),"_SalesTable");
    
qbds_SalesTable.joinMode(JoinMode::ExistsJoin);
    
qbds_SalesTable.fetchMode(0);
    
qbds_InventTrans.relations(false);

    
qbds_InventJournalTable qbds_InventTrans.addDataSource(tablenum(InventJournalTable),"_InventJournalTable");
    
qbds_InventJournalTable.joinMode(JoinMode::ExistsJoin);
    
qbds_InventJournalTable.fetchMode(0);
    
qbds_InventTrans.relations(false);

    
qbds_InventJournalTable.addRange(fieldnum(InventJournalTable,JournalId)).value("( (_InventTrans.TransRefId == _SalesTable.SalesId) ||" +
                                                                                   
" (_InventTrans.TransRefId == _PurchTable.PurchId) ||" +
                                                                                   
" (_InventTrans.TransRefId == _InventJournalTable.JournalId) )");


    
this.query(Query);

//    Info(this.query().dataSourceNo(1).tostring()); 
//   SELECT * FROM InventTrans EXISTS JOIN * FROM PurchTable EXISTS JOIN * FROM SalesTable EXISTS JOIN * FROM InventJournalTable WHERE ((( (_InventTrans.TransRefId == _SalesTable.SalesId) || (_InventTrans.TransRefId == _PurchTable.PurchId) || (_InventTrans.TransRefId == _InventJournalTable.JournalId) )))

Alt 04.09.2003, 11:26   #9  
Andrew Besedin ist offline
Andrew Besedin
Участник
 
121 / 15 (1) ++
Registriert seit: 25.01.2002
Привет Raz!

...Интере-е-есные вопросы задаешь, однако
Т.к. нормальные герои всегда идут в обход - предлагаю связать InventTrans с InventJournalTrans по полю InventTransID.
Работает гарантировано и решает твою задачу!
__________________
С уважением,
Андрей Беседин
Alt 04.09.2003, 11:33   #10  
dn ist offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Registriert seit: 26.03.2003
Ort: Москва
Может быть поэтому:
InventTransRefId: string size 20, Adjustment Right
InventJournalId: string size 10, Adjustment Right
Alt 04.09.2003, 12:03   #11  
Andrew Besedin ist offline
Andrew Besedin
Участник
 
121 / 15 (1) ++
Registriert seit: 25.01.2002
Привет Эдуард!

PHP-Code:
public void init()
{
    
Query                   query;
    
QueryBuildDataSource    qbds_InventTrans;
    
QueryBuildDataSource    qbds_SalesTable;
    
QueryBuildDataSource    qbds_PurchTable;
    
QueryBuildDataSource    qbds_InventJournalTrans;
    ;
    
super();
    
Query = new Query();
    
qbds_InventTrans Query.addDataSource(tablenum(InventTrans),"it");
    
qbds_InventTrans.relations(false);


    
qbds_PurchTable qbds_InventTrans.addDataSource(tablenum(PurchTable),"_PT");
    
qbds_PurchTable.joinMode(JoinMode::ExistsJoin);
    
qbds_PurchTable.fetchMode(0);
    
qbds_PurchTable.relations(false);

    
qbds_SalesTable qbds_InventTrans.addDataSource(tablenum(SalesTable),"_ST");
    
qbds_SalesTable.joinMode(JoinMode::ExistsJoin);
    
qbds_SalesTable.fetchMode(0);
    
qbds_SalesTable.relations(false);

    
qbds_InventJournalTrans qbds_InventTrans.addDataSource(tablenum(InventJournalTrans),"ijt");
    
qbds_InventJournalTrans.joinMode(JoinMode::ExistsJoin);
    
qbds_InventJournalTrans.fetchMode(0);

    
qbds_InventJournalTrans.relations(false);

    
qbds_InventJournalTrans.addRange(fieldnum(InventJournalTrans,journalID)).value("( (iT.transRefID == _sT.salesID) || (iT.transRefID == _pT.purchID) || (it.InventTransID == ijt.InventTransID) )");
    
this.query(Query);

    
Info(this.query().dataSourceNo(1).tostring());

2 DN
Ты абсолютно прав насчет разных длин у EDT. Поэтому селект будет такой:
PHP-Code:
static void Job4(Args _args)
{

InventJournalTable InventJournalTable;
InventTrans InventTrans;

while 
select InventTrans
   join InventJournalTable
    where InventTrans
.TransRefId like /*!!! Равенство не работает!!!*/ InventJournalTable.JournalId
        
print InventTrans.TransRefId;
pause;

Но как этот LIKE затолкать в QBDS - хто бы знал
__________________
С уважением,
Андрей Беседин
Stichworte
query, программно

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Помогите разобраться с лукапом Dimitry DAX: Программирование 14 20.09.2008 10:04
вопрос про дату в range. помогите разобраться. Hans DAX: Программирование 5 24.04.2007 17:52
Помогите разобраться с edit-методом mashaSi DAX: Программирование 4 08.06.2006 07:19
Помогите разобраться с отчетностью Vansoft DAX: Функционал 2 12.04.2004 03:06
Журналы, пакеты... Помогите разобраться! dmit2604 DAX: Функционал 1 07.05.2002 21:53

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 12:19 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.