...

EQL запросы

Тема в разделе "Вопросы по функционалу", создана пользователем Адель, 4 апр 2017.

  1. Адель

    Адель Member

    Подскажите как составить такой запрос: отобрать контрагентов у которых есть сделки.
    Свойство Sale отказывается принимать запрос :(
     
  2. pushkarev

    pushkarev Active Member

    Если просто условие, что просто есть сделки, то вот такой запрос работает:
    Код:
    Id in (FROM Sale SELECT Contractor WHERE Id=Id)
    (Условие "WHERE Id=Id" избыточное, но иначе у меня ругается валидатор при проверке через web)
    Если есть активные сделки, то такой:
    Код:
    Id in (FROM Sale SELECT Contractor WHERE SaleStatus ='Active')
     
  3. Адель

    Адель Member

    Алексей большое спасибо за подсказку! Такой запрос действительно работает как надо.
    Но я совершенно не понимаю как он устроен и статья в базе знаний про подобное построение запросов не рассказывает.
    Почему он начинается с id in ? И что за конструкция id=id ? Почему не работает просто запрос Sale is EMPTY (если бы я искал контрагентов у которых нет ни одной сделки), если запрос составляется в разделе Работа с клиентами?
     
  4. pushkarev

    pushkarev Active Member

    Адель, рекомендую тогда ознакомиться вот с этой статьей в базе знаний: https://www.elma-bpm.ru/kb/article-138.html
    Тут используется подзапрос, выбирает все сделки которые есть в системе, и берет у них свойство контрагент (если точнее то Id контрагента). Потом система смотрит есть ли Id контрагента среди найденной коллекции Id контрагентов сделок (в подзапросе), и те которые совпадают выводятся в результат. Надеюсь получилось объяснить.
    Конструкция id=id это хак, который означает что подойдет любой элемент, т.к. Id всегда равен сам себе. Хак нужен потому, что к сожалению валидатор EQL в браузере не пропускает подзапрос без конструкции where, и чтобы отобрать всех мы делаем такое псевдоусловие.
    Sale is EMPTY не работает, потому что это свойство не доступно для фильтрации (почему разработчики не предусмотрели, не могу сказать, но это так). Например в том же контрагенте есть свойство Relationships, которое так же множественное но его можно использовать в фильтре и конструкция Relationships is EMPTY работает, но для сделок, к сожалению нет.
     
  5. Адель

    Адель Member

    Алексей спасибо за ответ! Стало понятнее!

    Еще вопрос по eql вопросам. Как вытащить кол-во исполненных взаимоотношений за период?

    Стандартный отчет Элмы позволяет вытащить кол-во запланированных взаимоотношений (а не исполненных).
    Через eql запрос я могу вытащить клиентов у которых за период появились новые исполненные взаимоотношения. Но вот именно общее количество исполненных взаимоотношений по ответственнному сотруднику не выходит.
     
  6. pushkarev

    pushkarev Active Member

    А где вы хотите это вывести количество?
    Делать фильтр на контрагентов смысла нет, т.к. фильтруются именно контрагенты и в таблице он именно контрагентов будет показывать. Отдельного справочника, где бы можно было сделать фильтр на взаимоотношения нет, можно конечно через раздел фильтр объектов в администрировании, но я не думаю что это будет удобно и требует прав администратора.
    Поэтому я бы предложил 2 варианта: сделать свой отчет либо сделать свой портлет (либо через дизайнер, либо через портлет типа код).
    Я ранее делал отчет, который выводил количество выполненных звонков, встреч и писем за указанный период, в разбивке по исполнителям.
     
  7. Адель

    Адель Member

    Ой, Алексей, я оказывается забыл вам ответить, а сам лезу с новым вопросом ) ссори. Да, я собственно так и подумал, что так как фильтр работает отбирая именно контрагентов, то отобрать только взаимоотношения не получиться. Видимо будем думать в сторону отчета.

    А спросить я хотел по EQL запросам следующее. Как вывести контрагентов у которых прервана цепочка взаимоотношений, то есть отсутствует запланированное взаимоотношения?

    Помощник по eql коду предлагает некое NextRelationship (следующее взаимоотношение), но когда я пытаюсь написать следующую конструкцию запроса Responsible = 5 AND NextRelationship is NULL, рассчитывая увидеть тех контрагентов, у которых нет следующего запланированного взаимоотношения, он мне просто показывает контрагентов у которых вообще нет ни одного взаимоотношения.
     
  8. Адель

    Адель Member

    Сидел ковырялся. Смог сделать два запроса "от противного"

    Responsible = 5 and Relationships in (Completed = false)
    Responsible = 5 AND Relationships in (DoneDate is null)

    Которые показывают мне всех контрагентов у которых наоборот ЕСТЬ запланированные, но еще не исполненные взаимоотношения. Но вместе с NOT эти запросы отказываются корректно работать ((
     
  9. pushkarev

    pushkarev Active Member

    Попробуйте такой запрос, думаю, то что вам нужно:
    Код:
    NextRelationship is NULL OR NextRelationship in (FROM Relationship SELECT Id WHERE Completed = TRUE)
     
  10. Адель

    Адель Member

    Алексей, вы как обычно меня выручаете! Большое спасибо!
     

Поделиться: