Вопрос

Смена логики работы фильтра

Добрый день.

 У мне при работе Выборки выбрасывает значения городов неверно, через LIKE, где мне в функции изменить фильтрацию по строгому соответствию.

function CreateSearchCityFilters(SelectQuery, SearchValue) {
    var FiltersGroupCode = 'SearchFilters';
    var Parameters = SelectQuery.Parameters;
    var Table = SelectQuery.Items(0).FromTable;
    var Filters = SelectQuery.Items(0).Filters;
    var FiltersGroup = Filters.ItemsByCode(FiltersGroupCode);
    if (FiltersGroup != null) {
        Filters.Remove(FiltersGroup);
    }
    FiltersGroup = Filters.CreateFilters();
    FiltersGroup.Code = FiltersGroupCode;
    FiltersGroup.LogicalOperator = lotAnd;
    FiltersGroup.IsNot = false;
    //Parameters.ItemsByName('SearchString').Value = Trim(SearchValue);
    var SearchValues = SearchValue.split(' ');
    var IsAddLikeFilter = false;
    for (var i = 0; i < SearchValues.length; i++) {
        var SearchValue = Trim(SearchValues[i]);
        if (IsEmptyValue(SearchValue)) { continue; }
        if (SearchValue.length < 3) { continue; }        
        var LikeParameterName = 'SearchLikeParameter'+i.toString();
        var LikeParameter = Parameters.ItemsByName(LikeParameterName);
        if (LikeParameter == null) {
            LikeParameter = Parameters.CreateItem();
            LikeParameter.Name = LikeParameterName;
            LikeParameter.DataType = pdtUnicodeString;
            Parameters.Add(LikeParameter);
        }    
        LikeParameter.Value = SearchValue;        
        var LikeFilterCode = 'SearchLikeFilter'+i.toString();
        var LikeFilter = Filters.ItemsByCode(LikeFilterCode);
        if (LikeFilter != null) {
            Filters.Remove(LikeFilter);     
        }
        LikeFilter = Filters.CreateLikeFilter();
        LikeFilter.Code = LikeFilterCode;
        var LikeTestExpression = LikeFilter.CreateFieldFilterExpression();
        var LikeValueExpression = LikeFilter.CreateParamFilterExpression();    
        LikeValueExpression.Parameter = LikeParameter;
        LikeTestExpression.Field = Table.Fields.ItemsByName('Name');
        LikeFilter.TestExpression = LikeTestExpression;
        LikeFilter.ValueExpression = LikeValueExpression;    
        LikeFilter.LikeType = ltContain;
        LikeFilter.IsEnabled = true;  
        FiltersGroup.Add(LikeFilter);
        IsAddLikeFilter = true; 
    }
    Filters.Add(FiltersGroup);
    if (IsAddLikeFilter) {
        return FiltersGroupCode;
    } else { return ''; }    
}

Нравится

2 комментария
Лучший ответ

Алексей, почему сразу неверно? В коде написали CreateLikeFilter, вот он и применяется. А у фильтра параметр типа равен ltContain, означающий поиск по вхождению. Эта константа, как и другие, определена в скрипте scr_SysEnums:

// Constants for enum _LikeTypeEnum
ltEqual = 0x00000000;
ltContain = 0x00000001;
ltStartsWith = 0x00000002;
ltEndsWith = 0x00000003;

Попробуйте для начала заменить ltContain на ltEqual.

 

Алексей, почему сразу неверно? В коде написали CreateLikeFilter, вот он и применяется. А у фильтра параметр типа равен ltContain, означающий поиск по вхождению. Эта константа, как и другие, определена в скрипте scr_SysEnums:

// Constants for enum _LikeTypeEnum
ltEqual = 0x00000000;
ltContain = 0x00000001;
ltStartsWith = 0x00000002;
ltEndsWith = 0x00000003;

Попробуйте для начала заменить ltContain на ltEqual.

 

Спасибо, помогли.

Показать все комментарии