|
![]() |
#1 |
Участник
|
Посмотрела трассировку запроса. Там вооще нет критериев выбора
WHERE (DATAAREAID=?) и все |
|
![]() |
#2 |
Moderator
|
Вроде, к массивовым полям нельзя применять синтаксис расширенных диапазонов: http://www.axaptapedia.com/Expressio...es#Limitations
Цитата:
Unfortunately, if you wish to filter on array fields in an Axapta table, such as the Dimensions field, there is no way to do so using the Query Expressions syntax.
|
|
![]() |
#3 |
Участник
|
Вот последнего предложения я и не прочла. Значит надо все переделывать. Т.к. дургого решения не вижу.
|
|
![]() |
#4 |
Moderator
|
Цитата:
P.S. Ну, т.е. не по очереди конечно, а в обычный while select вставьте эти условия и запишите RecId циклом в Set. По окончании в Set'е окажутся только уникальные значения RecId. Их - в range через запятую. Если надо будет показывать запрос пользователю, то возможно еще придется делиться на несколько range по не более 250 символов в каждом. Последний раз редактировалось Gustav; 01.03.2010 в 18:21. |
|
![]() |
#5 |
Участник
|
А где можно посмотреть пример такого кода?
|
|
![]() |
#6 |
Moderator
|
Деления? Например, у меня здесь: Пользовательский генератор строк-перечислений...- 2: Доп.вкладка для SysQueryForm
P.S. Еще вот такую "статику" у себя отыскал: X++: // Created on 01 Сен 2008 at 15:04:08 by KKU static Set choppedQueryRanges( Set _conditions = new Set(Types::String), str _separator = '||' ) { // "Нашинкованные диапазоны критериев" // на входе - множество условий (каждая строка существенно короче EDT Range) // на выходе - множество диапазонов (каждый максимально впихнут в длину EDT Range) // примеры элементов множества условий (_conditions): // (CenterId=="09000") или (RequestTable.ReasonId=="ВЫБ_Ф") Set setRanges = new Set(Types::String); SetEnumerator enumerator; str curr; str currElem; str currCrit = ''; str prevCrit = ''; int edtRangeSize = new DictField( tableNum(TmpSysQuery), fieldNum(TmpSysQuery, RangeValue) ).stringLen(); ; enumerator = _conditions.getEnumerator(); while (enumerator.moveNext()) { curr = enumerator.current(); currElem = strLTrim( strRTrim (strFmt(curr))); if (currElem) { currCrit = prevCrit + currElem + _separator; if ( strLen(currCrit) > (edtRangeSize + strLen(_separator)) ) { setRanges.add( subStr(prevCrit, 1, strLen(prevCrit)-strLen(_separator)) ); prevCrit = currElem + _separator; } else { prevCrit = currCrit; } } } if (prevCrit) { setRanges.add( subStr(prevCrit, 1, strLen(prevCrit)-strLen(_separator)) ); } return setRanges; } Последний раз редактировалось Gustav; 01.03.2010 в 18:38. |
|
![]() |
#7 |
Участник
|
Цитата:
Где то давно обсуждалось что при большом количестве Dimension запросы к бд становятся долгими, и это механизм теряет свои плюсы.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
![]() |
#8 |
Участник
|
Спасибо за помощь, много нового узнала.
Решила сделать отдельные поля, т.к. по логике вещей поля равнозначны и вдальнейшем мне придется часто делать подобные выборки. Еще раз спасибо. |
|