Думаю это не глюк - это фича

. Попробуйте ввести "од" и у вас отфильтруются записи с элементом "Один". Т.е. ищет по вхождению с начала лейбла
Могу предложить небольшую модификацию формы 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;
}