27.10.2005, 08:05 | #21 |
Участник
|
Цитата:
Кстати, обратите внимание, что у вашем случае активируется кнопка сброса фильтра. Если ее нажать, то увидите что хотите
|
|
27.10.2005, 08:31 | #22 |
Участник
|
Эта кнопка активируется в случае расхождения м-ду выполняемым запросом (тот что в QueryRun().Query()) и, так сказать, базовым запросом (который находится в датасорс.Query()). При этом вызывается заново метод датасорс.ExecuteQuery(), который передает в QueryRun() запрос из Query() датасорса.
В вашем случае вы изменили запрос датасорс.Query(). Запрос в QueryRun().Query() отличается от него, поэтому активизировалась кнопка. При сбросе измененный запрос попадает в QueryRun() и вы видете его. Обратите внимание, что в фильтрации записей теперь видно ваше условие.
__________________
Axapta v.3.0 sp5 kr2 |
|
27.10.2005, 08:48 | #23 |
Участник
|
Но это значит что пользователь может изменить запрос прямо из формы. а как этого избежать? записать его QueryRun().Query()
Можно тогда вопрос, мне нужно из набора записей убрать записи. которые находятся в другом наборе, один убирает когда я доавляю в датасорс таблицу, с определенным критерием но с признаком joinMode::NoExistsJoin, вкогда присоеднияю вторуб таблицу со сложным условием - возникает ощущение что это условие не воспринимается и игнорируется.... короче говоря вопрос в следующем , как правильно исключить записи с помощью joinMode::NoExistsJoin, последовательно по 2 наборам записей |
|
27.10.2005, 09:18 | #24 |
Участник
|
Цитата:
Но это значит что пользователь может изменить запрос прямо из формы. а как этого избежать?
По поводу второго вопроса - приведите запрос sql который желаете получить
__________________
Axapta v.3.0 sp5 kr2 |
|
27.10.2005, 10:00 | #25 |
Участник
|
ну например
Код: Select inventtable.itemid from inventtable where itemid not in (SELECT inventtable.itemid FROM inventtable inner join inventsum on inventtable.itemid = inventsum.itemid where InventSum.Inventdimid = ' АН00000031' AND InventSum.PostedQty + InventSum.Received - InventSum.Deducted + InventSum.Registered - InventSum.Picked - InventSum.ReservPhysical > 0 ) |
|
27.10.2005, 10:18 | #26 |
Участник
|
А зачем во вложенном запросе нужна InventTable?
__________________
Axapta v.3.0 sp5 kr2 |
|
27.10.2005, 11:57 | #27 |
Участник
|
согласен не нужна...
просто делал запрос на основе других - поторопился, вопрос остается открытым |
|
27.10.2005, 12:32 | #28 |
Участник
|
сформировал критерий, знаю как запихнуть его с помощью AddRange,
теперь не знаю как реализовать "отнимание" этих записей |
|
27.10.2005, 12:35 | #29 |
Участник
|
X++: Query q = new Query(); ; q.addDataSource(tablenum(InventTable)); q.dataSourceTable(tablenum(InventTable)).addDataSource(tablenum(InventSum)); q.dataSourceTable(tablenum(InventSum)).joinMode(JoinMode::NoExistsJoin); q.dataSourceTable(tablenum(InventSum)).addLink(fieldnum(InventTable, ItemId), fieldnum(InventSum, ItemId));
__________________
Axapta v.3.0 sp5 kr2 |
|
27.10.2005, 12:42 | #30 |
Участник
|
тк делал,
но когда добавляешь еще одну таблицу с Jo inMode::NoExistsJoin, второго условия как будто и нет |
|
27.10.2005, 13:59 | #31 |
Участник
|
Если я вас правильно понял, то попробуйте так
X++: q.dataSourceTable(tablenum(InventSum)).joinMode(JoinMode::NoExistsJoin); q.dataSourceTable(tablenum(InventSum)).fetchMode(QueryFetchMode::One2One);
__________________
Axapta v.3.0 sp5 kr2 |
|
27.10.2005, 14:24 | #32 |
Участник
|
fetchMode(Q ueryFetchMode::One2One) - я понимаю что это связано со связью типа 1 -1 или 1 ко многим. но все равно ен объясните причем здесь это?
|
|
28.10.2005, 08:08 | #33 |
Участник
|
определенное движение есть... но работаето либо одно условие c joinMode::InnerJoin либо второе...
все действия производятся в init формы |
|
28.10.2005, 08:35 | #34 |
Участник
|
Приведите свой код, как вы формируете запрос.
Без этого получается гадание на кофейной гуще
__________________
Axapta v.3.0 sp5 kr2 |
|
01.11.2005, 09:35 | #35 |
Участник
|
По поводу использования fetchMode(QueryFetchMode::One2One)
При разборе полетов выяснилось, что при использовании такого режима для следующего Query X++: Query q = new Query(); QueryBuildDatasource qbds; ; qbds = q.addDatasource(tablenum(table1)); qbds.AddDatasource(tablenum(table2)); qbds.DatasourceTable(tablenum(table2)). joinMode(JoinMode::[No]ExistsJoin); qbds.DatasourceTable(tablenum(table2)). fetchMode(QueryFetchMode::One2One); qbds.DatasourceTable(tablenum(table2)). addLink(fieldnum(Table1, field1), fieldnum(Table2, field2)); qbds.AddDatasource(tablenum(table3)); qbds.DatasourceTable(tablenum(table3)). joinMode(JoinMode::[No]ExistsJoin); qbds.DatasourceTable(tablenum(table3)). fetchMode(QueryFetchMode::One2One); qbds.DatasourceTable(tablenum(table3)). addLink(fieldnum(Table1, field2), fieldnum(Table3, field2)); X++: select * from table1 where [not] Exists(select 'x' from table2 where table1.field1 = table2.field1 and [not] Exists(select 'x' from table3 where table1.field2 = table3.field2)) Если использовать подключение источников данных ч/з Exists, то такой запрос работает как ожидалось. Если же использовать NotExists, то необходимо рассматривать каждый запрос по отдельности для правильного составления. 2 Bars В вашем случае я бы предложил сделать следующее 1. Подключать первым InventSum 2. Подключать его как ExistsJoin, 3. В условии изменить сравнение с ">" на "<="
__________________
Axapta v.3.0 sp5 kr2 |
|
01.11.2005, 11:33 | #36 |
Участник
|
Спасибо, попробую
хотя в принципе процесс уже немного изменили и критерии соответсвенно тоже... но на будущее обязательно запомню. |
|