Добрый день.
У мне при работе Выборки выбрасывает значения городов неверно, через 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 ''; }
}
Нравится
Алексей, почему сразу неверно? В коде написали 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.