Вопрос

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

Добрый день.

 У мне при работе Выборки выбрасывает значения городов неверно, через 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.

 

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

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