![]() |
#1 |
Участник
|
![]()
Добрый день, вот такая проблема: есть форма с датасорсом, при открытии формы в гриде отображаются все записи, так же на форме есть чекбокс, при установки галки, в гриде должны отображаться только те данные которые не входят (NoExistsJoin) в другие 4 таблицы.
Перекрываю метод modified на чекбоксе, там вызываю executeQuery датасорса. Соответственно executeQuery перекрыт, так: X++: QueryBuildDatasource ds; QueryBuildDatasource ds2; QueryBuildDatasource ds3,ds4,ds5; Query q = new Query(); ; if (Open.checked()) { ds = q.addDataSource(tableNum(PurchTable_request)); ds3 = ds.addDataSource(tableNum(RcontractTable)); ds3.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(RcontractTable, RequestId)); ds3.joinMode(JoinMode::NoExistsJoin); ds2 = ds.addDataSource(tableNum(PurchTable)); ds2.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(PurchTable, RequestId)); ds2.joinMode(JoinMode::NoExistsJoin); ds4 = ds.addDataSource(tableNum(PurchLine)); ds4.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(PurchLine, RequestId)); ds4.joinMode(JoinMode::NoExistsJoin); ds5 = ds.addDataSource(tableNum(AdvanceHolderTable)); ds5.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(AdvanceHolderTable, RequestId)); ds5.joinMode(JoinMode::NoExistsJoin); ds5.fetchMode(QueryFetchMode::One2One); PurchTable_request_DS.queryRun().query(q); } else { super(); } подскажите плиз где что не так написал?
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
![]() |
#2 |
Участник
|
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 07.02.2011 в 08:27. |
|
![]() |
#3 |
Участник
|
не работает - выдаёт ошибку? или
не работает - скрывает не те записи/не скрывает не те записи? почему fetchMode One2One устанавливается только пятому источнику? |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от AndyD
![]()
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
![]() |
#5 |
Участник
|
Покажите код после исправления
__________________
Axapta v.3.0 sp5 kr2 |
|
![]() |
#6 |
Участник
|
X++: ds = q.addDataSource(tableNum(PurchTable_request)); ds3 = ds.addDataSource(tableNum(RcontractTable)); ds3.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(RcontractTable, RequestId)); ds3.joinMode(JoinMode::NoExistsJoin); ds3.fetchMode(QueryFetchMode::One2One); ds2 = ds.addDataSource(tableNum(PurchTable)); ds2.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(PurchTable, RequestId)); ds2.joinMode(JoinMode::NoExistsJoin); ds2.fetchMode(QueryFetchMode::One2One); ds4 = ds.addDataSource(tableNum(PurchLine)); ds4.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(PurchLine, RequestId)); ds4.joinMode(JoinMode::NoExistsJoin); ds4.fetchMode(QueryFetchMode::One2One); ds5 = ds.addDataSource(tableNum(AdvanceHolderTable)); ds5.addLink(fieldNum(PurchTable_request, RequestId), fieldNum(AdvanceHolderTable, RequestId)); ds5.joinMode(JoinMode::NoExistsJoin); ds5.fetchMode(QueryFetchMode::One2One); PurchTable_request_DS.query(q); super();
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
![]() |
#7 |
Участник
|
|
|
![]() |
#8 |
Участник
|
Информация:
SELECT * FROM PurchTable_request NOTEXISTS JOIN * FROM RContractTable WHERE PurchTable_request.RequestId = RContractTable.RequestId NOTEXISTS JOIN * FROM PurchTable WHERE PurchTable_request.RequestId = PurchTable.RequestId NOTEXISTS JOIN * FROM PurchLine WHERE PurchTable_request.RequestId = PurchLine.RequestId NOTEXISTS JOIN * FROM AdvanceHolderTable WHERE PurchTable_request.RequestId = AdvanceHolderTable.RequestId
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
![]() |
#9 |
Участник
|
Цитата:
Надо включать трассировку запросов и смотреть, что реально уходит PS Угум. А вот и подтверждение. 2kalex_a - смотрите, какой запрос уходит на сервер
__________________
Axapta v.3.0 sp5 kr2 |
|
![]() |
#10 |
Участник
|
Цитата:
kalex_a, а если временно упростить запрос (оставить только один или два exists join), то он отработает? Последний раз редактировалось S.Kuskov; 07.02.2011 в 09:24. |
|
![]() |
#11 |
Участник
|
Цитата:
Сообщение от S.Kuskov
![]() Честно говоря, на практике никогда не встречал такой ситуации. Всегда думал что проблема именно в парсере запросов, а не в их трансляции. В любом случае проверить никогда не повредит.
kalex_a, а если временно упростить запрос (оставить только один или два exists join), то он отработает?
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
![]() |
#12 |
Участник
|
Оставил два no exists join, на сервер уходит вот такой запрос:
X++: declare @p1 int set @p1=1073742866 declare @p2 int set @p2=180158983 declare @p5 int set @p5=16 declare @p6 int set @p6=1 declare @p7 int set @p7=-1 exec sp_cursorprepexec @p1 output,@p2 output,N'@P1 nvarchar(8),@P2 int,@P3 nvarchar(2002),@P4 nvarchar(8),@P5 nvarchar(8)',N'SELECT A.REQUESTID,A.CURRENCYCODE,A.DIMENSION,A.DIMENSION2_,A.DIMENSION3_,A.DIMENSION4_,A.DIMENSION5_,A.DIMENSION6_,A.DIMENSION7_,A.CONFIRM_LABEL1,A.CONFIRM_COSTCONTROL,A.CONFIRM_FINAL,A.DATECONFIRM_LABEL1,A.DATECONFIRM_COSTCONTROL,A.DATECONFIRM_FINAL,A.USERCONFIRMLABEL1,A.USERCONFIRM_COSTCONTROL,A.USERCONFIRM_FINAL,A.AMMOUNT,A.USER_REGISTR,A.DATE_REGISTR,A.FIELD1,A.ID_COMPETENCE,A.REQUESTID_REZERV,A.ATF_TYPEREQUEST,A.AMMOUNT_BALANS,A.VENDACCOUNT,A.VENDRNN,A.VENDNAME,A.CONTRACTDATE,A.CONTRACTNUMBER,A.DATECONFIRM_TOPAY,A.USERCONFIRM_TOPAY,A.AMMOUNT_PAYMENT,A.CONFIRM_TOPAY,A.REQUESTURL,A.MODIFIEDDATE,A.MODIFIEDTIME,A.MODIFIEDBY,A.CREATEDDATE,A.CREATEDTIME,A.CREATEDBY,A.RECVERSION,A.RECID,A.REQUEST_TEXT FROM PURCHTABLE_REQUEST A WHERE ((A.DATAAREAID=@P1) AND ((A.CONFIRM_FINAL=@P2) AND NOT ((A.REQUESTURL=@P3)))) AND NOT EXISTS (SELECT ''x'' FROM PURCHTABLE B WHERE ((B.DATAAREAID=@P4) AND (A.REQUESTID=B.REQUESTID)) AND NOT EXISTS (SELECT ''x'' FROM PURCHLINE C WHERE ((C.DATAAREAID=@P5) AND (A.REQUESTID=C.REQUESTID)))) ORDER BY A.DATAAREAID DESC,A.DATECONFIRM_FINAL DESC OPTION(FAST 1)',@p5 output,@p6 output,@p7 output,N'dat',1,N'',N'dat',N'dat' select @p1, @p2, @p5, @p6, @p7 Не пойму в чем проблема.
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
![]() |
#13 |
Участник
|
Вы уж определитесь какой конкретно запрос вам нужен.
Код: SELECT ... FROM PURCHTABLE_REQUEST A WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHTABLE B WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHLINE C WHERE ... ) ) Код: SELECT ... FROM PURCHTABLE_REQUEST A WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHTABLE B WHERE ... ) AND NOT EXISTS ( SELECT ... FROM PURCHLINE C WHERE ... ) ![]() |
|
![]() |
#14 |
Участник
|
Цитата:
Сообщение от S.Kuskov
![]() Вы уж определитесь какой конкретно запрос вам нужен.
Код: SELECT ... FROM PURCHTABLE_REQUEST A WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHTABLE B WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHLINE C WHERE ... ) ) Код: SELECT ... FROM PURCHTABLE_REQUEST A WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHTABLE B WHERE ... ) AND NOT EXISTS ( SELECT ... FROM PURCHLINE C WHERE ... ) ![]() Второй Not Exists всегда выношу в проверку внутри цикла, либо если на форме, то через временную таблицу... |
|
![]() |
#15 |
Участник
|
Цитата:
Сообщение от S.Kuskov
![]() Вы уж определитесь какой конкретно запрос вам нужен.
Код: SELECT ... FROM PURCHTABLE_REQUEST A WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHTABLE B WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHLINE C WHERE ... ) ) Код: SELECT ... FROM PURCHTABLE_REQUEST A WHERE ... AND NOT EXISTS ( SELECT ... FROM PURCHTABLE B WHERE ... ) AND NOT EXISTS ( SELECT ... FROM PURCHLINE C WHERE ... ) ![]()
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
![]() |
#16 |
Участник
|
|
|
![]() |
#17 |
Участник
|
Да. Раз нельзя в Акс сделать второй вариант, то каким образом сделать выборку (((((
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
![]() |
#18 |
Участник
|
|
|
![]() |
#19 |
Участник
|
Либо через временную таблицу - собрать в нее RecId тех записей, которые не должны быть из таблиц RContractTable, PurchTable, PurchLine и т.д. И эту временную таблицу подцепить уже через один Not Exists.
|
|
![]() |
#20 |
Участник
|
Цитата:
По моему нет, там ошибку какую то выдает
__________________
Лучше сделать и жалеть, чем жалеть что не сделал |
|
Теги |
exists, query |
|
|