Всем доброго времени суток. Версия 7.12.
По ссылке - https://community.terrasoft.ua/articles/kak-sdelat-filtraciu-pola-po-ex… - хорошая инструкция как задать фильтр для поиска всех записей объекта Account для которых в объекте AccountCommunication значение колонки SearchNumber равно searchValue.
А можно ли отфильтровать список всех записей объекта Account для которых нет ни одной записи в AccountCommunication?
NOT_EQUAL, createColumnIsNullFilter - не работают, т.к. поиск идёт среди существующих записей, а нужно найти все, кроме тех, которые существуют.
Нравится
Смородинов Денис,
В таких случаях всегда нужно сначала написать запрос на sql. Насколько понимаю, Вы хотите получить такую выборку:
select *
from Account A
where not exists (select * from AccountCommunication AC
where AC.AccountId = A.Id)
Такой запрос можно построить с помощью createNotExistsFilter.
Используйте агрегатные функции, например количество для вашего фильтра, те возьмите тех контрагентов для которых средств коммуникации 0
а есть примеры использования?
Интересует только клиентская часть, т.е. ESQ-фильтр https://academy.terrasoft.ru/documents/technic-sdk/7-13/rabota-s-filtra…
Примерно так
var esq = this.Ext.create(Terrasoft.EntitySchemaQuery, { rootSchemaName: "Activity" }); esq.addAggregationSchemaColumn("DurationInMinutes", Terrasoft.AggregationType.COUNT, "UniqueActivitiesCount", Terrasoft.AggregationEvalType.DISTINCT);
Подробнее олисано тут
Всё равно до конца не понимаю. Это же расчёт суммы или количества.
Я могу посчитать количество средств коммуникации для конкретного контрагента. Т.е. чтобы отобрать контрагентов, у которых кол-во средств == 0, нужно перебрать значения количества для всех контрагентов по списку?
А если их тысячи?
Точно также поиск по конкретному номеру о котором вы писали будет выполнятся, и в том и в другом случае все преобразуется в sql запрос который будет применен к вашему набору записей.
Смородинов Денис,
В таких случаях всегда нужно сначала написать запрос на sql. Насколько понимаю, Вы хотите получить такую выборку:
select *
from Account A
where not exists (select * from AccountCommunication AC
where AC.AccountId = A.Id)
Такой запрос можно построить с помощью createNotExistsFilter.