Публикация

Примеры фильтров в детали

Код добавляется на ту страницу редактирования, где выведены детали. Например, AccountPageV2

ВАЖНО! Если мы пишем свои фильтры, то первым делом необходимо прописать основной фильтр для связи детали. Аналог того, что мы выбираем в мастере при выводе детали на страницу.

ПОСЛЕДОВАТЕЛЬНОСТЬ ДЕЙСТВИЙ:

1. Объявить метод фильтрации в месте вывода детали на странице. Пример ниже

"ContractDetailV20ddfbca0": {
    "schemaName": "ContractDetailV2",
     "entitySchemaName": "Contract",
     "filter": {
        "detailColumn": "Account",
         "masterColumn": "Id"
    },   //не забываем здесь поставить запятую
    "filterMethod": "ContractFilter" // добавляем такую строчку. Название (справа) может быть любым.
},

Описать сам метод в блоке methods{}. Примеры ниже.

ПРИМЕРЫ:

2.1 Стандартный фильтр для связи детали. В данном примере на странице Контрагента наполняет деталь Договоры записями, в которых в поле "Account" указан текущий Контрагент.

ContractFilter: function() {
    var filterGroup = new this.Terrasoft.createFilterGroup(); //создаем группу фильтров
    filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND; //определяем тип фильтра AND или OR
    filterGroup.add("ByAccountFilter", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.EQUAL, "Account", this.get("Id"))
    ); //Собственно, само условие
    return filterGroup;
},

"ByAccountFilter" - название элемента группы фильтров. Может быть любым

Возможные ComparisonType можно посмотреть в консоле, введя Terrasoft.ComparisonType и нажав Enter

Общий вид примерно такой: this.Terrasoft.ComparisonType.EQUAL, Памаметр1, Параметр2

2.2 Фильтр по типу. Выводит записи, у которых Тип НЕ равняется заданным (используем ID нужных нам типов)

ContractFilter: function() {
    var filterGroup = new this.Terrasoft.createFilterGroup();
    filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
    filterGroup.add("ByAccountFilter", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.EQUAL, "Account", this.get("Id"))
    );
    filterGroup.add("ByTypeFilter1", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.NOT_EQUAL, "Type", "009c6fa7-2e35-4a94-afd5-03ad8c3eff38")
    );
    filterGroup.add("ByTypeFilter2", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.NOT_EQUAL, "Type", "42b49a15-1d6c-4fa3-b24a-45711ba90cb3")
    );
    return filterGroup;
},

Также, если нужно фильтровать запись по значению колонки внутри справочника нашего обьекта(например фильтровать договора, по колонке категории продукта в договоре), можно использовать такой синтаксис в кавычках: вместо "Type" пишем "Product.Category".

2.3 Фильтр по незаполненному полю. Выводит записи, у которых не заполнено заданное поле

ContractFilter: function() {
    var filterGroup = new this.Terrasoft.createFilterGroup();
    filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
    filterGroup.add("ByAccountFilter", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.EQUAL, "UsrAccount", this.get("Id"))
    );
    filterGroup.add(this.Terrasoft.createIsNullFilter(
        this.Ext.create("Terrasoft.ColumnExpression", {columnPath: "UsrEndDate"}) // UsrEndDate - колонка детали, которая пустая
    ));
    return filterGroup;
},

2.4 Фильтр по дате. Выводит записи, у которых дата лежит в пределах от "сегодня" до "сегодня + 60 дней" (значения в миллисекундах)

GraphicFilter: function() {
    var now = new Date();
    var filterGroup = new this.Terrasoft.createFilterGroup();
    filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
    filterGroup.add("ByAccountFilter", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.EQUAL, "UsrAccount", this.get("Id"))
    );
    filterGroup.add("ByDateFilter1", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.GREATER_OR_EQUAL, "UsrDATE", this.Terrasoft.startOfDay(now))
    );
    filterGroup.add("ByDateFilter2", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.LESS_OR_EQUAL, "UsrDATE", this.Terrasoft.endOfDay(new Date(new Date().getTime() + 5184000000)))
    );
    return filterGroup;
},

2.5 Пример вложенности групп фильтров. Выводит связанные записи, у которых Стадия или 1я, или 2я.

Создаем две группы фильтров с операторами AND и OR. Перечисляем все элементы групп в произвольном порядке. В конце вкладываем группу OR в группу AND

OppFilter: function() {
    var filterGroupAnd = new this.Terrasoft.createFilterGroup();
    filterGroupAnd.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
    var filterGroupOr = new this.Terrasoft.createFilterGroup();
    filterGroupOr.logicalOperation = this.Terrasoft.LogicalOperatorType.OR;
    filterGroupAnd.add("ByAccountFilter", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.EQUAL, "Account", this.get("Id"))
    );
    filterGroupOr.add("ByStageFilter1", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.EQUAL, "Stage", "c2067b11-0ee0-df11-971b-001d60e938c6")
    );
    filterGroupOr.add("ByStageFilter2", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.EQUAL, "Stage", "325f0619-0ee0-df11-971b-001d60e938c6")
    );
    filterGroupAnd.addItem(filterGroupOr);
    return filterGroupAnd;
},

 

Нравится

Поделиться

2 комментария

Можете добавить пример, если колонкой детали и объекта является контрагент, а так же необходима дополнительная фильтрация по логическому полю "Оплата поступила". 

Evgenyi пишет:

Получилось самостоятельно найти решение:. Необходимо обозначить, что контрагент является справочным полем (value).

ContractFilter: function() {
    var filterGroup = new this.Terrasoft.createFilterGroup();
    filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
    filterGroup.add("ByAccountFilter", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.EQUAL, "Account", this.get("Account").value)

Показать все комментарии