Добрый день!



На вновь установленной on-site версии 7.16.2 Sales (PostgreSQL) отсутствует функционал поиска и объединения дублей. На ранее установленной on-site версии 7.14.0 Bank Customer Journey (MSSQL)  данный фунционал присутствовал сразу, без установки дополнительных программ.

Подскажите, нужно ли делать установки, описанные в статье  https://academy.terrasoft.ru/docs/user/razvertyvanie_onsite/nastrojka_konteinernikh_komponentov/massovyj_poisk_dublej/nastroit_massovyy_poisk_dubley , либо функционал поиска и объединения дублей можно добавить стандартными настройками системы (если да, просьба написать какими) 

Нравится

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

На PostgreSQL поиск дублей и глобальный поиск работает исключительно через отдельные микросервисы. Вам нужно настроить, как написано в статье по ссылке.

 

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

Трефилов Павел Сергеевич,

Спасибо за информацию!

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

В ходе работы с сервисом Дедупликации на основе глобального поиска может возникнуть проблема с зависанием процесса поиска дублей на уровне сервиса.

Зависание процесса характеризуется отсутствием результатов поиска длительное время и ограничением запуска повторной итерации поиска.



Для того чтобы завершить зависшую задачу в On-Site вам потребуется:



1. Зайти на сервер, где развернут сервис массового поиска дублей.

2. Зайти в docker-контейнер с базой MongoDB. В консоли выполнить команду:

docker exec -it dd-mongodb bash



3. Подключиться к MongoDB. В консоли выполнить команду:

mongo



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

В консоли выполнить команду:

use dup-bulk-deduplication



5. Выбрать все задачи, которые в данный момент находятся в процессе.

В консоли выполнить команду:

db.getCollection('DeduplicationTaskEntity').find({Status: 2}).pretty()



В результате выполнения этой команды можно увидеть один или больше JSONобъектов, которые описывают запущенные задачи по поиску дублей.

JSON(ы) выглядят примерно так:



{ "_id" : UUID("450da7fb-9ac5-49c5-a146-feebc3482b2e"),

"IsActual" : true,

"TokenId" : "3a868426cf95283bd0b51ef7776337ed",

"ElasticIndexName" : "EntityName",

"SourceEntityName" : "IndexName",

"TotalRecordsCount" : NumberLong(0),

"ProcessedRecordsCount" : NumberLong(0),

"MaxDuplicatesPerRecord" : null,

"StartedOn" : ISODate("2021-01-13T09:31:16.269Z"),

"FinishedOn" : null,

"FailReason" : null,

"Status" : 2,

"Rules" : [

{

"_t" : "DeduplicationRuleEntity",

"Columns" : [

"#Column"

]

}

]

}



где,



Изображение удалено.

 

Обычно задачи зависают из-за того, что количество обработанных записей меньше, чем общее количество записей в разделе (ProcessedRecordsCount < TotalRecordsCount), при этом больше нет под-задач на обработку отдельной записи из раздела, то есть часть записей останется не обработанной. На данный момент нет ответа на вопрос, куда пропадают под-задачи на обработку отдельной записи из раздела. Эта проблема находиться в проработке.



6. Необходимо завершить одну (или несколько) зависшую задачу:

  •  Если необходимо завершить ОДНУ какую-то конкретную задачу (в случае, если есть одна зависшая задача, а вторая была недавно запущена и она еще действительно находиться в процессе), то нужно скопировать ID этой задачи и выполнить следующую команду:

getCollection('DeduplicationTaskEntity').updateOne({ _id: UUID("450da7fb9ac5-49c5-a146-feebc3482b2e")}, { $set: { Status: NumberInt(5) } })

 

           Если все выполнено правильно, то результат выполнения команды будет следующий:

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

 

  • Если необходимо просто завершить ВСЕ зависшие задачи:

    db.getCollection('DeduplicationTaskEntity').updateMany({ Status: 2}, { $set: { Status: NumberInt(5) } })



    Если все выполнено правильно, то результат выполнения команды будет следущий (где N - количество обновленных задач):

    { "acknowledged" : true, "matchedCount" : N, "modifiedCount" : N }

Нравится

Поделиться

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

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

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

Нравится

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 при помощи запроса в БД.

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