Всем добрый день.

Кто-то сталкивался/реализовывал объединение дублей непосредственно в Деталях? Такая возможность есть или объединение работает только на справочниках и разделах?

Нравится

1 комментарий

Евгений, здравствуйте!

На данный момент нет возможности сливать записи на детали. Слияния записей доступно только для реестра раздела и в справочниках.
Как обходной вариант можете зарегистрировать справочник в разделе "Справочники" по объекту, который у вас является деталью и там попробовать объединить записи.

На ответственной команде разработки уже зарегистрирована идея по реализации функционала слияния записей на деталях.

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

Добавляю в игнор лист по кнопке "Не считать дублями".

Но что делать если нажал нечаянно и хочу вернуть обратно?

Нравится

2 комментария

Удалить запись из таблицы AccountDuplicateSearchGroupExclusions.

Василий, решение вашего запроса зависит от механизма дедупликации, который используется на сайте.
Для механизма поиска дублей на хранимых процедурах достаточно удалить записи  из таблиц AccountDuplicateSearchGroupExclusions/ContactDuplicateSearchGroupExclusions для очистки всех записей, которые были помечены как "Не считать дублями".
Для механизма поиска дублей с использованием сервиса дедупликации ( детальнее в статье https://academy.terrasoft.ua/docs/user/ustanovka_i_administrirovanie/ra…) для сброса признаков "Не являются дублями" всех помеченных пачек дублей на сервисе дедупликации необходимо почистить таблицу UniqueEntity в mongodb. 

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

Коллеги, имею проблемы.

Извините, за сумбурность изложения, в силу моей неопытности.

Есть у меня бизнес процесс, который создает, клиентов на основание импортированных договоров

То есть работает все так:   импортируются данные (посредством импорта exel) в договоры, в договорах фиксируется вся информация, в том числе информация по клиенту «ФИО, ИНН, другая информация», состояние новых договоров «новые».

Потом на основание сигнала, о только-что созданных договорах  , запускается бизнес процесс, который вытягивает информацию с «договоров» о клиентах и создает клиентов в разделе «физ лица»,

Клиенты у договоров повторяются, то есть в первоначальном файле для импорта, у разных договорах  клиенты могут повторятся.

Нужно создавать в разделе «физ лица», только уникальных клиентов, для этого в бизнес процессе по созданию клиентов, есть механизм проверки, если клиент уже есть его не добавляют.

Проблема в следующем, я так понимаю, когда экземпляры бизнес процесса по создания клиентов зарускаются одновременно, создаются дубли.

 

Пример: есть

-договор 1 (из первоначального файла импорта) от клиента 1   

-договор 2  от того же клиента 1

После импорта создаются две записи в разделе «договора»   : договор 1, и договор 2 со статусом «новый»

По сигналу запускается от договоров, запускается бизнес процесс по созданию клиентов.

Процессы запускаются одновременно, соответственно создаются дубли по клиенту 1, потому-что оба экземпляра процесса, проходят проверку на то, что клиент новый, как запускать экземпляры процесса с задержкой?,  или  есть другое решение, спасибо за любую помощь

Нравится

3 комментария
Лучший ответ

Скорее всего, нужно вынести обработку заимпортированных записей в отдельный процесс (где уже идёт последовательно).

  • Если импорт выполняет администратор, то он может запускать этот процесс вручную.
  • Если же импорт выполняют пользователи, то можно запускать процесс по расписанию. Тогда процесс проверяет, не запущена ли уже такая обработка, и затем последовательно обрабатывает записи.
  • Возможно, как-то можно поймать сигнал окончания импорта (уведомление-то создаётся), и запускать процесс последовательной обработки в этот момент

Скорее всего, нужно вынести обработку заимпортированных записей в отдельный процесс (где уже идёт последовательно).

  • Если импорт выполняет администратор, то он может запускать этот процесс вручную.
  • Если же импорт выполняют пользователи, то можно запускать процесс по расписанию. Тогда процесс проверяет, не запущена ли уже такая обработка, и затем последовательно обрабатывает записи.
  • Возможно, как-то можно поймать сигнал окончания импорта (уведомление-то создаётся), и запускать процесс последовательной обработки в этот момент

Какие условия проверки наличия контрагента в БП? Она точно корректно отрабатывает? 

Роман, если подход Владимира не устраивает, можно в запускающемся при создании договора БП делать проверку, существуют ли другие договора с таким же именем пока не существующего в базе клиента и если есть, то не создавать, а взять паузу при помощи таймера и после неё привязаться к уже создавшемуся. Чтобы по первому такому создался, можно при выборке новых договоров без указанного контакта добавить фильтр по дате или номеру, чтобы учитывать только более ранние чем тот, по которому запущен процесс.

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

На сегодняшний день при настройке правил поиска дублей можно использовать только строковые и справочные поля. Хотелось бы, чтобы такая возможность была и для полей с типом 'Дата'.

Была бы благодарна за поддержку этой идеи и фидбек других участников community по поводу настройки правил поиска дублей.

Поделитесь, возникала ли у Вас потребность при настройке правил поиска дублей использовать другие типы, например, 'Даты' или числа?

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

Чтобы искать по дню рождения?

Владимир Соколов,

Да, если речь идет о контактах.

Также может быть дата подписания или дата подключения.

Алла, идея иметь возможность искать дубли по типу данных «дата» уже зафиксирована. Спасибо за проявленный интерес к развитию платформы.

Зверев Александр,

А мне в поддержке ответили, что ранее таких запросов от клиентов не поступало. Вот я и решила узнать, насколько это редкий кейс.

Алла, это достаточно редкое пожелание. Идея зафиксирована, но планов реализации в конкретных версиях пока нет.

Зверев Александр,

Знаешь, у меня сложилось ощущение, что большинство пользователей уже махнуло рукой на озвучивание своих пожеланий, которые могут быть реализованы никогда в одной из версий в 22 веке))) и каждый прикручивает свой костыль(

Алла Савельева пишет:
большинство пользователей уже махнуло рукой на озвучивание своих пожеланий

Надо продолжать. Во-первых, 22-й век наступит. Во-вторых, может быть, кто-то расскажет, как делал свой костыль :) 

