Всем доброго дня! 

Добавила свои кастомные быстрые фильтры через аттрибуты и переопределение функции initQueryFilters , фильтры работают как нужно. Теперь не могу найти где находится базовый пересчет количества. Может быть кто-то знает.

Прикрепленные файлы

Нравится

5 комментариев
              var activeViewName = this.getActiveViewName();
              if (activeViewName === this.get("AnalyticsDataViewName")) {
                this.sandbox.publish("SectionUpdateFilter",
                                     null, [this.getQuickFilterModuleId()]);
              }

Пробуйте запустить такой код после применения ваших фильтров

не помогло, пробовала также и без проверки условия.

Можете отправить полный код, где делаете фильтр?

Трефилов Павел Сергеевич,

define("OrderSectionV2", ["ProcessModuleUtilities","BaseFiltersGenerateModule","css!UsrStylesOrderSectionV2"], function(ProcessModuleUtilities,BaseFiltersGenerateModule) {
	return {
		entitySchemaName: "Order",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		attributes: {
            "UsrPPNumberFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrPPNumbers": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrMyNumberFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrMyNumbers": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrContrFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrContr": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrNameFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrMyName": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrQua": {
                "dataValueType": Terrasoft.DataValueType.INTEGER,
                "values": ""
            },
        },
		diff: /**SCHEMA_DIFF*/[	
			{
                "operation": "insert",
                "name": "MyFilterContainer",
                "parentName": "LeftGridUtilsContainer",
                "propertyName": "items",
                "index": 3,
                "values": {
                    "id": "MyFilterContainer",
                    "itemType": this.Terrasoft.ViewItemType.CONTAINER,
                    "items": [],
 
                }
            },
 
 
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "PP_Number",
				"index": 1,
                "values": {
                    "bindTo": "UsrPPNumberFilter",
                    "caption": {"bindTo": "Resources.Strings.UsrPPNumberCaption"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "ppNumChanged"
                        }
                    }
 
                }
            },
 
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton1",
					"index": 2,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel" },
					}
			},
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "my_Number",
				"index": 3,
                "values": {
                    "bindTo": "UsrMyNumberFilter",
                    "caption": {"bindTo": "Resources.Strings.myNumber"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "myNumberChanged"
                        }
                    }
 
                }
            },
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton2",
					"index": 4,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel2" },
					}
			},
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "my_Contr",
				"index": 5,
                "values": {
                    "bindTo": "UsrContrFilter",
                    "caption": {"bindTo": "Resources.Strings.myContr"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "myContrChanged"
                        }
                    }
 
                }
            },
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton3",
					"index": 6,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel3" },
					}
			},
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "PeriodSelectButton",
					"index": 7,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.LookupIcon"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "openMyLook" },
					}
			},
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "my_Name",
				"index": 8,
                "values": {
                    "bindTo": "UsrNameFilter",
                    "caption": {"bindTo": "Resources.Strings.myName"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "myNameChanged"
                        }
                    }
 
                }
            },
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton4",
					"index": 9,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel4" },
					}
			},
 
        ]/**SCHEMA_DIFF*/,
 
		methods: {
 
		clearFilter: function() {
			this.set("UsrPPNumberFilter", "");
			this.onUsrFilterChanged();
		},
 
		onUsrFilterChanged: function() {
			this.reloadGridData();
		},
 
		initQueryFilters: function(esq) {
			this.callParent(arguments);
			//номер в пп
			var usrEmailFilter = this.get("UsrPPNumbers");
			if (usrEmailFilter) {
				esq.filters.add("UsrPPNumberFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "UsrNumberInPP".substring(), usrEmailFilter));
			} else {
				esq.filters.removeByKey("UsrPPNumberFilter");
			}		
 
			//Номер
			var usrMyFilter = this.get("UsrMyNumbers");
			if (usrMyFilter) {
				esq.filters.add("UsrMyNumberFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "Number".substring(), usrMyFilter));
			} else {
				esq.filters.removeByKey("UsrMyNumberFilter");
			}
			//Контрагент
			var usrContrFilter = this.get("UsrContr");
			if (usrContrFilter) {
				esq.filters.add("UsrContrFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "Account.Name".substring(), usrContrFilter));
			} else {
				esq.filters.removeByKey("UsrContrFilter");
			}
			//Название
			var usrNameFilter = this.get("UsrMyName");
			if (usrNameFilter) {
				esq.filters.add("UsrNameFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "UsrName".substring(), usrNameFilter));
			} else {
				esq.filters.removeByKey("UsrNameFilter");
			}
 
 
		},
 
		ppNumChanged: function(a, b, c) {
			this.set("UsrPPNumbers", a);
			this.onUsrFilterChanged();
 
		},
 
		myNumberChanged: function(a, b, c) {
			this.set("UsrMyNumbers", a);
			this.onUsrFilterChanged();
		},
 
		myContrChanged: function(a, b, c) {
			this.set("UsrContr", a);
			this.onUsrFilterChanged();
		},
 
		myNameChanged: function(a, b, c) {
			this.set("UsrMyName", a);
			this.onUsrFilterChanged();	
		},
 
		addCallBack: function(args) {
		  this.selectedRows = args.selectedRows.getItems();
 
			var ids = [];
			var names = [];
			this.selectedRows.forEach(function(item) {
				ids.push(item.Id);
				names.push(item.Name);
		   });
			this.set("UsrContr",names);
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').value = names;
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').focus();
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').blur();
		},
 
 		openMyLook: function(){
			var config = {
				entitySchemaName: "Account",
				columns: ["Name"]
			};
			this.openLookup(config, this.addCallBack, this);
		},
		onDel: function(){
			document.getElementById('OrderSectionV2PP_NumberTextEdit-el').value = null;
			this.set("UsrPPNumberFilter", "");
			this.onUsrFilterChanged();
		},
		onDel2: function(){
			document.getElementById('OrderSectionV2my_NumberTextEdit-el').value = null;
			this.set("UsrMyNumberFilter", "");
			this.onUsrFilterChanged();
		},
		onDel3: function(){
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').value = null;
			this.set("UsrContrFilter", "");
			this.onUsrFilterChanged();
		},
		onDel4: function(){
			document.getElementById('OrderSectionV2my_NameTextEdit-el').value = null;
			this.set("UsrNameFilter", "");
			this.onUsrFilterChanged();
		},
 
		}
	};
});

 

Анастасия Шумейко,

Добрый день.

 

Вам нужно проверить уходит ли запрос на получение количества записей.

Если запрос уходит, то нужно проверить фильтрацию которая уходит в запросе. Возможно, что количество обновляется, но неправильно, поскольку используется та же фильтрация.

Если запрос не уходит, то нужно проверить как он формируется в базовой версии и вызвать обновление количества записей.

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

Коллеги, здравствуйте.

Не до конца понимаю как задать фильтрацию выпадающего списка времени для полей с типом "Дата/Время" в карточке.

Идея в том, чтобы ужать выпадающий список под рабочие часы (9:00-18:00).

Подскажите пожалуйста как грамотнее всего реализовать?

Спасибо!

Нравится

1 комментарий
Лучший ответ

Александр, это поле — компонент ядра, в конфигурации он не дорабатывается. Можно сделать рядом два поля: одно для ввода только даты, без времени, а другое — справочное с выпадающим списком только рабочего времени. И программно сводить их значения в одно поле объекта с полной датой.

Или оставить обычное поле с датой и временем, но в обработчике корректировать неподходящие выбранные значения, как сейчас в карточке задачи убирают секунды в функции clearSeconds.

Была такая же идея по поводу ограничения расписания, добавил и Вашу о поле ввода времени.

Александр, это поле — компонент ядра, в конфигурации он не дорабатывается. Можно сделать рядом два поля: одно для ввода только даты, без времени, а другое — справочное с выпадающим списком только рабочего времени. И программно сводить их значения в одно поле объекта с полной датой.

Или оставить обычное поле с датой и временем, но в обработчике корректировать неподходящие выбранные значения, как сейчас в карточке задачи убирают секунды в функции clearSeconds.

Была такая же идея по поводу ограничения расписания, добавил и Вашу о поле ввода времени.

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

Добрый день коллеги

 

Проблема такая не могу настроить фильтр в клиентской схеме так что бы выобрка действующих контактов была по Региону пользователя который открыл раздел.

 

К примеру если сотрудник зашёл в раздел контакты и сотрудник из региона "New York", то у него в раздел подтянуться только контакты у которых в поле Регион проставлен "New York"

 

Вот пример кода, нужна помощь с фильтром "RegionFilter"

filterGroup.add("ClientTypeFilter", this.Terrasoft.createColumnFilterWithParameter(
                        this.Terrasoft.ComparisonType.EQUAL, "ClientType", "15796DCC-EC99-4D1D-A270-37EC8CB26A07"));
                    filterGroup.add("RegionFilter", this.Terrasoft.createColumnFilterWithParameter(
                        this.Terrasoft.ComparisonType.EQUAL, "[Contact:Region]",
                        Terrasoft.core.enums.SysValue.CURRENT_USER_CONTACT.value));

Нравится

13 комментариев
Лучший ответ
esq.filters.add("RegionFilter", this.Terrasoft.createColumnFilterWithParameter(
       this.Terrasoft.ComparisonType.EQUAL, "Region.[Contact:Region].Id",
        Terrasoft.core.enums.SysValue.CURRENT_USER_CONTACT.value));

 

esq.filters.add("RegionFilter", this.Terrasoft.createColumnFilterWithParameter(
       this.Terrasoft.ComparisonType.EQUAL, "Region.[Contact:Region].Id",
        Terrasoft.core.enums.SysValue.CURRENT_USER_CONTACT.value));

 

Вообще, правильнее такое делать путём настройки прав по организационным ролям. Создать БП на создании контакта или изменении его региона и выдавать права на чтение нужной роли. Ну и для объекта настроить права на новые записи только тем, кому нужно видеть из всех регионов.

 

Так будет фильтроваться не только в разделе, а и в деталях контактов в других разделах, выборе контакта из справочника.

Зверев Александр, тут доработок было много до нас пока не будем рисковать. Но согласен, в идеале будет корректнее делать так

Зверев Александр,

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

Вроде бы у записей о правах есть несколько видов и затираются только те, которые генерировались прошлый раз автоматически. Те, у которых стоит ручное происхождение, не трогаются.

Нет, затираются все, к сожалению. По данному вопросу уже был разговор с Террасофт

Да, действительно, Александр, Вы недавно писали.

 

Уточнил у разработчиков ядра по результатам, проблема не подтвердилась, актуализация не затирает права, а вставляет новые, не трогая те, которые раздавались вручную либо через БП. Там дело немного в другом, то, что в системе все ещё есть запрещающие права, и при актуализации могут раздаваться разрешающие, и в итоге получается 2 противоречащих права. С этим вопросом пока не разбирались.

 

То есть, если не используете запрещающие права, должно работать корректно.

Зверев Александр,

постараюсь найти ответ поддержки где указывали что права при актуализации затирают права созданные процессом

Зверев Александр,

Добрый день, Александр!

В рамках данного обращения будет рассмотрен вопрос по тех.реализации доступов ролей

Вы верно заметили, что при актуализации прав доступа все изменения прав бизнес процессом затираются.

По сути актуализация прав удаляет и заново добавляет права доступа согласно настроек. 

Однако, бизнес процессом изменяются только права доступа по записям. 
Вы можете учесть этот момент в вашем кейсе. 

Права но операциям и на колонки, бизнес процессом не изменяются, на текущий момент. 

На текущий момент права доступа хранятся в таких таблицах:
Доступ по операциям
SysEntitySchemaOperationRight

Доступ по записям
Настройки прав хранятся в таблице: SysEntitySchemaRecordDefRight
Права хранятся в таблице: Sys[Объект]Right
Происхождение прав хранится в таблице: SysEntitySchemaRecRightSource

Доступ по колонкам
Настройки прав хранятся в таблице: SysEntitySchemaColumnRight
Уровень прав хранится в таблице: SysEntitySchemaColRightLevel

Я создам задачу на отдел разработки, по описанному кейсу для рассмотрения её решения в будущих версиях приложения.

Зверев Александр,

как видно из ответа "Вы верно заметили, что при актуализации прав доступа все изменения прав бизнес процессом затираются." все же затираются

Уточнял, нет, не подтвердилось.

 Актуализация не трогает права которые розданы БП либо вручную. Все что она делает, удаляет права которые выданы дефолтной раздачей (права выданые вручную или БП отсекаются по источнику) и раздает по новым настройкам дефолтных прав.

Зверев Александр,

"

Все что она делает, удаляет права которые выданы дефолтной раздачей (права выданые вручную или БП отсекаются по источнику) 

" - можно подробнее, так как не совсем понял Вас?

У записи в таблице прав есть справочное поле SourceId, оно ссылается на справочник SysEntitySchemaRecRightSource со значениями: Owner, Author, Manual, Default.

 

Возможно, ранее в БП раздали не с тем значением, вот их и удалило заодно.

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

Иногда возникает необходимость сделать выборку, например, за некоторое количество предыдущих недель. На текущий момент стандартным фильтром такое настроить не предоставляется возможным. Есть только три варианта: следующая/текущая/предыдущая неделя (https://prnt.sc/sjlqp3).

 

Можно ли попросить на перспективу рассмотреть вариант с отфильтровкой недель также как дни и часы? Таким же образом: 

https://prnt.sc/sjltb5 (Предыдущих/Следующих дней), 

https://prnt.sc/sjlu4k  (Предыдущих/Следующих часов).

 

1 комментарий

Здравствуйте, Дарья!

Передали данное пожелание команде разработки для анализа возможности внедрения такой возможности в будущих версиях продукта.

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

Добрый день. Есть такой сценарий. По нажатию на кнопку на странице должна открыться страница редактирования содержимого справочника, где должны будут установится фильтры в зависимости от некоторых на странице. Есть ли возможность реализовать подобное? Код открытия справочника выглядит примерно так.

var defaultValues = [
    {
        name: "UseSeparatedPageHeader",
        value: true
    },
    {
        name: "Operation",
        value: ConfigurationEnums.CardStateV2.EDIT
    }
];
var stateObject = {
    isSeparateMode: true,
    schemaName: "BaseLookupConfigurationSection",
    entitySchemaName: "MyEntity",
    valuePairs: defaultValues,
    moduleId: "LookupSectionModule_BaseLookupConfigurationSection",
    operation: "open",
    isInChain: true
};
requestUrl = "LookupSectionModule/BaseLookupConfigurationSection";
this.sandbox.publish("PushHistoryState", {
     hash: requestUrl,
     stateObj: stateObject
});

 

Нравится

1 комментарий

Добрый день. К сожалению, в данный момент в приложении не предусмотрено создание Стандартных фильтров(Фильтр - Добавить условие) из программного кода. Ответственной команде разработчиков ядра известно данное ограничение в приложении, и они планируют добавить новые возможности для работы с фильтрами в будущих релизах. Возможно, какую-то часть вашего кейса покроет использование быстрых фильтров по дате и/или ответственному - их можно задать программно в initFixedFiltersConfig. Пример такой реализации можно найти в ActivitySectionV2 из пакета NUI.

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

Здравствуйте, Коллеги! У меня возник вопрос по фильтрам, почему когда массив arrayNeededIdOfSalesCenter пуст, он мне выводит все значения, а не пустоту? Когда массив не пуст, все нормально отрабатывает. Как получить именно пустоту? Заранее спасибо за помощь.
"ITSaleCenter": {
"lookupListConfig": {
"filters": [
function() {
var currentSaleArea = this.get("ITSaleArea"),
filterGroupMain = Ext.create("Terrasoft.FilterGroup");
if (currentSaleArea) {
var arrayNeededIdOfSalesCenter = [];
this.get("CollectionSaleCenter").each(function(item) {
arrayNeededIdOfSalesCenter.push(item.get("ITSysAdminUnit.Name"));
});
filterGroupMain.add("IsNeededNameSaleCenter",
Terrasoft.createColumnInFilterWithParameters(
"Name",
arrayNeededIdOfSalesCenter));
}
return filterGroupMain;
}
]
}
},

Нравится

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

del

Понял вас, самый простой способ проверить размер массива и добавить туда несуществующее значение.

"ITSaleCenter": {
"lookupListConfig": {
"filters": [
function() {
var currentSaleArea = this.get("ITSaleArea"),
filterGroupMain = Ext.create("Terrasoft.FilterGroup");
if (currentSaleArea) {
var arrayNeededIdOfSalesCenter = [];
this.get("CollectionSaleCenter").each(function(item) {
arrayNeededIdOfSalesCenter.push(item.get("ITSysAdminUnit.Name"));
});

if (arrayNeededIdOfSalesCenter.length == 0) {
arrayNeededIdOfSalesCenter.push("#!@^");
}

filterGroupMain.add("IsNeededNameSaleCenter",
Terrasoft.createColumnInFilterWithParameters(
"Name",
arrayNeededIdOfSalesCenter));
}
return filterGroupMain;
}
]
}
},

В таком случае при отсутствии значений в arrayNeededIdOfSalesCenter, ITSaleCenter будет пуст.

Да, поведение не совсем очевидное, но оно действительно такое.
Необходимо проверять массив на пустоту, перед формированием фильтра, если он не пуст - формируем Ваш createColumnInFilterWithParameters, в случае пустого массива - возвращать другой фильтр, специальный который всегда в окне справочника будет выдавать "пустоту"
я обычно использую такой "попросим вернуть Id равные NULL":

Terrasoft.createColumnIsNullFilter("Id");

решение универсальное, колонка Id у нас есть везде, а нулевые значения в ней не встречаются :)

Всем спасибо :)

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

Всем привет!

Задался вопросом переноса настроенных групп фильтров через SVN на другие среды.
Заметил, что при добавлении фильтра в таблице Sysprofiledata создается или модифицируется строка с ключом ContractSectionV2GridDataViewFilters с настройками. Ситуация вроде бы, похожа на ситуацию
с настройками колонок, но при переносе SQL скриптом, фильтр на другой среде не появляется.
Может кто-то подскажет, какие еще данные нужно переносить, чтобы обеспечить гарантированный перенос настроенных групп фильтров на рабочую среду через svn?

Заранее спасибо.

Нравится

1 комментарий

Дмитрий, ContractSectionV2GridDataViewFilters - фильтры, примененные пользователем в разделе, которые отображаются при загрузке раздела. Они сохраняются в SysProfileData (и частично в кеше браузера пользователя).

Вам необходимо переносить данные таблицы [Object]Folder, где [Object] - название объекта раздела. Например, группы раздела "Контакты" хранятся в таблице ContactFolder.

Также необходимо перенести данные таблиц SysContactFolderRight (права доступа на группы), FolderFavorite (избранные группы).

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

Добрый день, стоит задача помечать метками входящие письма, решили для этой задачи создать справочное поле, подскажите, пожалуйста, можно ли что бы это поле отображалось сразу на панели справа

