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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.10.2009, 13:30   #1  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 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 или какой-нибудь статик_каст для преобразования типов?
Старый 28.10.2009, 13:33   #2  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,490 / 1060 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
добавьте строки накладных, будет быстрее и заработает. проблема скопее всего в выравнивании TransRefId

CustInvoiceJour->CustInvoiceTrans->InventTrans
Старый 28.10.2009, 13:38   #3  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,490 / 1060 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
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));
За это сообщение автора поблагодарили: Silphidae (1).
Старый 28.10.2009, 13:38   #4  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Цитата:
добавьте строки накладных, будет быстрее и заработает. проблема скопее всего в выравнивании TransRefId
CustInvoiceJour->CustInvoiceTrans->InventTrans
Спасибо, raz
К сожалению, такой вариант не рассматривается, ибо я решаю обратную задачу - нужно CustInvoiceJour->InventTrans->CustInvoiceTrans
Старый 28.10.2009, 14:50   #5  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
365 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 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

Последний раз редактировалось SRF; 28.10.2009 в 14:52.
За это сообщение автора поблагодарили: Silphidae (1).
Старый 28.10.2009, 14:54   #6  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
можно через Voucher + DateFinancial = LederVoucher + InvoiceDate
но это очень тяжелый вариант, так как поля неиндексированы.

В качестве альтернативы можно через SalesLine
CustInvoiceJour -> SalesId
SalesLine -> InventTransId
InventTrans (InvoiceId)
За это сообщение автора поблагодарили: mazzy (-2), Silphidae (1).
Старый 28.10.2009, 15:27   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,882 / 3148 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от raz Посмотреть сообщение
проблема скопее всего в выравнивании TransRefId
Нее. У них же общий предок Num.
Старый 28.10.2009, 17:23   #8  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Спасибо всем.
Пожалуй, буду использовать вариант через SalesLine.

Однако для образования хотелось бы узнать, есть ли способ насильно преобразовывать типы. И есть ли возможность писать like в qbds.
Старый 28.10.2009, 17:28   #9  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Silphidae Посмотреть сообщение
Спасибо всем.
Пожалуй, буду использовать вариант через 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());
а про приобразование каких типов вы имеете ввиду?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: Silphidae (1).
Старый 28.10.2009, 17:36   #10  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
почему я спросил про какие типы идет речь...
в стандарте есть много всяких функций преобразования типа (num2str(), str2date(), any2real() и т.д.и т.п)
или вы про какое то другое преобразование?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 28.10.2009, 18:01   #11  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Thumbs down
Цитата:
Сообщение от Silphidae Посмотреть сообщение
Спасибо всем.
Пожалуй, буду использовать вариант через SalesLine.
Блеск...связываем транзакции через строки "черновика", которые можно и изменить, и вообще удалить
За это сообщение автора поблагодарили: mazzy (2).
Старый 28.10.2009, 18:33   #12  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
2 Lemming
Цитата:
Сообщение от Silphidae Посмотреть сообщение
К сожалению, ... я решаю обратную задачу - нужно CustInvoiceJour->InventTrans->CustInvoiceTrans
Какова задача, таково и решение
Старый 28.10.2009, 18:40   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Silphidae Посмотреть сообщение
Пожалуй, буду использовать вариант через SalesLine
Ни в коем случае!!!!

Потому что Lemming правильно написал:
Цитата:
Сообщение от Lemming Посмотреть сообщение
...через строки "черновика", которые можно и изменить, и вообще удалить
Цитата:
Сообщение от Wamr Посмотреть сообщение
В качестве альтернативы можно через SalesLine
CustInvoiceJour -> SalesId
SalesLine -> InventTransId
InventTrans (InvoiceId)
Wamr, ну разве ж так можно?
"Кто соблазнит одного из малых сих, тому лучше было бы, если бы повесили ему жерновный камень на шею и бросили его в море"
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: Silphidae (1).
Старый 28.10.2009, 18:52   #14  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Thumbs down
Цитата:
Сообщение от Wamr Посмотреть сообщение
2 Lemming
Какова задача, таково и решение
Цитата:
Сообщение от Wamr Посмотреть сообщение
CustInvoiceJour -> SalesId
SalesLine -> InventTransId
InventTrans (InvoiceId)
Более того, Вы представляете как будет тормозить такое решение на большом кол-ве заказов, инвойсов и складских операций? Вообще абсурд какой-то: стучаться из шапки инвойсов, в строки, через две таблы, наполненные немалым кол-вом данных! Лучше пусть тредстартер конкретизирует задачу, возможно он зашел к решению совсем не с той стороны.
За это сообщение автора поблагодарили: Silphidae (1).
Старый 29.10.2009, 11:01   #15  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Цитата:
или вы про какое то другое преобразование?
В с++ были такие вещи как static_cast и dynamic_cast. Вот интересно, есть ли аналоги в х++.
Хотя, конечно, к данной теме это не относится.

Цитата:
Лучше пусть тредстартер конкретизирует задачу, возможно он зашел к решению совсем не с той стороны.
Вполне возможно.. Далается запрос CustInvoiceJour->CustInvoiceTrans->InventItemAndClass, в котором накладываются фильтры по клиентам, датам и узлам классификатора. Нужно еще вкорячить фильтр по складу. Проблема в том, что CustInvoiceTrans группируется по ItemId - и считает сумму по InventQty и LineAmount - тем самым InventDimId из CustInvoiceTrans уже не взять, вот я и хотел перед этим вставить InventTrans, чтобы там делать фильтр по складу.
Старый 29.10.2009, 11:30   #16  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Silphidae Посмотреть сообщение
Проблема в том, что CustInvoiceTrans группируется по ItemId - и считает сумму по InventQty и LineAmount.
Не понял, как наличие группировки может помешать добавить ограничение?
Цитата:
Сообщение от Silphidae Посмотреть сообщение
InventDimId из CustInvoiceTrans уже не взять
Это почему же?

Вот такая конструкция
X++:
select sum(InventQty), sum(LineAmount) from CustInvoiceTrans 
exists join InventDim
where
    InventDim.InventDimId == CustInvoiceTrans.InventDimId &&
    InventDim.InventLocationId == "..."
прекрасно справляется с вашей задачей
За это сообщение автора поблагодарили: Silphidae (1).
Старый 29.10.2009, 11:35   #17  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
mazzy, Lemming, ну конечно нельзя, ну конечно тормоза, понятно что это ИЗВРАТ
но, если потеряна связь CustInvoiceJour - CustInvoiceTrans или кто-то удалил CustInvoiceTrans
и надо это починить - то можно как угодно
видимо с задачей я не угадал
За это сообщение автора поблагодарили: DSPIC (2), Silphidae (1).
Старый 29.10.2009, 11:38   #18  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Все-таки raz был прав
Цитата:
Сообщение от raz Посмотреть сообщение
добавьте строки накладных, будет быстрее и заработает. проблема скопее всего в выравнивании TransRefId

CustInvoiceJour->CustInvoiceTrans->InventTrans
-> InventDim и фильтруй себе по складу
Старый 29.10.2009, 11:55   #19  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,690 / 405 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от Silphidae Посмотреть сообщение
Далается запрос CustInvoiceJour->CustInvoiceTrans->InventItemAndClass, в котором накладываются фильтры по клиентам, датам и узлам классификатора. Нужно еще вкорячить фильтр по складу. Проблема в том, что CustInvoiceTrans группируется по ItemId - и считает сумму по InventQty и LineAmount - тем самым InventDimId из CustInvoiceTrans уже не взять, вот я и хотел перед этим вставить InventTrans, чтобы там делать фильтр по складу.
все фильтры выполняюстя в запросе до того как происходит группировка
За это сообщение автора поблагодарили: Silphidae (1).
Старый 29.10.2009, 15:18   #20  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Цитата:
все фильтры выполняюстя в запросе до того как происходит группировка
Я думал, что фильтры кладутся после группировки - поэтому и городил огород.

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

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:08.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.