Вопрос

Добрый день!

Внутри CRM есть большое число позиций изделий из сплавов металлов. В сплав может входить от двух до четырех металлов.  

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

Есть ли способ найти только те позиции, где требуемый металл находится на первом месте?
(Например: АРбуз, АРка, АРгон. Но не: бАРжа, кАРтон, сАРай) 

У меня такой же вопрос

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

Вариантов много я бы посмотрел в сторону

1) Искать начинающиеся на #Арб

2) или изменить структуру хранения данных о составе металла

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

В расширенных фильтрах

 

Варфоломеев Данила,

Спасибо за совет, но строка с указанием сплава имеет вид - #Наименование сплава# (#Металл1##Металл2##Металл3##Металл4#) Например: Мельхиор (CuNi)

Вариантов много я бы посмотрел в сторону

1) Искать начинающиеся на #Арб

2) или изменить структуру хранения данных о составе металла

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

А что мешает искать по «(Cu»?

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

Спасибо за совет, хорошая идея!

Войдите или зарегистрируйтесь, чтобы комментировать
Идея

Добрый день!

Еще одна идея для маркетплейса: Справочник фильтров применяемых к разделам системы для ролей/пользователей.

Список полей:

Раздел/Деталь/Справочник (короче таблица в любом ее проявлении);

Пользователь/Роль (SysAdminUnit)

Фильтр (фильтр, со всеми возможностями как в дин.группе).

 

Вне зависимости от того, что было выбрано при выходе из системы, при входе применять фильтр по-умолчанию

Обсуждение
1 комментарий

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

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

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

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый вечер!
Вопрос такой, нужно в разделе "Контрагенты" сформировать список клиентов, у которых в "фактическом" адресе указан город Москва (с чем я разобрался) и присутствует также "юридический" адрес. Не могу понять, как включить в выборку условие с "юридическим" адресом?


 

У меня такой же вопрос

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

Вот пример Как я его понял исходя из условий Задачи

Михаил, не уверен, что получится именно то, что хочет автор. У Вас найдёт где есть или тот, или тот тип адреса.

Лучше так:

 

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Хочу дополнительно по определенным сложным условиям фильтровать Результат в активности.

Единственным способом мне видится lookupListConfig filters. 

Вопрос - как корректно вызвать родительские фильтры, чтобы не копипастить их в свой код?

У меня такой же вопрос

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

Все зависит от того, каким образом реализованы родительские фильтры.

Не так давно уже обсуждали подобную тему здесь.

Если бы родительские фильтры были вынесены в отдельный метод, тогда можно было бы просто Ваш метод унаследовать от родительского и в нём вызвать callParent.

Но так как, к сожалению, это не так, Вам прийдется дублировать родительские фильтры в своем коде sad

Все зависит от того, каким образом реализованы родительские фильтры.

Не так давно уже обсуждали подобную тему здесь.

Если бы родительские фильтры были вынесены в отдельный метод, тогда можно было бы просто Ваш метод унаследовать от родительского и в нём вызвать callParent.

Но так как, к сожалению, это не так, Вам прийдется дублировать родительские фильтры в своем коде sad

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте. *bpm'sales
Есть ли возможность реализовать на практике следующее:
1. В форме фильтрации отчета, раздела аналитика, сделать поле выбора значений из справочника который выглядит следующим образом - 

Но при открытии окна выбора открывалось окно Множественного выбора, например как тут
2. Передавать Id выбранных записей в отчет.

Есть идеи?

У меня такой же вопрос

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

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

var config = [

          {

                name: 'FormingMethod',

                dataValueType: 'FormingMethod'

            }

]

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

var config = [

          {

                name: 'FormingMethod',

                dataValueType: 'FormingMethod'

            }

]

Солонко Олег Иванович,

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

Фильтрация по множественному выбору записей в разделе — это то, что есть сейчас. Подробнее описывал в соседней теме.

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

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

Как вариант, можно смотреть на создание карточки параметров отчёта в интерфейсе 5.Х. Там включение множественного выбора включатся одной галочкой. Но тогда нужно будет разбираться, как данные из 5.Х-карточки передаются в отчёт.

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

Вопрос

Можно ли, работая в коммуникационной панели, настроить фильтр по входящим, обработанным письмам за определенную дату?

Ответ

В приложении не реализованы массовые действия с письмами в коммуникационной панели. Как обходное решение, можно создать справочник на основании объекта "Activity" и уже в нём настроить необходимый фильтр.

Поделиться

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день,

Возможно ли отфильтровать справочное поле внутри модального окна? Я попробовал обычным путем через атрибуты, но это не сработало, бпм даже не зашла в реализацию "lookupListConfig". В справочнике просто отображались абсолютно все значения

 

После решил попробовать заполнить справочник вручную нужными значениями

//attributes
"RIBDocType": {
    "dataValueType": Terrasoft.DataValueType.ENUM,
    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
    "caption": "RIBDocType"
},
"documentTypeList": {
    "dataValueType": Terrasoft.DataValueType.ENUM,
    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
    "isCollection": true
}
 
//diff
{
	"operation": "insert",
	"parentName": "Header1",
	"propertyName": "items",
	"name": "RIBDocType",
	"values": {
		"bindTo": "RIBDocType",
		"caption": "Тип документа",
		"classes": {"wrapperClass": ["base-edit"]},
		"layout": {"column": 0, "row": 3, "colSpan": 24},
		"textSize": "Default",
		"contentType": Terrasoft.ContentType.ENUM,
		"labelConfig": {
			"visible": true
		},
		"controlConfig": {
			"className": "Terrasoft.ComboBoxEdit",
			"list": {
				"bindTo": "documentTypeList"
			},
			"change": {
				"bindTo": "onMyValueChange"
			},
			"prepareList": {
				"bindTo": "prepareDocumentTypeList"
			}
		}
	},
	"index": 3
}
 
//methods
 
onRender: function() {
	if (!this.get("documentTypeList")) {
		this.set("documentTypeList", this.Ext.create("Terrasoft.Collection"));
	}
 
},
 
prepareDocumentTypeList: function(filter, list) {
	if (list === null) {
		return;
	}
	list.clear();
	var columns = {};
	var value1 = {
		displayValue: "Type1",
		value: "e8670398-603b-43ca-820d-03e5b03fc275"
	};
	var value2 = {
		displayValue: "Type2",
		value: "14fcef3a-7d9e-4737-810f-52d57db3673a"
	};
	var value3 = {
		displayValue: "Type3",
		value: "672606f8-da25-40bd-a4ef-95c958331743"
	};
	columns[1] = value1;
	columns[2] = value2;
	columns[3] = value3;
	list.loadAll(columns);
	console.log(list);
},
 
onMyValueChange: function(val) {
	if (val && val.displayValue) {
		console.log("you pick: ", val.displayValue);
	}
},

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

 

У меня такой же вопрос

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

Сериков Асхат Кайратович,

Вот, например, код страницы с проекта. Если в attributes добавить lookupListConfig для поля Contact, всё подтянется

/*jshint ignore: start*/
define("UsrSchema", [],
	function() {
		return {
			mixins: {},
			messages: {},
			attributes: {},
			details: {},
			diff: /**SCHEMA_DIFF*/[
				{
					"operation": "insert",
					"name": "mainBoxContainer",
					"values": {
						"id": "mainBoxContainer",
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"items": []
					}
				},
				{
					"operation": "insert",
					"name": "mainBoxContainerGrid",
					"parentName": "mainBoxContainer",
					"propertyName": "items",
					"values": {
						"itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
						"items": []
					}
				},
				{
					"operation": "insert",
					"parentName": "mainBoxContainerGrid",
					"propertyName": "items",
					"name": "Contact",
					"values": {
						"bindTo": "Contact",
						"caption": "Контакт",
						"contentType": Terrasoft.ContentType.ENUM,
						"layout": {
							"column": 0,
							"row": 0,
							"colSpan": 24
						}
					},
				}
			]/**SCHEMA_DIFF*/,
			methods: {
				init: function() {
					this.callParent(arguments);
				},
 
				getLookupQuery: function(filter, column) {
					var esq = this.callParent(arguments);
					var lookupListConfig = this.getLookupListConfig(column);
					if (lookupListConfig) {
						this.Terrasoft.each(lookupListConfig.columns, function(column) {
							if (!esq.columns.contains(column)) {
								esq.addColumn(column);
							}
						}, this);
					}
 
					var schemaColumn = this.getColumnByName(column);
					if (schemaColumn.lookupListConfig && schemaColumn.lookupListConfig.filter) {
						esq.filters.addItem(schemaColumn.lookupListConfig.filter());
					}
 
					return esq;
				},
				getLookupListConfig: function(columnName) {
					var schemaColumn = this.getColumnByName(columnName);
					if (!schemaColumn) {
						return null;
					}
					var lookupListConfig = schemaColumn.lookupListConfig;
					if (!lookupListConfig) {
						return null;
					}
					var excludedProperty = ["filters", "filter"];
					var config = {};
					this.Terrasoft.each(lookupListConfig, function(property, propertyName) {
						if (excludedProperty.indexOf(propertyName) === -1) {
							config[propertyName] = property;
						}
					});
					return config;
				}
			}
		};
	});
/*jshint ignore: end*/

 

1) Я бы попробовал 

columns[value1.value] = value1;
columns[value2.value] = value2;
columns[value3.value] = value3;

+ в каждом объекте продублировал 

var value1 = {
	displayValue: "Type1",
        name: "Type1",
	value: "e8670398-603b-43ca-820d-03e5b03fc275"
};

чисто на всякий случай

2) Если это своё модальное окно, не унаследованное от basePage, то придётся копировать логику из getLookupQuery (BasePageV2). Там как раз таки и идёт перебор аттрибутов на фильтры, доп колонки и т.п.

Варфоломеев Данила,

Спасибо, да не наследованное, пойду пробовать 

Сериков Асхат Кайратович,

Вот, например, код страницы с проекта. Если в attributes добавить lookupListConfig для поля Contact, всё подтянется

/*jshint ignore: start*/
define("UsrSchema", [],
	function() {
		return {
			mixins: {},
			messages: {},
			attributes: {},
			details: {},
			diff: /**SCHEMA_DIFF*/[
				{
					"operation": "insert",
					"name": "mainBoxContainer",
					"values": {
						"id": "mainBoxContainer",
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"items": []
					}
				},
				{
					"operation": "insert",
					"name": "mainBoxContainerGrid",
					"parentName": "mainBoxContainer",
					"propertyName": "items",
					"values": {
						"itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
						"items": []
					}
				},
				{
					"operation": "insert",
					"parentName": "mainBoxContainerGrid",
					"propertyName": "items",
					"name": "Contact",
					"values": {
						"bindTo": "Contact",
						"caption": "Контакт",
						"contentType": Terrasoft.ContentType.ENUM,
						"layout": {
							"column": 0,
							"row": 0,
							"colSpan": 24
						}
					},
				}
			]/**SCHEMA_DIFF*/,
			methods: {
				init: function() {
					this.callParent(arguments);
				},
 
				getLookupQuery: function(filter, column) {
					var esq = this.callParent(arguments);
					var lookupListConfig = this.getLookupListConfig(column);
					if (lookupListConfig) {
						this.Terrasoft.each(lookupListConfig.columns, function(column) {
							if (!esq.columns.contains(column)) {
								esq.addColumn(column);
							}
						}, this);
					}
 
					var schemaColumn = this.getColumnByName(column);
					if (schemaColumn.lookupListConfig && schemaColumn.lookupListConfig.filter) {
						esq.filters.addItem(schemaColumn.lookupListConfig.filter());
					}
 
					return esq;
				},
				getLookupListConfig: function(columnName) {
					var schemaColumn = this.getColumnByName(columnName);
					if (!schemaColumn) {
						return null;
					}
					var lookupListConfig = schemaColumn.lookupListConfig;
					if (!lookupListConfig) {
						return null;
					}
					var excludedProperty = ["filters", "filter"];
					var config = {};
					this.Terrasoft.each(lookupListConfig, function(property, propertyName) {
						if (excludedProperty.indexOf(propertyName) === -1) {
							config[propertyName] = property;
						}
					});
					return config;
				}
			}
		};
	});
/*jshint ignore: end*/

 

Варфоломеев Данила,

Спасибо

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Коллеги, добрый день!

Проблема в следующем:

При создании стандартного фильтра (по группе ответственных) в разделе Обращения, на страницу выводится список обращений не только данной группы, но и других групп.

Оказалось, что при создании такого фильтра, по умолчанию выставляется  условие сравнения "СОДЕРЖИТ", а не  "=" (равно).  

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

Можно ли как-то изменить "условие сравнения по умолчанию" для стандартного фильтра?

Спасибо!

У меня такой же вопрос

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

Добрый день!

Стандартный фильтр действительно работает по принципу "СОДЕРЖИТ". Внести изменения в его условия сравнения возможности нет. 

Рекомендуем использовать расширенный фильтр, где есть возможность выбрать "=".

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Товарищи помогите решить задачу.

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

Справочник вида :Название - Описание.

Задача фильтровать значения по колонке описание

Я так понимаю что в атрибутах я должен сделать что-то вроде

"UsrDebtorStatus":{
  dataValueType: Terrasoft.DataValueType.LOOKUP,
  lookupListConfig: {
      filter: function() {
      var description= "Дебитор";
      return Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "????????????",description);
              }
      }
  }

 

У меня такой же вопрос

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

если UsrDebtorStatus — обычный справочник, то скорее всего Name. Обычно 2 параметром идёт колонка из объекта (в "кубик" UsrDebtorStatus загляните). Ну и лучше всего по guid-у сортировать

Роман, добрый день!

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

1. Согласно базовой логике приложения, для того, чтоб иметь возможность реализовать фильтрацию в зависимости от типа клиента, колонка, которая содержит записи типов клиентов (в справочнике), должна быть с типом "Справочник". Данную колонку необходимо добавить в разделе "Конфигурация":
  - найти объект, который является Вашим справочником
  - открыть объект, развернуть его наполнение объекта, нажать правой кнопкой мыши на "Inherited Columns", выбрать "Добавить", выбрать тип колонки "Справочник";
  - в свойствах созданной колонки, в поле «Справочник» указать справочник типов, по которому необходимо будет выполнять фильтрацию;
  - опубликовать объект.

2. На странице раздела, в которой будет присутствовать справочное поле, настроить бизнес-правило:
  - добавить действие бизнес-правила "Добавлять фильтр значений в поле"
  - указать в поле "какую колонку фильтровать и по какой связи в справочнике этого поля" - созданное справочное поле по связи с полем, в котором указан тип клиента;
  - указать в поле "по какому полю фильтровать" поле на странице раздела, в котором указан тип клиента;
  - сохранить изменения.

Больше о настройке бизнес-правил Вы сможете узнать на Академии: https://academy.terrasoft.ru/documents/sales-enterprise/7-11/nastroyka-biznes-pravil
Также на Академии есть информация по разработке бизнес-правила фильтрации: https://academy.terrasoft.ru/documents/technic-sdk/7-11/primer-primeneniya-pravila-filtration, но мы рекомендуем использовать функционал Бизнес-правил в Мастере раздела.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Нужно сделать фильтрацию фильтра.

В выделенную часть нужно вывести только сотрудников, как это реализовать. 

Заранее благодарен.

У меня такой же вопрос

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

никак, для этого используйте возможности расширенной фильтрации

Или вооружиться напильником и сломать пару модулей (гуглите "simpleFilter" по конфигурации + можно в quickFilter ещё заглянуть). Ну это прям если совсем надо.

Войдите или зарегистрируйтесь, чтобы комментировать