...

Категории Контрагентов

Тема в разделе "Разработчикам", создана пользователем Mary, 17 авг 2017.

  1. Mary

    Mary New Member

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

    Код такой:

    var category_for_it = EntityManager<Category>.Instance.Find (p => p.Name == "ОТП");
    var data_spis = EntityManager<Contractor>.Instance.FindAll ();
    foreach (var str_r in data_spis)
    {
    if (str_r.StatusItTest == "1" || str_r.StatusItTest == "2" || str_r.StatusItTest == "3" || str_r.StatusItTest == "5")
    {

    //присваиваем категорию
    foreach (var item in category_for_it)
    {
    //str_r.Categories.Clear(); //предварительно очищаем уже имеющуюся
    str_r.Categories.Add (item);
    //присваиваем

    }

    }
    }

    Может все это не так делается и что-то я не так понимаю, но это не работает, а примеров по категориям вообще нет в справочниках по Элме.
    С контрагентами проблем не должно быть, все загружались скриптом, не правились, данные по ним корректно считываются, переобновляются.
     
  2. lyashek.s

    lyashek.s New Member

    Коммерческая версия Стандарт (Postgres).
    Были задачи загрузки большого числа контрагентов и возможностей.
    Категории настраивали через веб часть: Администрирование- Настройки CRM - Категории / Правила назначения категорий.
    Далее в коде при загрузке использовали
    var ncat = EntityManager<Category>.Instance.Find(c => c.Name == "Работа с возможностями").First();
    newlead.Categories.Add(ncat);
    PublicAPI.CRM.Lead.EnableInheritPermissions(newlead);
    После чего возникали проблемы из-за зависания хранимых процедуры checkpermwhenaddleadcategories, писали в поддержку, процедуру правили.
    Временно от использования категорий отказались, полноценно после исправлений не вернулись.
    Посмотрите при зависаниях что выполнятся в БД?
     
    1 это нравится
  3. fizik

    fizik New Member

    Mary, ваш скрипт низкоэффективен - вы получаете всех контрагентов, а потом отбираете из них нужных. Если контрагентов много - это действительно будет загружать систему. Попробуйте сразу делать выборку только из тех, у кого нужно сменить категорию. Что-то вроде этого:

    var category_for_it = EntityManager<Category>.Instance.Find ("Name LIKE 'ОТП'").FirstOrDefault(); // для поиска лучше использовать фильтр или EQL
    var data_spis = EntityManager<Contractor>.Instance.Find("StatusItTest = '1' OR StatusItTest = '2'").ToList();
    foreach (var item in data_spis)
    {
    item.Categories.Clear();
    item.Categories.Add (category_for_it);
    }
     

Поделиться: