|
|
#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 или какой-нибудь статик_каст для преобразования типов? |
|
|
|
|
#2 |
|
NavAx
|
добавьте строки накладных, будет быстрее и заработает. проблема скопее всего в выравнивании TransRefId
CustInvoiceJour->CustInvoiceTrans->InventTrans |
|
|
|
|
#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). | |
|
|
#4 |
|
Участник
|
Цитата:
добавьте строки накладных, будет быстрее и заработает. проблема скопее всего в выравнивании TransRefId
CustInvoiceJour->CustInvoiceTrans->InventTrans К сожалению, такой вариант не рассматривается, ибо я решаю обратную задачу - нужно CustInvoiceJour->InventTrans->CustInvoiceTrans |
|
|
|
|
#5 |
|
Участник
|
Добрый день!
Попробуйте вместо строки 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). | |
|
|
#6 |
|
----------------
|
можно через Voucher + DateFinancial = LederVoucher + InvoiceDate
но это очень тяжелый вариант, так как поля неиндексированы. В качестве альтернативы можно через SalesLine CustInvoiceJour -> SalesId SalesLine -> InventTransId InventTrans (InvoiceId) |
|
|
|
| За это сообщение автора поблагодарили: mazzy (-2), Silphidae (1). | |
|
|
#7 |
|
Участник
|
|
|
|
|
|
#8 |
|
Участник
|
Спасибо всем.
Пожалуй, буду использовать вариант через SalesLine. Однако для образования хотелось бы узнать, есть ли способ насильно преобразовывать типы. И есть ли возможность писать like в qbds. |
|
|
|
|
#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). | |
|
|
#10 |
|
Ищущий знания...
|
почему я спросил про какие типы идет речь...
в стандарте есть много всяких функций преобразования типа (num2str(), str2date(), any2real() и т.д.и т.п) ![]() или вы про какое то другое преобразование?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#11 |
|
Участник
|
|
|
|
|
| За это сообщение автора поблагодарили: mazzy (2). | |
|
|
#12 |
|
----------------
|
|
|
|
|
|
#13 |
|
Участник
|
Ни в коем случае!!!!
Потому что Lemming правильно написал: Цитата:
Цитата:
"Кто соблазнит одного из малых сих, тому лучше было бы, если бы повесили ему жерновный камень на шею и бросили его в море" |
|
|
|
| За это сообщение автора поблагодарили: Silphidae (1). | |
|
|
#14 |
|
Участник
|
Более того, Вы представляете как будет тормозить такое решение на большом кол-ве заказов, инвойсов и складских операций? Вообще абсурд какой-то: стучаться из шапки инвойсов, в строки, через две таблы, наполненные немалым кол-вом данных! Лучше пусть тредстартер конкретизирует задачу, возможно он зашел к решению совсем не с той стороны.
|
|
|
|
| За это сообщение автора поблагодарили: Silphidae (1). | |
|
|
#15 |
|
Участник
|
Цитата:
или вы про какое то другое преобразование?
Хотя, конечно, к данной теме это не относится. Цитата:
Лучше пусть тредстартер конкретизирует задачу, возможно он зашел к решению совсем не с той стороны.
|
|
|
|
|
#16 |
|
Участник
|
Цитата:
Это почему же? Вот такая конструкция X++: select sum(InventQty), sum(LineAmount) from CustInvoiceTrans exists join InventDim where InventDim.InventDimId == CustInvoiceTrans.InventDimId && InventDim.InventLocationId == "..." |
|
|
|
| За это сообщение автора поблагодарили: Silphidae (1). | |
|
|
#17 |
|
----------------
|
mazzy, Lemming, ну конечно нельзя, ну конечно тормоза, понятно что это ИЗВРАТ
но, если потеряна связь CustInvoiceJour - CustInvoiceTrans или кто-то удалил CustInvoiceTrans и надо это починить - то можно как угодно видимо с задачей я не угадал
|
|
|
|
| За это сообщение автора поблагодарили: DSPIC (2), Silphidae (1). | |
|
|
#18 |
|
----------------
|
|
|
|
|
|
#19 |
|
Участник
|
Цитата:
Сообщение от Silphidae
Далается запрос CustInvoiceJour->CustInvoiceTrans->InventItemAndClass, в котором накладываются фильтры по клиентам, датам и узлам классификатора. Нужно еще вкорячить фильтр по складу. Проблема в том, что CustInvoiceTrans группируется по ItemId - и считает сумму по InventQty и LineAmount - тем самым InventDimId из CustInvoiceTrans уже не взять, вот я и хотел перед этим вставить InventTrans, чтобы там делать фильтр по складу.
|
|
|
|
| За это сообщение автора поблагодарили: Silphidae (1). | |
|
|
#20 |
|
Участник
|
Цитата:
все фильтры выполняюстя в запросе до того как происходит группировка
Спасибо за ответы. Прошу прощения за глупые вопросы. Но вот если бы я не спросил, кто знает, когда бы я дошел до этого знания - так что не ругайте сильно. |
|
|
| Теги |
| связь таблиц |
|
|
|