|
21.03.2007, 13:07 | #1 |
Участник
|
Есть два запроса
такой: [codebox]StrRange = '(((OutlookTaskTable.Ot = "%1") || (OutlookTaskTable.User = "%2")))'; rq = OutlookTaskTable_q.dataSourceTable(TableNum(OutlookTaskTable)).addRange(FieldNum (OutlookTaskTable, RecId)); rq.value(strfmt(StrRange, CurUserId(), CurUserId()));[/codebox] и такой: [codebox]ds = OutlookTaskTable_q.dataSourceTable(TableNum(OutlookTaskTable)); ds2 = OutlookTaskTable_q.dataSourceTable(TableNum(EmplTable)); if (!ds2) { ds2 = ds.addDataSource(TableNum(EmplTable)); ds2.addLink(FieldNum(OutlookTaskTable, User), FieldNum(EmplTable, EmplId)); ds2.joinMode(JoinMode::ExistsJoin); ds2.addRange(FieldNum(EmplTable, HRMOrganizationId)).value(ArrayStr); } else ds2.findRange(FieldNum(EmplTable, HRMOrganizationId)).value(ArrayStr);[/codebox] Если я их пишу вместе, то получается они работают как условие"И". Как сделать, чтобы второй запрос присоединялся к первому как условие"ИЛИ"? Второй запрос смотрит поле User из таблицы OutlookTaskTable и проверяет по таблице EmplTable принадлежность к подразделению CurUserId(). Мне нужно реализовать в аксапте вот такой запрос: [codebox]SELECT * FROM OutlookTaskTable A INNER JOIN EmplTable B ON A.User = B.EmplId WHERE A.USER = 'ANV' OR B.HRMORGANIZATIONID = 'IS'[/codebox] Проблема как добавить условие по OR |
|
21.03.2007, 23:25 | #2 |
Участник
|
Это не проблема. FAQ: Как написать AND или OR в критерии запроса (query)
|
|
22.03.2007, 10:59 | #3 |
Участник
|
Вот так:
[codebox] ds = OutlookTaskTable_q.dataSourceTable(TableNum(OutlookTaskTable)); ds2 = OutlookTaskTable_q.dataSourceTable(TableNum(EmplTable)); if (!ds2) { ds2 = ds.addDataSource(TableNum(EmplTable)); StrRange = '((((OutlookTaskTable.Ot = "%1") || (OutlookTaskTable.User = "%2") || (HRMOrganizationId = "%3")) && (EmplId = OutlookTaskTable.User)))'; ds2.addRange(FieldNum(EmplTable, RecId)).value(strfmt(StrRange, CurUserId(), CurUserId(), "ИС")); }[/codebox] |
|
22.03.2007, 11:38 | #4 |
Участник
|
Да, примерно так.
Вместо метода ds2.addRange() лучше использовать метод SysQuery::findOrCreateRange(...) Дело в том, что range по этому полю уже может присутствовать (например, пользователь добавил или где-то в коде программист) addRange безусловно добавит range. Но результат нескольких range будет совсем не тот, что вы ожидаете. |
|
22.03.2007, 11:48 | #5 |
Участник
|
Сергей, в данном случае это не верно.
Перед добавлением рейнжа moid добавляет датасоурс. По-этому таких проблем не возникнет
__________________
Axapta v.3.0 sp5 kr2 |
|
22.03.2007, 11:54 | #6 |
Участник
|
Цитата:
Но через некоторое время код будет дополняться и разрастаться. Нет никакой гарантии, что кто-нибудь ради каких-нибудь целей не вклинится в середину. Согласен, что это уже не очень существенно. |
|