![]() |
#1 |
Участник
|
![]()
Подскажите, плиззз. Как из такого джоба создать запрос..
джоб: while select inventJournalTable join inventDim where inventDim.inventDimId == inventJournalTable.InventDimID && inventdim.InventLocationId =='А' join inventdim1 where inventdim1.inventDimId == inventJournalTable.ToInventDimID && inventdim1.InventLocationId =='Б' Создала запрос в таком виде, он отрабатывает только первый джойн... qbds1 = query.addDataSource(tableNum(InventJournalTable)); qbds2 = qbds1.addDataSource(tableNum(InventDim)); qbds2.addLink(fieldNum(InventJournalTable, InventDimId), fieldNum(InventDim, InventDimId)); qbds3 = qbds2.addDataSource(tableNum(InventLocation)); qbds3.addLink(fieldNum(InventDim, InventLocationId), fieldNum(InventLocation, InventLocationId)); qbds3.addRange(fieldNum(InventLocation, InventLocationId)).value('А'); Пыталась дальше делать по образу и подобию дописать... qbds4 = qbds1.addDataSource(tableNum(InventDim)); qbds4.addLink(fieldNum(InventJournalTable, ToInventDimId), fieldNum(InventDim, InventDimId)); qbds5 = qbds4.addDataSource(tableNum(InventLocation)); qbds5.addLink(fieldNum(InventDim, InventLocationId), fieldNum(InventLocation, InventLocationId)); qbds5.addRange(fieldNum(InventLocation, InventLocationId)).value('Б'); Но всё равно только qbds1,qbds2,qbds3 отрабатывают.... что ещё могла упустить? |
|
![]() |
#2 |
Участник
|
Что вы точно упустили, так это QueryFetchMode
X++: QueryBuildDataSource qbds1, qbds2, qbds3, qbds4, qbds5; Query query = new Query(); qbds1 = query.addDataSource(tableNum(InventJournalTrans)); qbds2 = qbds1.addDataSource(tableNum(InventDim)); qbds2.addLink(fieldNum(InventJournalTrans, InventDimId), fieldNum(InventDim, InventDimId)); qbds2.fetchMode(QueryFetchMode::One2One); qbds3 = qbds2.addDataSource(tableNum(InventLocation)); qbds3.addLink(fieldNum(InventDim, InventLocationId), fieldNum(InventLocation, InventLocationId)); qbds3.addRange(fieldNum(InventLocation, InventLocationId)).value('?'); qbds3.fetchMode(QueryFetchMode::One2One); qbds4 = qbds1.addDataSource(tableNum(InventDim)); qbds4.addLink(fieldNum(InventJournalTrans, ToInventDimId), fieldNum(InventDim, InventDimId)); qbds4.fetchMode(QueryFetchMode::One2One); qbds5 = qbds4.addDataSource(tableNum(InventLocation)); qbds5.addLink(fieldNum(InventDim, InventLocationId), fieldNum(InventLocation, InventLocationId)); qbds5.addRange(fieldNum(InventLocation, InventLocationId)).value('?'); qbds5.fetchMode(QueryFetchMode::One2One); info(query.dataSourceNo(1).toString()); ![]() |
|
![]() |
#3 |
----------------
|
да и зачем вам qbds3, qbds5
|
|
![]() |
#4 |
Участник
|
Во-первых не понятно зачем джоинить InventLocation, если условие накладывается на InventLocationId.
Можно попробовать добавить следующее: qbds2.fetchMode(QueryFetchMode::One2One); qbds4.fetchMode(QueryFetchMode::One2One); |
|
![]() |
#5 |
Участник
|
просто нужно выцепить по аналитике с какого склада на какой переместили?
вот и не знаю как подцепить... С какого склада по InventDimID, получается отфильтровать записи.. А вот второй раз прийти в inventdim по полю ToInventDimID , не получается... join inventdim1 where inventdim1.inventDimId == inventJournalTable.ToInventDimID && inventdim1.InventLocationId =='Б' можете ещё что посоветуете.. |
|
![]() |
#6 |
Участник
|
fetchMode не помог..., всё равно срабатывает только фильтр "С какого склада" (
|
|
![]() |
#7 |
Участник
|
А как вы проверяете некорректность?
|
|
![]() |
#8 |
Участник
|
Просто вывожу инфо после отработки джоба и запроса
В джобе выводятся нужные журналы. А вот когда запускаю Query , то выводятся журналы, которые удовлетворяют ограничению по дате и "Складу с ", который привязан к InventDimId. А то что привязка идёт по ToInventDimid- не срабатывает... |
|
![]() |
#9 |
Участник
|
Попробуйте отказаться от qbds3 и qbds5. А условия:
qbds3.addRange(fieldNum(InventLocation, InventLocationId)).value('А'); qbds5.addRange(fieldNum(InventLocation, InventLocationId)).value('Б'); замените на: qbds2.addRange(fieldNum(InventDim, InventLocationId)).value('А'); qbds4.addRange(fieldNum(InventDim, InventLocationId)).value('Б'); |
|
![]() |
#10 |
Участник
|
Цитата:
Сообщение от pdojn
![]() Попробуйте отказаться от qbds3 и qbds5. А условия:
qbds3.addRange(fieldNum(InventLocation, InventLocationId)).value('А'); qbds5.addRange(fieldNum(InventLocation, InventLocationId)).value('Б'); замените на: qbds2.addRange(fieldNum(InventDim, InventLocationId)).value('А'); qbds4.addRange(fieldNum(InventDim, InventLocationId)).value('Б'); Как тогда это будет всё выглядеть? |
|
![]() |
#11 |
Участник
|
Вот так:
![]() X++: while select inventJournalTable join inventDim where inventDim.inventDimId == inventJournalTable.InventDimID && inventdim.InventLocationId =='А' join inventdim1 where inventdim1.inventDimId == inventJournalTable.ToInventDimID && inventdim1.InventLocationId =='Б' |
|
![]() |
#12 |
Участник
|
Цитата:
![]() Но этот запрос, у меня давно уже работает... А как это в executeQuery прописать)) |
|
![]() |
#13 |
Участник
|
А будет как раз то, что вам нужно
![]() |
|
![]() |
#14 |
Участник
|
Это был ответ на вопрос:
Именно так и будет выглядеть, а соответственно и это должно: |
|
![]() |
#15 |
Участник
|
То есть нижеприведенный job - это аналог написанного вами запроса с select
X++: static void QueryFetchModeExample(Args _args) { /* while select inventJournalTable join inventDim where inventDim.inventDimId == inventJournalTable.InventDimID && inventdim.InventLocationId =='?' join inventdim1 where inventdim1.inventDimId == inventJournalTable.ToInventDimID && inventdim1.InventLocationId =='?' */ QueryBuildDataSource qbds1, qbds2, qbds3; Query query = new Query(); qbds1 = query.addDataSource(tableNum(InventJournalTable)); qbds2 = qbds1.addDataSource(tableNum(InventDim)); qbds2.addLink(fieldNum(InventJournalTable, InventDimId), fieldNum(InventDim, InventDimId)); qbds2.fetchMode(QueryFetchMode::One2One); qbds2.addRange(fieldNum(InventDim, InventLocationId)).value(queryValue('?')); qbds3 = qbds1.addDataSource(tableNum(InventDim)); qbds3.addLink(fieldNum(InventJournalTable, ToInventDimId), fieldNum(InventDim, InventDimId)); qbds3.fetchMode(QueryFetchMode::One2One); qbds3.addRange(fieldNum(InventDim, InventLocationId)).value(queryValue('?')); info(query.dataSourceNo(1).toString()); } |
|
![]() |
#16 |
Участник
|
Цитата:
![]() А мне нужно запрос на форме... и для меня это действительно большой вопрос, на который я не могу ответить... А также не могу до конца представить как должен выглядеть qwery... Буду очень благодарна, если ткнёте носом в чём я не права.... |
|
![]() |
#17 |
Участник
|
Ну если не верите... вот весь запрос...
public void executeQuery() { Query query = new Query(); QueryBuildDataSource qbds1, qbds2, qbds3,qbds4, qbds5; QueryRun queryRun; str dateFilter; ; // Установка фильтра строк заказов по дате поставки dateFilter = date2str(StartFilter.dateValue(), 123,2,2,2,2,2); dateFilter += '..' + date2str(EndFilter.dateValue(), 123,2,2,2,2,2); qbrFilterDate.value(dateFilter); qbds1 = query.addDataSource(tableNum(InventJournalTable)); qbds1.addRange(fieldNum(InventjournalTable, Posted)).value(SysQuery::value(NoYes::Yes)); qbds1.addRange(fieldNum(InventjournalTable, JournalType)).value(SysQuery::value(InventJournalType::Transfer)); qbds1.addRange(fieldNum(InventjournalTable, PostedDate)).value(dateFilter); qbds2 = qbds1.addDataSource(tableNum(InventDim)); qbds2.addLink(fieldNum(InventJournalTable, InventDimId), fieldNum(InventDim, InventDimId)); qbds2.fetchMode(QueryFetchMode::One2One); qbds3 = qbds2.addDataSource(tableNum(InventLocation)); qbds3.addLink(fieldNum(InventDim, InventLocationId), fieldNum(InventLocation, InventLocationId)); qbds3.addRange(fieldNum(InventLocation, InventLocationId)).value(FilterLocationFrom.text()); qbds3.fetchMode(QueryFetchMode::One2One); qbds4 = qbds1.addDataSource(tableNum(InventDim)); qbds4.addLink(fieldNum(InventJournalTable, ToInventDimId), fieldNum(InventDim, InventDimId)); qbds4.fetchMode(QueryFetchMode::One2One); qbds5 = qbds4.addDataSource(tableNum(InventLocation)); qbds5.addLink(fieldNum(InventDim, InventLocationId), fieldNum(InventLocation, InventLocationId)); qbds5.addRange(fieldNum(InventLocation, InventLocationId)).value(FilterLocationFrom.text()); qbds5.fetchMode(QueryFetchMode::One2One); queryRun = new QueryRun(query); // info(qbds1.toString() + '\n' + qbds2.toString()+ '\n' + qbds3.toString()); while (queryRun.next()) { if (queryRun.changed(tableNum(InventJournalTable))) { inventJournalTable = queryRun.get(tableNum(InventJournalTable)); info(inventJournalTable.JournalId ); } } super(); } |
|
![]() |
#18 |
Участник
|
Всё... Спасибо всем... Нашла свою ошибку... Убрала всё лишнее...;-)
|
|
|
![]() |
||||
Тема | Ответов | |||
Суммы по двум таблицам | 17 | |||
Запрос по трем таблицам | 12 | |||
Почему join запрос разбивается на подзапросы!? | 59 | |||
Группировка по двум и более таблицам | 2 | |||
Как выполнить запрос созданный в переменной | 12 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|