08.02.2006, 21:57 | #1 |
Участник
|
Enum: глюк?
Создаю перечисляемый тип MyEnum, например, с двумя элементами - "Один", "Два"
Создаю таблицу с полем типа MyEnum. Добавляю в таблицу несколько записей с тем и другим значением в этом поле. Открываю обозреватель таблицы, по правой кнопке делаю "Найти" и ввожу значение "Од*". Фильтр не срабатывает, в обозревателе по-прежнему видны все записи таблицы. Если строку поиска задать как "Один", то фильтр срабатывает и виды записи только со значением "Один". Почему не работает строка поиска с символом "*" ? Если для полей типа enum такое не возможно, то как можно выйти из ситуации? |
|
08.02.2006, 22:36 | #2 |
Участник
|
Цитата:
Сообщение от Gorlum
Почему не работает строка поиска с символом "*" ?
Если для полей типа enum такое не возможно, то как можно выйти из ситуации? Перечисляйте все возможные случаи в строке поиска. Это удобно сделать не из краткой формы поиска, а из полной формы редактирования критериев. |
|
09.02.2006, 11:12 | #3 |
MCTS
|
Возможно не совсем в тему и быть может уже когда-то упоминалось.
- Поиск "Найти" не поддерживает поиск со строгим cравнением (>=). Всё это из-за того, что подобные условия (>=) невозможно впихнуть в .addRange на программном уровне, а функциональность "Найти" как раз и построена на... ну как это сказать... на технологии добавления рейнджей. Инами словами как пользователю, так и программисту необходимо заменять строгие сравнения на нестрогие. - Если в систему каким-то образом попали значения начинающиеся с восклицательного знака(например "!test_1"), то функциональность "Найти" при поиске уже пользователю не поможет. Иными словами, если пользователь будет озадачен поиском такого значения и введёт "Найти" !test_1, система вернёт ему весь список, что собственно и логично. В данном случае система будет интерпретировать запрос как "найти все значения НЕ равные test_1"
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
09.02.2006, 11:17 | #4 |
Участник
|
Думаю это не глюк - это фича. Попробуйте ввести "од" и у вас отфильтруются записи с элементом "Один". Т.е. ищет по вхождению с начала лейбла
Могу предложить небольшую модификацию формы SysFormSearch, метод GetText() для использования шаблонов в поиске по enum полям X++: str 80 getText() { str 80 text = findEdit.text(); DictField dictField; DictType dictType; DictEnum dictEnum; enumId enumId; int i; str pattern; boolean found; int scanPos, scanInq, scanAst; str 1 scanChar; ; if (strscan(text, "*", 1, strlen(text)) > 0 || strscan(text, "?", 1, strlen(text)) > 0) { dictField = new DictField(_dataset, fieldext2id(_field)); if (dictField && dictField.baseType() == Types::Enum) { enumId = 0; if (dictField.Type() == Types::UserType) { dictType = new DictType(dictField.typeId()); if (dictType) enumId = dictType.enumId(); } else enumId = dictField.enumId(); if (enumId) { dictEnum = new DictEnum(enumId); if (dictEnum) { pattern = ""; i = 1; while (strscan(text, "*", i, strlen(text)) || strscan(text, "?", i, strlen(text))) { scanInq = strscan(text, "?", i, strlen(text)); scanAst = strscan(text, "*", i, strlen(text)); scanChar = scanInq && (!scanAst || scanInq < scanAst) ? "" : "*"; scanPos = scanInq && (!scanAst || scanInq < scanAst) ? scanInq : scanAst; pattern += (substr(text, i, scanPos-i) + "." + scanChar); i = scanPos + 1; } if (i <= strlen(text)) pattern += substr(text, i, strlen(text)); found = false; for (i=0; i < dictEnum.values(); i++) { if (match(pattern, dictEnum.index2Label(i))) { text = dictEnum.index2Label(i); found = true; break; } } if (!found) { for (i=0; i < dictEnum.values(); i++) { if (match(pattern, dictEnum.index2Symbol(i))) { text = dictEnum.index2Symbol(i); break; } } } } } } } return text; }
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: wb (3). |
09.02.2006, 12:12 | #5 |
Участник
|
Цитата:
Сообщение от Russland
Возможно не совсем в тему и быть может уже когда-то упоминалось.
- Поиск "Найти" не поддерживает поиск со строгим cравнением (>=). |
|
09.02.2006, 12:38 | #6 |
MCTS
|
Не хочу разводить пустые дискуссии...
Просто хотел напомнить, что результат использования конструкцией типа >= <= как в коде, так и "с этой стороны" Аксапты как правило может озадачить человека.
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
09.02.2006, 13:10 | #7 |
Участник
|
Большое спасибо всем.
AndyD - отдельное спасибо, все работает. |
|
09.02.2006, 13:56 | #8 |
Участник
|
Еще глюк Enum
А мне еще вот что досаждает
PHP код:
PHP код:
|
|
09.02.2006, 14:00 | #9 |
MCTS
|
SELECT * FROM SalesTable
where SalesTable.SalesStatus == SalesStatus:elivered Не работает???
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
09.02.2006, 14:03 | #10 |
NavAx
|
Вообщето SalesStatus:elivered имеет значение 2 а не 3!
|
|
09.02.2006, 14:04 | #11 |
Участник
|
Цитата:
Сообщение от vc
А мне еще вот что досаждает
PHP код:
PHP код:
Там EnumValue случайно не отлично от "3" ??? PS Согласен с Roman777 Последний раз редактировалось DarkBear; 09.02.2006 в 14:06. |
|
10.02.2006, 07:43 | #12 |
Участник
|
Извините, ошибся. (
|
|