|  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 | 
| Участник | 
			
			Извините, ошибся. (
		 | 
|  |