Или даст ссылку на маркет, где уже есть такое дополнение. Может, даже бесплатное.

Вчера по одной пятилетней идее такое нашёл.

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

Добрый вечер.

Хотелось бы добавить кастомное правило поиска дублей. Действовал с оглядкой на https://academy.terrasoft.ru/documents/technic-sdk/7-14/dobavlenie-pravila-poiska-dubley ,но возникла сложность при объявлении типов параметров, если аналог с mscql UNIQUEIDENTIFIER - uuid, то какой аналог у CreatingObjectInfo? 

Будет ли достаточно создания только одной процедурки или имеются еще какие-то не очевидные, но нужные действия

Как она будет взаимодействовать с elasticsearch в таком случае

И хоть и неправильную но все же процедуру я пытался прикреплять к правилу, согласно гайду, но с пустым телом "RuleBody" она не хотела функционировать

Было бы прекрасно, если бы имелся какой-нибудь пример на postgresql.

Bpm'online развернут on-site. Глобальный поиск и тд настроены

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

Нравится

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

Посмотрите статью в академии ДОБАВЛЕНИЕ ПРАВИЛА ПОИСКА ДУБЛЕЙ

Руслан, добрый день!

Для PostgreSQL доступен только новый функционал дедупликации, который завязан на сервис глобального поиска.
Инструкция по настройке массового поиска дублей для приложений on-site:
https://academy.terrasoft.ru/documents/administration/7-14/nastroyka-massovogo-poiska-dubley

Григорий Чех, На неё я и оглядывался, когда пытался добавить правило

Мотков Илья,

В этом и проблема, что я настроил глобальный поиск и массовый поиск дубликатов, но нужно добавить "неординарное" правило

Для Postgre есть только поиск дублей на основе ElasticSearch. Старые разработки на основе хранимых процедур работать не будут.

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

Sales Enterprise

Версия 7.13.3.481

Настраиваю новое правило поиска дублей по полю  "Основной телефон" согласно инструкции:
https://academy.terrasoft.ru/documents/technic-sdk/7-13/dobavlenie-pravila-poiska-dubley
Признак "Использовать правило при сохранении" установлен: https://yadi.sk/i/546AVOF8xgA95A

Но при создании очевидного дубля по полю основной телефон новая запись благополучно сохраняется.

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

 

Нравится

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

