Изменения работы поиска дублей контрагентов

Добрый день!
Подскажите, пожалуйста, каким образом можно изменить механизм работы поиска дублей при добавлении контрагента? Нужно добиться вывода в списке дубликатов тех контрагентов, названия который и частично совпадают с названием нового.

Заранее спасибо!

Нравится

5 комментариев

Данная тема уже подымалась на комьюнити. Насколько я знаю готовых решений нет. Вам следует посмотреть реализации алгоритмов "нечеткого поиска" на других интернет ресурсах, например на 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.

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