и как в дальнейшем можно сортировать по этому полю письма, если в активностях письма не отображаются, а на панели справа нет фильтров?

Нравится

1 комментарий

1) Поищите в CommunicationPanelEmailSchema, там генерятся представления для email-ов. Скорее всего можно расковырять ContainerList и вставить туда новое справочное поле.
2) Делать новый раздел с активностями с фильтром тип=почта/добавить в итоги активностей список, отфильтровать его, каждая активность отобразится с url-ссылкой на карточку (крайне криво, зато можно понаделать кучу фильтров)/опять же ковырять CommunicationPanelEmailSchema, добавлять фильтрацию в менюшку с троеточиями(например как новый подпункт), писать кучу обработчиков

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

Добрый день! Можно ли в группах фильтровать по сезонам: Лето 2016, Зима 2017 и т.д. Допустим выбрать записи у которых “Дата с” и “Дата по” попадает в Лето 2016 со страной Беларусь. И так же для остальных сезонов, чтобы сперва фильтровалось по сезону и году, а затем уже страна в подгруппе.
!

!

Нравится

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

Здравствуйте, Мария!

В базовой версии системы на текущий момент нету возможности фильтровать записи по сезонам. Необходимо использовать фильтр, как Вы указали, где указывать "Дату с" и "Дату по".

