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 28.10.2009, 13:30   #1  
Silphidae ist offline
Silphidae
Участник
 
96 / 15 (1) ++
Registriert seit: 17.11.2008
Связь CustInvoiceJour и InventTrans
Добрый день

Прошу помочь разобраться с такой проблемой. Пытаюсь сделать такой запрос:
X++:
    Query q;
    QueryBuildDataSource qbdsCustInvoiceJour;
    QueryBuildDataSource qbdsInventTrans;
    QueryBuildRange      range;
    Str600               value;
    ;

    q = new Query();
    qbdsCustInvoiceJour = q.addDataSource(tableNum(CustInvoiceJour), "CJTable");
    qbdsCustInvoiceJour.addSelectionField(fieldNum(CustInvoiceJour, InvoiceAccount));
    qbdsCustInvoiceJour.addSelectionField(fieldNum(CustInvoiceJour, InvoiceId));
    qbdsCustInvoiceJour.addSelectionField(fieldNum(CustInvoiceJour, SalesId));
    range = qbdsCustInvoiceJour.addRange(fieldNum(CustInvoiceJour, InvoiceAccount));
    range.value("39");

    qbdsInventTrans = qbdsCustInvoiceJour.addDataSource(tableNum(InventTrans),"ITTable");
    qbdsInventTrans.addLink(fieldNum(CustInvoiceJour, InvoiceId),fieldNum(InventTrans, InvoiceId));
    qbdsInventTrans.addLink(fieldNum(CustInvoiceJour, SalesId), fieldNum(InventTrans, TransRefId));
    qbdsInventTrans.addSelectionField(fieldNum(InventTrans, RecId));
Т.е. просто выбираю запись из InventTrans с номером заказа на продажу и инвойсом как в таблице CustInvoiceJour.
Но это не работает. И проблема, как мне кажется в разных EDT у полей связи, хотя, по сути, они содержат одинаковую информацию.
Возможно, есть какой-то аналог LIKE для qbds или какой-нибудь статик_каст для преобразования типов?
Alt 28.10.2009, 13:33   #2  
raz ist offline
raz
NavAx
Benutzerbild von raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1.497 / 1096 (39) ++++++++
Registriert seit: 22.07.2003
Ort: МО
добавьте строки накладных, будет быстрее и заработает. проблема скопее всего в выравнивании TransRefId

CustInvoiceJour->CustInvoiceTrans->InventTrans
Alt 28.10.2009, 13:38   #3  
raz ist offline
raz
NavAx
Benutzerbild von raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1.497 / 1096 (39) ++++++++
Registriert seit: 22.07.2003
Ort: МО
X++:
    Query q;
    QueryBuildDataSource qbdsCustInvoiceJour;
    QueryBuildDataSource qbdsCustInvoiceTrans;
    QueryBuildDataSource qbdsInventTrans;
    QueryBuildRange      range;
    Str600               value;
    ;

    q = new Query();
    qbdsCustInvoiceJour = q.addDataSource(tableNum(CustInvoiceJour), "CJTable");
    qbdsCustInvoiceJour.addSelectionField(fieldNum(CustInvoiceJour, InvoiceAccount));
    qbdsCustInvoiceJour.addSelectionField(fieldNum(CustInvoiceJour, InvoiceId));
    qbdsCustInvoiceJour.addSelectionField(fieldNum(CustInvoiceJour, SalesId));
    range = qbdsCustInvoiceJour.addRange(fieldNum(CustInvoiceJour, InvoiceAccount));
    range.value("39");

    qbdsCustInvoiceTrans= qbdsCustInvoiceJour.addDataSource(tableNum(CustInvoiceTrans));
    qbdsCustInvoiceTrans.addLink(fieldNum(CustInvoiceJour, InvoiceId),fieldNum(CustInvoiceTrans, InvoiceId));
    qbdsCustInvoiceTrans.addLink(fieldNum(CustInvoiceJour, SalesId), fieldNum(CustInvoiceTrans, SalesId));
    qbdsCustInvoiceTrans.addLink(fieldNum(CustInvoiceJour, InvoiceDate), fieldNum(CustInvoiceTrans, InvoiceDate));
    qbdsCustInvoiceTrans.addLink(fieldNum(CustInvoiceJour, numberSequenceGroup), fieldNum(CustInvoiceTrans, numberSequenceGroup));

    qbdsInventTrans = qbdsCustInvoiceTrans.addDataSource(tableNum(InventTrans),"ITTable");
    qbdsInventTrans.addLink(fieldNum(qbdsCustInvoiceTrans, InventTransId),fieldNum(InventTrans, InventTransId));
    qbdsInventTrans.addLink(fieldNum(qbdsCustInvoiceTrans, InvoiceId),fieldNum(InventTrans, InvoiceId));
    qbdsInventTrans.addLink(fieldNum(qbdsCustInvoiceTrans, InvoiceDate),fieldNum(InventTrans, DateFinancial));
    qbdsInventTrans.addSelectionField(fieldNum(InventTrans, RecId));
This post has been rated by: Silphidae (1).
Alt 28.10.2009, 13:38   #4  
Silphidae ist offline
Silphidae
Участник
 
96 / 15 (1) ++
Registriert seit: 17.11.2008
Zitat:
добавьте строки накладных, будет быстрее и заработает. проблема скопее всего в выравнивании TransRefId
CustInvoiceJour->CustInvoiceTrans->InventTrans
Спасибо, raz
К сожалению, такой вариант не рассматривается, ибо я решаю обратную задачу - нужно CustInvoiceJour->InventTrans->CustInvoiceTrans
Alt 28.10.2009, 14:50   #5  
SRF ist offline
SRF
Участник
MCBMSS
Axapta Retail User
 
376 / 562 (19) +++++++
Registriert seit: 08.08.2007
Blog-Einträge: 1
? CustInvoiceJour.LedgerVoucher == InventTrans.Voucher
Добрый день!

Попробуйте вместо строки
X++:
qbdsInventTrans.addLink(fieldNum(CustInvoiceJour, SalesId), fieldNum(InventTrans, TransRefId));
строку
X++:
qbdsInventTrans.addLink(fieldNum(CustInvoiceJour, LedgerVoucher), fieldNum(InventTrans, Voucher));
P.S. Точно не уверен, что будет работать во всех вариантах, нужно тестировать. Еще также желательно добавить индекс по полю Voucher.
__________________
Sergey Nefedov

Geändert von SRF (28.10.2009 um 14:52 Uhr)
This post has been rated by: Silphidae (1).
Alt 28.10.2009, 14:54   #6  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
можно через Voucher + DateFinancial = LederVoucher + InvoiceDate
но это очень тяжелый вариант, так как поля неиндексированы.

В качестве альтернативы можно через SalesLine
CustInvoiceJour -> SalesId
SalesLine -> InventTransId
InventTrans (InvoiceId)
This post has been rated by: mazzy (-2), Silphidae (1).
Alt 28.10.2009, 15:27   #7  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3.985 / 3273 (117) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Zitat:
Zitat von raz Beitrag anzeigen
проблема скопее всего в выравнивании TransRefId
Нее. У них же общий предок Num.
Alt 28.10.2009, 17:23   #8  
Silphidae ist offline
Silphidae
Участник
 
96 / 15 (1) ++
Registriert seit: 17.11.2008
Спасибо всем.
Пожалуй, буду использовать вариант через SalesLine.

Однако для образования хотелось бы узнать, есть ли способ насильно преобразовывать типы. И есть ли возможность писать like в qbds.
Alt 28.10.2009, 17:28   #9  
lev ist offline
lev
Ищущий знания...
Benutzerbild von lev
Oracle
MCBMSS
Axapta Retail User
 
1.723 / 491 (20) +++++++
Registriert seit: 18.01.2005
Ort: Москва
Zitat:
Zitat von Silphidae Beitrag anzeigen
Спасибо всем.
Пожалуй, буду использовать вариант через SalesLine.

Однако для образования хотелось бы узнать, есть ли способ насильно преобразовывать типы. И есть ли возможность писать like в qbds.
вот пример вставки LIKE:
X++:
Query                   query = new Query();
    QueryBuildDataSource    qbds;
    str                                 itemLike = 'Ном';
    ;

    qbds = query.addDataSource(tablenum(InventTable));
    qbds.addRange(fieldNum(InventTable, ItemId)).value(strFmt('*%1*', itemLike));

    info(qbds.toString());
а про приобразование каких типов вы имеете ввиду?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
This post has been rated by: Silphidae (1).
Alt 28.10.2009, 17:36   #10  
lev ist offline
lev
Ищущий знания...
Benutzerbild von lev
Oracle
MCBMSS
Axapta Retail User
 
1.723 / 491 (20) +++++++
Registriert seit: 18.01.2005
Ort: Москва
почему я спросил про какие типы идет речь...
в стандарте есть много всяких функций преобразования типа (num2str(), str2date(), any2real() и т.д.и т.п)
или вы про какое то другое преобразование?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Alt 28.10.2009, 18:01   #11  
Lemming ist offline
Lemming
Участник
Benutzerbild von Lemming
 
1.144 / 343 (14) ++++++
Registriert seit: 20.04.2004
Ort: Москва, Чайнатаун в Люблино
Blog-Einträge: 10
Thumbs down
Zitat:
Zitat von Silphidae Beitrag anzeigen
Спасибо всем.
Пожалуй, буду использовать вариант через SalesLine.
Блеск...связываем транзакции через строки "черновика", которые можно и изменить, и вообще удалить
This post has been rated by: mazzy (2).
Alt 28.10.2009, 18:33   #12  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
2 Lemming
Zitat:
Zitat von Silphidae Beitrag anzeigen
К сожалению, ... я решаю обратную задачу - нужно CustInvoiceJour->InventTrans->CustInvoiceTrans
Какова задача, таково и решение
Alt 28.10.2009, 18:40   #13  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von Silphidae Beitrag anzeigen
Пожалуй, буду использовать вариант через SalesLine
Ни в коем случае!!!!

Потому что Lemming правильно написал:
Zitat:
Zitat von Lemming Beitrag anzeigen
...через строки "черновика", которые можно и изменить, и вообще удалить
Zitat:
Zitat von Wamr Beitrag anzeigen
В качестве альтернативы можно через SalesLine
CustInvoiceJour -> SalesId
SalesLine -> InventTransId
InventTrans (InvoiceId)
Wamr, ну разве ж так можно?
"Кто соблазнит одного из малых сих, тому лучше было бы, если бы повесили ему жерновный камень на шею и бросили его в море"
__________________
полезное на axForum, github, vk, coub.
This post has been rated by: Silphidae (1).
Alt 28.10.2009, 18:52   #14  
Lemming ist offline
Lemming
Участник
Benutzerbild von Lemming
 
1.144 / 343 (14) ++++++
Registriert seit: 20.04.2004
Ort: Москва, Чайнатаун в Люблино
Blog-Einträge: 10
Thumbs down
Zitat:
Zitat von Wamr Beitrag anzeigen
2 Lemming
Какова задача, таково и решение
Zitat:
Zitat von Wamr Beitrag anzeigen
CustInvoiceJour -> SalesId
SalesLine -> InventTransId
InventTrans (InvoiceId)
Более того, Вы представляете как будет тормозить такое решение на большом кол-ве заказов, инвойсов и складских операций? Вообще абсурд какой-то: стучаться из шапки инвойсов, в строки, через две таблы, наполненные немалым кол-вом данных! Лучше пусть тредстартер конкретизирует задачу, возможно он зашел к решению совсем не с той стороны.
This post has been rated by: Silphidae (1).
Alt 29.10.2009, 11:01   #15  
Silphidae ist offline
Silphidae
Участник
 
96 / 15 (1) ++
Registriert seit: 17.11.2008
Zitat:
или вы про какое то другое преобразование?
В с++ были такие вещи как static_cast и dynamic_cast. Вот интересно, есть ли аналоги в х++.
Хотя, конечно, к данной теме это не относится.

Zitat:
Лучше пусть тредстартер конкретизирует задачу, возможно он зашел к решению совсем не с той стороны.
Вполне возможно.. Далается запрос CustInvoiceJour->CustInvoiceTrans->InventItemAndClass, в котором накладываются фильтры по клиентам, датам и узлам классификатора. Нужно еще вкорячить фильтр по складу. Проблема в том, что CustInvoiceTrans группируется по ItemId - и считает сумму по InventQty и LineAmount - тем самым InventDimId из CustInvoiceTrans уже не взять, вот я и хотел перед этим вставить InventTrans, чтобы там делать фильтр по складу.
Alt 29.10.2009, 11:30   #16  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.448 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Zitat:
Zitat von Silphidae Beitrag anzeigen
Проблема в том, что CustInvoiceTrans группируется по ItemId - и считает сумму по InventQty и LineAmount.
Не понял, как наличие группировки может помешать добавить ограничение?
Zitat:
Zitat von Silphidae Beitrag anzeigen
InventDimId из CustInvoiceTrans уже не взять
Это почему же?

Вот такая конструкция
X++:
select sum(InventQty), sum(LineAmount) from CustInvoiceTrans 
exists join InventDim
where
    InventDim.InventDimId == CustInvoiceTrans.InventDimId &&
    InventDim.InventLocationId == "..."
прекрасно справляется с вашей задачей
This post has been rated by: Silphidae (1).
Alt 29.10.2009, 11:35   #17  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
mazzy, Lemming, ну конечно нельзя, ну конечно тормоза, понятно что это ИЗВРАТ
но, если потеряна связь CustInvoiceJour - CustInvoiceTrans или кто-то удалил CustInvoiceTrans
и надо это починить - то можно как угодно
видимо с задачей я не угадал
This post has been rated by: DSPIC (2), Silphidae (1).
Alt 29.10.2009, 11:38   #18  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
Все-таки raz был прав
Zitat:
Zitat von raz Beitrag anzeigen
добавьте строки накладных, будет быстрее и заработает. проблема скопее всего в выравнивании TransRefId

CustInvoiceJour->CustInvoiceTrans->InventTrans
-> InventDim и фильтруй себе по складу
Alt 29.10.2009, 11:55   #19  
ice ist offline
ice
Участник
Benutzerbild von ice
Лучший по профессии 2014
 
1.821 / 402 (17) +++++++
Registriert seit: 23.03.2006
Zitat:
Zitat von Silphidae Beitrag anzeigen
Далается запрос CustInvoiceJour->CustInvoiceTrans->InventItemAndClass, в котором накладываются фильтры по клиентам, датам и узлам классификатора. Нужно еще вкорячить фильтр по складу. Проблема в том, что CustInvoiceTrans группируется по ItemId - и считает сумму по InventQty и LineAmount - тем самым InventDimId из CustInvoiceTrans уже не взять, вот я и хотел перед этим вставить InventTrans, чтобы там делать фильтр по складу.
все фильтры выполняюстя в запросе до того как происходит группировка
This post has been rated by: Silphidae (1).
Alt 29.10.2009, 15:18   #20  
Silphidae ist offline
Silphidae
Участник
 
96 / 15 (1) ++
Registriert seit: 17.11.2008
Zitat:
все фильтры выполняюстя в запросе до того как происходит группировка
Я думал, что фильтры кладутся после группировки - поэтому и городил огород.

Спасибо за ответы. Прошу прощения за глупые вопросы.
Но вот если бы я не спросил, кто знает, когда бы я дошел до этого знания - так что не ругайте сильно.
Stichworte
связь таблиц

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
InventTransIdReturn и Закрытие склада DenisS DAX: Программирование 15 03.12.2008 09:02
Достаточно ли изменить дату в таблицах inventTrans, inventTransPosting, VendPackingSlipJour? DmitryS DAX: Программирование 3 18.09.2008 14:37
Как правильно достучаться из InventTrans до даты накладыной NJD DAX: Программирование 6 22.07.2005 20:52
Связь таблиц InventTrans и PurchLine Pustik DAX: Программирование 2 25.11.2004 12:23
Ошибка при связывании InventTrans и InventJournaTable LCh DAX: Программирование 2 30.05.2004 15:22

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 21:56 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.