Добрый день!
Подскажите, пожалуйста, каким образом можно изменить механизм работы поиска дублей при добавлении контрагента? Нужно добиться вывода в списке дубликатов тех контрагентов, названия который и частично совпадают с названием нового.
Заранее спасибо!
Нравится
Данная тема уже подымалась на комьюнити. Насколько я знаю готовых решений нет. Вам следует посмотреть реализации алгоритмов "нечеткого поиска" на других интернет ресурсах, например на SQL.ru
Наверное, не совсем правильно описал проблему.
Хочу получить в списке дублей такие же результаты, как если в Настройках пользователя -> Общие -> Быстрый фильтр, фильтра типа like имеет значение "Включает" или по умолчанию).
И при сохранении КА выполнялась проверка существование подобных записей по типу:
WHERE (Name LIKE N'%' + @name + N'%')
Но я не знаю, где именно реализована эта проверка. Подскажите пожалуйста.
Спасибо.
McCoy, привожу пример реализации поиска дублей по like. К сожалению, из-за ограничения во времени пример доработан не полностью: дубли находит, но некорректно отображает их количество в реестре родительской детали (всегда равно 1). Но думаю, для примера пока будет достаточно и этого.
Для реализации необходимой Вам функциональности нужно следующее:
1. По аналогии с функцией AddDetailFilter скрипта scr_SubjectDuplicates, необходимо создать свою функцию, использующую Like-фильтр, и использовать её вместо AddDetailFilter в скриптах поиска дублей:
function AddDetailFilterLike(Select, Dataset, DataFieldName) { var DataField = Dataset.DataFields.ItemsByName(DataFieldName); var Filters = Select.Filters; var CompareFilter = AddLikeFieldFilter(Select, DataFieldName, DataFieldName, ltContain, Filters); }
2. По аналогии с функцией AddCountCompareFilter скрипта scr_DuplicatesUtils создать свою функцию и использовать её вместо вышеуказанной:
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; }
Если создать системную настройку для типа оператора в поиске дублей, появится возможность более универсального поиска. Просто вместо вызова этих функций нужно будет вставить проверку на значение системной настройки и в зависимости от него вызывать нужную функцию.
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
Пожалуйста :).
Появилось время доработать отображение количества дублей. Полный вариант описан здесь.
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.