...

Дублирование контрагентов

Тема в разделе "Разработчикам", создана пользователем AndySwan, 26 мар 2019.

  1. AndySwan

    AndySwan New Member

    Здравствуйте. Подскажите, пожалуйста, новичку. Стоит задача обеспечить уникальность контрагентов. Используется ELMA-CE. В базе знаний есть статья Исключение дублирования контрагентов, согласно которой в Дизайнере был заведён Объект Перехватчик и создан в нём сценарий. В статье пишется, что данный метод работает и при создании нового объекта, и при изменении существующего. Пробую завести нового контрагента с ИНН, который уже есть у существующего контрагента в базе и он спокойно создаётся! Таким образом в базе теперь есть два контрагента с одинаковыми ИНН. Т.е. при создании нового контрагента проверка на уникальность не сработала. Но при этом, если вносить какие-либо изменения в контрагенте, то проверка на уникальность работает. Нельзя установить контрагенту ИНН, который уже есть у другого в базе. Так же проводится проверка при удалении. Если попробовать удалить только что созданного контрагента с не уникальным ИНН, то выдаст ошибку и удалить его можно только после изменения ИНН на уникальный. Получается, что данный сценарий не работает при создании нового контрагента и работает только при изменении существующего, что противоречит написанному в указанной в статье. Подскажите, где и что я делаю не так?
     
  2. arkarimov

    arkarimov Member

    OnPreUpdate это событие реагирующее на обновление контрагента, статью надо рассматривать как пример а не как готовое решение.
    Надо отлавливать другие событие (OnPreInsert) для предупреждения создания неуникальных
    А при обновлении надо исключать ситуацию, когда обновляются служебные поля: удаление происходит примерно так: вы жмете удалить, программа проставляет IsDeleted =true (объекты в CRM не удаляются совсем, а метятся на удаление). Поскольку IsDeleted это изменение свойства, то это с точки зрения программы обновление а не удаление - срабатывает обработчик изменения который ругается на неуникального.
    Решить второй вопрос можно вставив в начале блока проверки что-то в духе
    if Kontragent.IsDeleted return false;
    А далее уже проверять если это не обработка удаления.
    PS названия свойств писал по памяти сверяться с свойствами в объектной модели. По логике тоже не тестировал на практике такое, но полагаю что все именно так как написал.
     
  3. AndySwan

    AndySwan New Member

    Спасибо. Всё получилось с OnPreInsert.
     

Поделиться: