Добрый день!
Нужно отифильтровать деталь по колонке Купили (UsrPayed). Как это можно сделать. Быстрые фильтры не подойдут, т.к сбрасываются после обновления страницы
![]()
Нравится
отфильтровать во время загрузки (т.е. всегда отобрать только "да"?) или нужен какой-то переключатель?
В любом случае нужно смотреть в сторону filterMethod, на странице где инициализируется деталь.
Пример кода
"ContactCareerDetailV20234b804": { "schemaName": "ContactCareerDetailV2", "entitySchemaName": "ContactCareer", "filter": { "detailColumn": "Account", "masterColumn": "Id" }, "filterMethod": "actualContactFilter" } типа того, а в actualContactFilter писать esq actualContactFilter: function() { var AccountId = this.get("Id"); var filterGroup = new this.Terrasoft.createFilterGroup(); filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND; filterGroup.add("AccountFilter", this.Terrasoft.createColumnFilterWithParameter( this.Terrasoft.ComparisonType.EQUAL, "Account", AccountId)); filterGroup.add("LogicalFilter", this.Terrasoft.createColumnFilterWithParameter( this.Terrasoft.ComparisonType.EQUAL, "UsrLogical", true)); return filterGroup; },
Если переключателем, то там уже кода сильно больше, надо делать messages, возможно еще сохранение этого переключателя в кэше пользователя.
В схеме детали добавляется CheckBox и прописываете на него обработку (у нас пример на актуальность статуса, вы можете сделать по своей логике:
attributes: { "ActualOnly": { dataValueType: Terrasoft.DataValueType.BOOLEAN, type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, value: true } }, diff: /**SCHEMA_DIFF*/[ { "operation": "insert", "name": "ActualOnly", "parentName": "Detail", "propertyName": "tools", "values": { "bindTo": "ActualOnly", "labelConfig": { "caption": { "bindTo": "Resources.Strings.ActualOnlyCheckboxCaption" } }, "visible": { "bindTo": "getActualOnlyFilterVisible" }, "controlConfig": { "className": "Terrasoft.CheckBoxEdit", "checkedchanged": { "bindTo": "changeActualOnlyFilter" }, "checked": { "bindTo": "ActualOnly" } }, "classes": { "labelClass": ["checkbox-caption"] }, } } ]/**SCHEMA_DIFF*/, changeActualOnlyFilter: function(checked) { this.set("ActualOnly", checked); this.reloadGridData(); }, getFilters: function() { var filters = this.callParent(arguments); var filterKey = "ActualOnlyFilter"; var ActualOnly = this.get("ActualOnly"); if (ActualOnly && !filters.contains(filterKey)) { filters.add(filterKey, this.Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "UsrStatus.UsrActual", true)); } else if (filters.contains(filterKey)) { filters.removeByKey(filterKey); } return filters; }, getActualOnlyFilterVisible: function() { return this.getFiltersVisible(); }, getFiltersVisible: function() { return !this.get("IsDetailCollapsed"); }
Здравствуйте!
Вы можете посмотреть как похожий фильтр реализован в базовой версии системы. Примеров реализации будет фильтр на детали "Хронология". Блок фильтров этой детали сделан в TimelineFiltersSchema.
Также в ряде подобных статей есть примеры и подсказки:
https://community.terrasoft.ua/questions/kak-dobavit-filtr-v-detali
https://community.terrasoft.ru/articles/primery-filtrov-v-detali
https://community.terrasoft.ru/questions/bystrye-filtry-po-dannym-detal…
https://community.creatio.com/questions/quick-filters-detail
https://community.creatio.com/questions/prefilter-detail-grid-page-load
https://community.creatio.com/questions/how-add-quick-filters-detail
Трефилов Павел Сергеевич,
Спасибо! Но при добавлении фильтра по id обьекат Account, деталь не отображается на странице.
filterGroup.add("AccountFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Account", AccountId));
Если убрать строку, деталь отображается и фильтруется. Но не по тому обьекту Account в которую зашли