28.10.2009, 13:30 | #1 |
Участник
|
Связь 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)); Но это не работает. И проблема, как мне кажется в разных EDT у полей связи, хотя, по сути, они содержат одинаковую информацию. Возможно, есть какой-то аналог LIKE для qbds или какой-нибудь статик_каст для преобразования типов? |
|
28.10.2009, 13:33 | #2 |
NavAx
|
добавьте строки накладных, будет быстрее и заработает. проблема скопее всего в выравнивании TransRefId
CustInvoiceJour->CustInvoiceTrans->InventTrans |
|
28.10.2009, 13:38 | #3 |
NavAx
|
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 |
Участник
|
Цитата:
добавьте строки накладных, будет быстрее и заработает. проблема скопее всего в выравнивании TransRefId
CustInvoiceJour->CustInvoiceTrans->InventTrans К сожалению, такой вариант не рассматривается, ибо я решаю обратную задачу - нужно CustInvoiceJour->InventTrans->CustInvoiceTrans |
|
28.10.2009, 14:50 | #5 |
Участник
|
CustInvoiceJour.LedgerVoucher == InventTrans.Voucher
Добрый день!
Попробуйте вместо строки X++: qbdsInventTrans.addLink(fieldNum(CustInvoiceJour, SalesId), fieldNum(InventTrans, TransRefId)); X++: qbdsInventTrans.addLink(fieldNum(CustInvoiceJour, LedgerVoucher), fieldNum(InventTrans, Voucher));
__________________
Sergey Nefedov Последний раз редактировалось SRF; 28.10.2009 в 14:52. |
|
|
За это сообщение автора поблагодарили: Silphidae (1). |
28.10.2009, 14:54 | #6 |
----------------
|
можно через Voucher + DateFinancial = LederVoucher + InvoiceDate
но это очень тяжелый вариант, так как поля неиндексированы. В качестве альтернативы можно через SalesLine CustInvoiceJour -> SalesId SalesLine -> InventTransId InventTrans (InvoiceId) |
|
|
За это сообщение автора поблагодарили: mazzy (-2), Silphidae (1). |
28.10.2009, 15:27 | #7 |
Участник
|
|
|
28.10.2009, 17:23 | #8 |
Участник
|
Спасибо всем.
Пожалуй, буду использовать вариант через SalesLine. Однако для образования хотелось бы узнать, есть ли способ насильно преобразовывать типы. И есть ли возможность писать like в qbds. |
|
28.10.2009, 17:28 | #9 |
Ищущий знания...
|
Цитата:
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 |
Ищущий знания...
|
почему я спросил про какие типы идет речь...
в стандарте есть много всяких функций преобразования типа (num2str(), str2date(), any2real() и т.д.и т.п) или вы про какое то другое преобразование?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
28.10.2009, 18:01 | #11 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
28.10.2009, 18:33 | #12 |
----------------
|
|
|
28.10.2009, 18:40 | #13 |
Участник
|
Ни в коем случае!!!!
Потому что Lemming правильно написал: Цитата:
Цитата:
"Кто соблазнит одного из малых сих, тому лучше было бы, если бы повесили ему жерновный камень на шею и бросили его в море" |
|
|
За это сообщение автора поблагодарили: Silphidae (1). |
28.10.2009, 18:52 | #14 |
Участник
|
Более того, Вы представляете как будет тормозить такое решение на большом кол-ве заказов, инвойсов и складских операций? Вообще абсурд какой-то: стучаться из шапки инвойсов, в строки, через две таблы, наполненные немалым кол-вом данных! Лучше пусть тредстартер конкретизирует задачу, возможно он зашел к решению совсем не с той стороны.
|
|
|
За это сообщение автора поблагодарили: Silphidae (1). |
29.10.2009, 11:01 | #15 |
Участник
|
Цитата:
или вы про какое то другое преобразование?
Хотя, конечно, к данной теме это не относится. Цитата:
Лучше пусть тредстартер конкретизирует задачу, возможно он зашел к решению совсем не с той стороны.
|
|
29.10.2009, 11:30 | #16 |
Участник
|
Цитата:
Это почему же? Вот такая конструкция 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 |
----------------
|
mazzy, Lemming, ну конечно нельзя, ну конечно тормоза, понятно что это ИЗВРАТ
но, если потеряна связь CustInvoiceJour - CustInvoiceTrans или кто-то удалил CustInvoiceTrans и надо это починить - то можно как угодно видимо с задачей я не угадал |
|
|
За это сообщение автора поблагодарили: DSPIC (2), Silphidae (1). |
29.10.2009, 11:38 | #18 |
----------------
|
|
|
29.10.2009, 11:55 | #19 |
Участник
|
Цитата:
Сообщение от Silphidae
Далается запрос CustInvoiceJour->CustInvoiceTrans->InventItemAndClass, в котором накладываются фильтры по клиентам, датам и узлам классификатора. Нужно еще вкорячить фильтр по складу. Проблема в том, что CustInvoiceTrans группируется по ItemId - и считает сумму по InventQty и LineAmount - тем самым InventDimId из CustInvoiceTrans уже не взять, вот я и хотел перед этим вставить InventTrans, чтобы там делать фильтр по складу.
|
|
|
За это сообщение автора поблагодарили: Silphidae (1). |
29.10.2009, 15:18 | #20 |
Участник
|
Цитата:
все фильтры выполняюстя в запросе до того как происходит группировка
Спасибо за ответы. Прошу прощения за глупые вопросы. Но вот если бы я не спросил, кто знает, когда бы я дошел до этого знания - так что не ругайте сильно. |
|
Теги |
связь таблиц |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|