Добрый день!
Не могу сообразить каким образом осуществляется вызов проверки на дублирование контрагента при сохранении записи.
Мне нужно сделать проверку при изменении поля, например пользователь ввел ИНН, нужно сразу сделать проверку.
Подскажите, пожалуйста, где можно посмотреть?
Нравится
"Молчанов Дмитрий Павлович" написал:Не могу сообразить каким образом осуществляется вызов проверки на дублирование контрагента при сохранении записи.
При событии Post на Dateset-е, для которого настроен поиск дублей, на уровне ядра срабатывает поиск, и результаты передаются в функцию BaseDuplicatesFound в скрипте scr_BaseDuplicatesFoundHandler. В этом скрипте организовано открытие окна «Найдены дублирующиеся записи» с нужными данными.
Непосредственно поиск осуществляется хранимкой вроде tsp_AccountDS (для каждого раздела она генерируется автоматически при настройке правила поиска), хранимка вызывается на уровне ядра.
Дмитрий, чем не подходит настройка проверки на дублирование базовыми средствами?
Вы можете перейти в Файл - Настройки - Правила поиска дублей и создать правило, при котором поиск будет осуществляться в момент сохранения записи (можно задать настройку активации поиска в момент изменения значения в определенном поле):
Требуется реализовать проверку на дубли не при сохранении записи, а при заполнении определенных полей (Наименование, ИНН, Телефон).
Мне кажется, это будет не очень удачный вариант: при вводе каждой буквы проверять тысячи записей. На заполненной базе существующая проверка дублей при сохранении «задумывается» на несколько секунд.
Или там будет отдельная кнопка «проверить на дубли»?
Ну можно сделать не на DataChange, а на OnExit у контрола. На текущий момент отрабатывает в течении секунды примерно.
Дмитрий, тогда в нужный момент выполняйте вызов хранимой процедуры tsp_AccountDS, затем анализируйте результат.
Немного ввёл в заблуждение, при сохранении вызывается хранимая функция fn_AccountLDS, она и вернёт список записей, которые могут быть дублями.
А tsp_AccountDS — при ручном поиске дублей из меню.
Можно настроить правило, как показала на рисунке Наталия, поставить breakpoint в скрипте scr_BaseDuplicatesFoundHandler и посмотреть, какие данные туда передаются при сохранении записи, у которой есть дубли.
Потом запрограммировать на событии OnExit (или любом другом) вызов BaseDuplicatesFound с такими же параметрами, данные получать из хранимки fn_AccountLDS.
Также учтите, что в окне «Найдены дублирующиеся записи» есть кнопка «Объединить», она может работать некорректно, если запись ещё не сохранена, а хотите её слить.
Добрый день!
в руководстве администратора http://www.training.terrasoft.ru/system/files/TS_AG_3.4.0.pdf
параграф 4.4. Настройка правил поиска дублей с.152
написано что для версий Террасофт 3.Х доступно окно настроек для правил поисков дублей [Правила поиска дублей]
у нас версия 3.4.1 но данной настройки у нас нет.
подскажите пожалуйста в чем может быть проблема?