Добрый день!
Подскажите, пожалуйста, каким образом можно изменить механизм работы поиска дублей при добавлении контрагента? Нужно добиться вывода в списке дубликатов тех контрагентов, названия который и частично совпадают с названием нового.
Заранее спасибо!
Нравится
Данная тема уже подымалась на комьюнити. Насколько я знаю готовых решений нет. Вам следует посмотреть реализации алгоритмов "нечеткого поиска" на других интернет ресурсах, например на SQL.ru
Наверное, не совсем правильно описал проблему.
Хочу получить в списке дублей такие же результаты, как если в Настройках пользователя -> Общие -> Быстрый фильтр, фильтра типа like имеет значение "Включает" или по умолчанию).
И при сохранении КА выполнялась проверка существование подобных записей по типу:
[sql]
WHERE (Name LIKE N'%' + @name + N'%')
[/sql]
Но я не знаю, где именно реализована эта проверка. Подскажите пожалуйста.
Спасибо.
McCoy, привожу пример реализации поиска дублей по like. К сожалению, из-за ограничения во времени пример доработан не полностью: дубли находит, но некорректно отображает их количество в реестре родительской детали (всегда равно 1). Но думаю, для примера пока будет достаточно и этого.
Для реализации необходимой Вам функциональности нужно следующее:
1. По аналогии с функцией AddDetailFilter скрипта scr_SubjectDuplicates, необходимо создать свою функцию, использующую Like-фильтр, и использовать её вместо AddDetailFilter в скриптах поиска дублей:
[javascript]
function AddDetailFilterLike(Select, Dataset, DataFieldName) {
var DataField = Dataset.DataFields.ItemsByName(DataFieldName);
var Filters = Select.Filters;
var CompareFilter = AddLikeFieldFilter(Select, DataFieldName, DataFieldName, ltContain, Filters);
}
[/javascript]
2. По аналогии с функцией AddCountCompareFilter скрипта scr_DuplicatesUtils создать свою функцию и использовать её вместо вышеуказанной:
[javascript]
function AddCountCompareFilterLike(ExpressionFilters, ParentFromTable,
ParentFromTableAlias, SelectFromTable, SelectFromTableAlias,
CheckFieldName) {
var TestField = ParentFromTable.Fields.ItemsByName(CheckFieldName);
var ValueField = SelectFromTable.Fields.ItemsByName(CheckFieldName);
var CompareFilter = ExpressionFilters.CreateLikeFilter();
CompareFilter.Code = GenNewKeyValueFromCollection(ExpressionFilters, 'LikeFilter');
ExpressionFilters.Add(CompareFilter);
CompareFilter.TestExpression = AddFieldExpression(ExpressionFilters,
CompareFilter, TestField, SelectFromTableAlias);
CompareFilter.LikeType = ltContain;
CompareFilter.ValueExpression = AddFieldExpression(ExpressionFilters,
CompareFilter, ValueField, ParentFromTableAlias);
return CompareFilter;
}
[/javascript]
Если создать системную настройку для типа оператора в поиске дублей, появится возможность более универсального поиска. Просто вместо вызова этих функций нужно будет вставить проверку на значение системной настройки и в зависимости от него вызывать нужную функцию.
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
Пожалуйста :).
Появилось время доработать отображение количества дублей. Полный вариант описан здесь.
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.