В будущих версиях системы появиться фильтр по кварталам.

Спасибо за ответ, а можно как-то указать промежуток для даты, что-то вроде: "Дата с" = 1.06.2016 - 31.08.2016?

Здравствуйте, Мария!

В данном случае Вы моежет построить расширенный фильтр с несколькими условиями:

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

В карточке детали, есть справочное поле: UsrParametr (который строится к справочнику: UsrRefParameter, с полями: Name, Description и UsrStatus из справочника UsrRefStatus, с полями: Name, Description).

Как отфильтровать поле UsrParametr, по имени статуса, т.е. по полю UsrStatus из Справочника UsrRefStatus.

Так же, если можно, объясните сам процесс построения запросов, если не затруднит, прокомментируйте построчно приведенный ниже код, а так же, хотелось бы подробного объяснения, для чего используется в запросе " : " и для чего " . "
Заранее спасибо.
Код:

"ActivityCategory": {
     dataValueType: Terrasoft.DataValueType.LOOKUP,
     dependencies: [
      {
       columns: ["ActivityCategory"],
       methodName: "onActivityCategoryChange"
      }
     ]
    },
    "Result": {
     lookupListConfig: {
      filters: [
       function() {
        var type = this.get("ActivityCategory");
        var filterGroup = Ext.create("Terrasoft.FilterGroup");
        filterGroup.add("ActivityCategory",
         Terrasoft.createColumnFilterWithParameter(
          Terrasoft.ComparisonType.EQUAL,
          "[ActivityCategoryResultEntry:ActivityResult].ActivityCategory",
          type.value));
        filterGroup.add("BusinessProcessOnly",
         Terrasoft.createColumnFilterWithParameter(
          Terrasoft.ComparisonType.EQUAL,
          "BusinessProcessOnly",
          0));
        return filterGroup;
       }
      ]
     }
    },

Нравится

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

Здравствуйте!

Детализирую:

"ActivityCategory": {
     dataValueType: Terrasoft.DataValueType.LOOKUP,
     dependencies: [
      {
       columns: ["ActivityCategory"],
       methodName: "onActivityCategoryChange"
      }
     ]
    },

При изменении значения в поле ActivityCategory вызывается метод onActivityCategoryChange. Реализация этого метода:

onActivityCategoryChange: function() {
	var activityCategory = this.get("ActivityCategory");
	if (activityCategory && activityCategory.value === ConfigurationConstants.Activity.ActivityCategory.Meeting) {
		this.set("ShowInScheduler", true);
	}
}

Согласно этому методу в поле ShowInScheduler (Отображать в расписании) устанавливается значение true, если выбранная категория - встреча.

Теперь по второй части кода:

    "Result": {
     lookupListConfig: {
      filters: [
       function() {
        var type = this.get("ActivityCategory");
        var filterGroup = Ext.create("Terrasoft.FilterGroup");
        filterGroup.add("ActivityCategory",
         Terrasoft.createColumnFilterWithParameter(
          Terrasoft.ComparisonType.EQUAL,
          "[ActivityCategoryResultEntry:ActivityResult].ActivityCategory",
          type.value));
        filterGroup.add("BusinessProcessOnly",
         Terrasoft.createColumnFilterWithParameter(
          Terrasoft.ComparisonType.EQUAL,
          "BusinessProcessOnly",
          0));
        return filterGroup;
       }
      ]
     }

Данный код фильтрует значения в поле "Результат". Для выбора доступны значения, для которых:

  1. В справочнике ActivityCategoryResultEntry определяются возможные результаты для разных категорий активности. Добавляется фильтрация значений по категории активности
  2. Также не отображаются результаты, для которых уставлено значение "Использовать только в процессах"

Благодарю.

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