Вероятно, новое правило было создано неверно. Если самостоятельно разобраться в инструкции не получилось, попробуйте обратиться в техническую поддержку, описав свои шаги подробнее и предоствив доступ к серверу.

Правило отрабатывает корректно при глобальном поиске.
Дополнительных настроек кроме признака "Использовать при сохранении" в академии не нашёл.

Если бы правило было настроено верно, оно бы отрабатывало везде. Кроме простановки галочки ещё нужно написать хранимую процедуру, о чём написано в инструкции.

Так же выявлено, что и базовые правила не отрабатывают при сохранении

Базовые правила должны отрабатывать при сохранении контакта и контрагента.

О сохранении Контрагента и идёт речь

Попробуйте развернуть демо-версию того же продукта и проверить на ней. Если там дубли проверяются, то дело в доработках. Если тоже нет, то сообщите в поддержку.

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

Добрый день!

У одного из менеджеров при открытии разделов Контрагенты и Продажи открываются Итоги раздела, а не списочное представление.

Данная проблема возникает из-за дублей записей для данного пользователя в SysProfileData. Необходимо удалить дубли и разделы будут открываться корректно.

Дубли мы нашли, подскажите пожалуйста, удалять же нужно более новую запись?

Нравится

1 комментарий

Александр, здравствуйте!

Особой разницы нет, главное для корректной работы функционала - чтоб осталась одна запись. Для удобства, можем порекомендовать удалять ту запись, у которой дата изменения более раняя. Тогда последние настройки клиента останутся.

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

Коллеги, выручайте. У меня были записи в разделе, которые создали разные контакты, но данные контакты по факту являются дубликатами.
Сделал поиск дубликатов для контактов, объединил найденные дубликаты. 

И получилось так, что у части записей затерлось поле "Создал", select возвращает данное поле со старым id создавшего, которого по факту уже нет так-как он объединился.

Как вернуть все обратно? Если возможность посмотреть логи дубликатов?

Я ожидал, что после объединения дубликатов, система сама перезапишет во всех записях поле создал на новый id.

Нравится

1 комментарий

Добрый день!
 

Дедупликация записи - это не создание новой.
Фактически, Вы удаляете одну из записей, и обновляете значения оставшейся.

Вернуть результат дедупликации пользовательскими средствами нельзя.
Вы можете поднять бэкап БД до обновления и перенести значения CreatedBy при помощи запроса в БД.

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

Добрый день!
Есть ли здесь люди которые могут подробно описать процесс модифицирования локального поиска дублей по Контрагентам (предположим нужно сделать поиск по одному из новых полей и новой детали)?

Ещё есть вопрос, возможно ли модифицировать поиск так, чтобы он запускался не по сохранению контрагента, а именно в тот момент когда я кликну, например, произвольный пункт меню?

Нравится

2 комментария

Здравствуёте!
Реализовать поиск дублей при сохранении достаточно не просто. Но если вкратце:
1. Заместить метод getDataForFindDuplicatesService в DuplicatesSearchUtilitiesV2
2. Унаследоваться от класса SingleRequest из SearchDuplicatesService и добавить своё свойство.
3. Создать свой SingleRequesListener чтобы заменить вызов SingleRequest на свой класс
4. Унаследоваться от DeduplicationProcessing и изменить методы AddElementsToRow и GetPreparedXml из SearchDuplicatesService
5. В хранимкке tsp_FindDuplicate нужно изменить под себя CreatingObjectInfo

На счёт "произвольного вызова" - можно, просто надо вызывать тот же метод, что и при сохранении вызывает поиск дублей.

"Мотков Илья" написал:На счёт "произвольного вызова" - можно, просто надо вызывать тот же метод, что и при сохранении вызывает поиск дублей.

Дело в том что вызывается метод this.findOnSave(callback, scope) со своим скоупом и колбэком, а откуда они берутся не понятно, потому что гуляя так по колбэку внутрь приходишь к all-combined.js и всё, конец..

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

Здравствуйте!

Передо мной стоит следующая задача: при создании лида проверять по полю "название контрагента" наличие уже существующих контрагентов с таким именем.
Создание лида идет из миникарточки.

Вопрос в том, как это сделать лучше, чтобы нагрузка была не очень большой на систему.
нужно чтобы ответ о наличии контрагента я получала до сохранения (синхронность)
существующие контрагенты проверяются как в правиле поиска дублей, например, допуская наличие/отсутствие кавычек, прописные/строчные буквы.
может возможно использование существующего поиска дублей для контрагентов, но только при создании лида и с синхронным ответом.
вроде как это можно сделать запросом через getEntityCollection, но там скорее всего уже будет большая нагрузка и вроде как условия по наличию/отсутствию кавычек и равенстве прописных и строчных букв там в условии не задать

было бы замечательно делать эту проверку сразу после заполнения поля "название контрагента", но я не знаю насколько это реализуемо.

Нравится

8 комментариев
Лучший ответ

"Zaitova Liubov" написал:и вроде как условия по наличию/отсутствию кавычек и равенстве прописных и строчных букв там в условии не задать

Сохраняйте для всех контрагентов в скрытом поле имя, по которому искать, убирая кавычки, приводя к UPPER, убирая всякие возможные части текста типа А/O, OOO и другие.

"Zaitova Liubov" написал:и вроде как условия по наличию/отсутствию кавычек и равенстве прописных и строчных букв там в условии не задать

Сохраняйте для всех контрагентов в скрытом поле имя, по которому искать, убирая кавычки, приводя к UPPER, убирая всякие возможные части текста типа А/O, OOO и другие.

Любовь, добрый день.

Любые механизмы поиска дублей, тем более с синхронным ответом, будут создавать нагрузку. То, что Вы хотите реализовать - это LIKE запрос по текстовому полю в таблице, в которой теоретически может быть и сто тысяч записей, и миллион. Скорее всего, Вы просто не получите ответ на клиенте за 30 секунд. Как по мне, более оптимальным вариантом является использованием существующего асинхронного механизма. запуская его, скажем, один раз в неделю.

"Мотков Илья" написал:

Любовь, добрый день.

Любые механизмы поиска дублей, тем более с синхронным ответом, будут создавать нагрузку. То, что Вы хотите реализовать - это LIKE запрос по текстовому полю в таблице, в которой теоретически может быть и сто тысяч записей, и миллион. Скорее всего, Вы просто не получите ответ на клиенте за 30 секунд. Как по мне, более оптимальным вариантом является использованием существующего асинхронного механизма. запуская его, скажем, один раз в неделю.


задача в двух словах в том, чтобы не дать создать лид, если такой(указанный в поле название контрагента) контрагент уже есть, просто если запускать этот механизм раз в неделю, это некорректно, так как по лиду уже будет запущен процесс, поэтому хотелось бы не исправлять проблему с наличием дубля,а предотвращать ее.

"Zaitova Liubov" написал:Вы хотите реализовать - это LIKE запрос по текстовому полю в таблице, в которой теоретически может быть и сто тысяч записей, и миллион.

а если делать как советовал Владимир Соколов:" Сохраняйте для всех контрагентов в скрытом поле имя, по которому искать, убирая кавычки, приводя к UPPER, убирая всякие возможные части текста типа А/O, OOO и другие.". то это уже будет equal, а не like и должно быть быстрее. все равно getEntityCollection не справится достаточно быстро? и еще вопрос - это вообще реализуемо, что можно дождаться его ответа и по результату дать/не дать сохранить?

Теоретически можно сделать что-угодно.)

Как заместить логику сохранения обсуждали буквально недавно: http://www.community.terrasoft.ru/forum/topic/25618
Можете аналогично переопределить метод save, и, допустим, строить запрос вида:
SELECT COUNT(*) FROM Account WHERE NAME = 'MyName', и если COUNT = 0 - сохранять запись, вызывая callParent. Однако, в таком случае Name в Контрагенте должен быть также без ООО, кавычек и прочего.

"Zaitova Liubov" написал:то это уже будет equal, а не like и должно быть быстрее

Боюсь, что для такой задачи даже Like недостаточно, нужно учиться у Google распознавать схожие записи, например "Аксиома" и "Аксиомаа"

"Мотков Илья" написал:Можете аналогично переопределить метод save

А может, лучше на Validation повесить?

"Владимир Соколов" написал:А может, лучше на Validation повесить?

Если можно логику выполнить синхронно то да, иначе:
http://www.community.terrasoft.ua/forum/topic/25618#comment-69035

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