Передовой опыт решения задачи поиска и устранения дублей в справочнике "Организации" в DIRECTUM

Исполнитель: Акелон

Передовой опыт решения задачи поиска и устранения дублей в справочнике "Организации" в DIRECTUM

Задача

Компании, активно использующие DIRECTUM и другие ECM системы, с течением времени все более остро сталкиваются с проблемой дублирования контрагентов. Каждый заказчик/внедренец пытается решать проблему поиска/устранений дублей в справочнике Организации локально и часто в привязке к своей индивидуальной разработке или процедуре появления контрагентов в DIRECTUM (например, выделяют ответственных людей за заведение контрагентов в DIRECTUM, реализуют интеграции для получения контрагентов из внешних систем, добавляют проверки при заведении контрагентов по совпадению определенных реквизитов (ИНН, КПП…) и пр.). Но как быть тем компаниям, где DIRECTUM уже используется многие годы и в справочнике Организации могут быть сотни дублей? Как быть крупным компаниям и/или компаниям, где регистрация документов децентрализованная и регистрацией документов занимаются десятки/сотни различных обученных делопроизводителей? На своих проектах и в своих организациях мы учим пользователей работать правильно и соблюдать все нормы, в рабочих инструкциях отдельно указываем, как и что нужно делать при создании нового контрагента в DIRECTUM, но работает это не всегда.

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

Данное решение предназначено для бизнес-администраторов, а также сотрудников, сопровождающих эксплуатацию системы DIRECTUM. Результаты работы данного решения будут видны всем пользователям системы.

Но найти дубли мало, необходимо выполнить привязку объектов системы DIRECTUM (документов, записей справочников) от записи-дубля к записи-оригиналу. С этим также успешно справляется данное решение.

Описание решения

Работа по устранению дублей состоит из двух последовательных этапов:

  1. Поиск дублей контрагентов.
  2. Анализ и обработка найденных дублей.

Поиск дублей контрагентов

Когда вы получаете входящее письмо от нового контрагента, то знаете только наименование отправителя, остальную информацию вроде ОГРН, ИНН, КПП и пр. просто негде и некогда брать, т.к. документ должен быть оперативно загружен в DIRECTUM и отправлен в электронном виде на рассмотрение руководителю. Поэтому в большинстве случаев дубли актуально искать по Наименованию. Наименование – это строковое поле, а искать дубли по строковому полю достаточно сложная задача, т.к. у двух разных контрагентов могут быть ошибочно указаны в системе разные окончания, у одного контрагента-дубликата может быть указана в наименовании форма собственности, а у другого не указана, наименования контрагентов могут состоять из нескольких слов, при этом слова в записях-дублях контрагентах могут быть указаны в разном порядке и пр.

Реализованное решение ищет дубли в справочнике Организации по значениям реквизитов Наименование, ИНН, ОГРН. Проверка по двум последним реквизитам осуществляется по полному совпадению хотя бы одного из реквизитов, проверка по строковому реквизиту Наименование осуществляется по специально разработанному алгоритму.

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

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

По факту завершения поиска администратору в DIRECTUM автоматически придет соответствующее уведомление.

Анализ и обработка найденных дублей

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

Мы реализовали алгоритм, который исходя из ряда условий (релевантность, заполненность карточки контрагента и не только) автоматически определит, какая запись относительно другой является дублем или оригиналом. Потенциальный дубль запишется в табличную часть и для него установится статус «Дубль», а потенциальный оригинал запишется в карточку справочника Группы дублей контрагентов.

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

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

После того как для каждого из потенциальных дублей администратор указал требуемый статус («Дубль», «Не дубль», «Оригинал»), он нажимает кнопку Обработать. В процессе обработки дублей для контрагентов, определенных как дубли, автоматически выполняется замена ссылок на запись-оригинал во всех карточках документов, записях справочников и вложениях задач. Записи-дубли удаляются из DIRECTUM. Для замены ссылок был использован алгоритм, реализованный в опубликованном ранее решении https://club.directum.ru/award/64755. В рамках развития данного алгоритма при реализации уже текущего решения мы добавили подробное логирование (доступно по кнопке Журнал карточки группы дублей).

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

Развитие решения

  1. Расширение набора реквизитов справочника Организации и добавление возможности настройки набора искомых реквизитов, по которым необходимо искать дубли, для администратора системы, чтобы не требовались навыки разработчика и облегчить сопровождение решения.
  2. Усовершенствование алгоритма поиска дублей по строковым полям (например, по наименованию).

Команда

  • Гасанов Дмитрий – руководитель проекта, рецензент
  • Дорфман Даниил – аналитик
  • Чугунов Александр – разработчик
53
Подписаться
Опубликовано:
31 января 2018 в 09:38
  • Утверждено
  • 4

Комментарии

Дмитрий, добрый день!

Задача поиска и объединения дублей очень актуальная для всех (уже скоро как 10 лет жду, когда утилита будет в коробке :)). Хотелось бы понять, почему решение ограничено только организациями? При регистрации входящего письма, сотрудник канцелярии создаёт после дубля организации сразу ещё и дубль контактного лица (подписанта входящего письма). Более того, Я ещё столкнулся с тем, что и в ТС Работники сотрудник с правами администратора может добавить дубли (с помощью импорта из AD). И это тоже нужно как-то уметь объединять. Всё к тому, что много написано на эту тему, например https://club.directum.ru/question/31246 и есть сценарий в https://club.directum.ru/post/92. Но, к сожалению, сценарий VTBRemoveDublRecord с версии 4.9.1 не модифицировался. Вопрос у меня к Вам есть ли в Вашем коде общее с кодом сценария VTBRemoveDublRecord?

Добрый день, Константин.

Данное решение является продвинутой реализацией решения https://club.directum.ru/award/64755, которое в свою очередь по логике работы схоже со сценарием https://club.directum.ru/post/92. Оба этих решения осуществляют замену ссылок на записи справочников в объектах DIRECTUM, но запись-оригинал и запись-дубликат определяет сам пользователь. Т. е. пользователь заранее должен самостоятельно обнаружить факт наличия дублей, чтобы выполнить обработку. 

Основная задача описываемого решения предоставить механизм автоматического поиска дублей в справочнике Организации по одному из реквизитов: Наименование, ИНН, ОГРН. Тем самым пользователи избавляются от необходимости самостоятельно выискивать дубли.

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

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

 

Отличное решение! Очень часто возникает подобная ситуация с дублями!

Подскажите, а запуск обработки дублей происходит только вручную? Например, нет ежедневного агента, обрабатывающего справочник Организации? И как быстро происходит обработка одной группы дублей, начиная от поиска их и заканчивая обработкой связанных объектов?

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

Скорость поиска дублей зависит от общего количества записей в справочнике Организации, и в среднем составляет около 850-900 записей в минуту. Например, при наличии 50 тыс. записей поиск занимает порядка 60 минут. 

Скорость обработки каждой группы, где производится замена ссылок с дублирующих записей на оригинал по всем объектам системы, зависит от количества ссылок. В среднем составляет около 10-15 секунд.

Авторизуйтесь, чтобы написать комментарий