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